cevap 1:

typedef - C, özel veri türleri oluşturmanıza izin veren bir anahtar kelimedir veya daha doğru bir şekilde, başka bir veri türü için bir takma ad oluşturduğunu söyleyebiliriz. Yeni bir tür oluşturmadığını, bunun yerine mevcut bazı türler için yeni bir ad eklediğini unutmayın.

Ama neden buna ihtiyacımız var? Typedef ile bu veri türü için örneğin "köpek yavrusu" gibi kısa ve tatlı bir takma ad oluşturabilir ve ardından bu türdeki her değişkeni bildirdiğinizde karmaşık veri türü yerine "köpek yavrusu" yazabilirsiniz. Bu, daha basit kodlamaya ve daha iyi okunabilirliğe ve belgelemeye yol açabilir. typedef ayrıca veri türlerinin makineye bağlı olduğu kodunuzun taşınabilirliğine de yardımcı olabilir. Kodunuzu bir makineden diğerine taşırken, veri türünün kullanıldığı her değişken bildirim satırı yerine typedef’leri değiştirmeniz yeterlidir.

Misal :

typedef unsigned int köpek yavrusu;
köpek = 10;

Durum 1: typedef kullanmadan yapı tanımı

#include 

struct Bisiklet {
    char bike [20];
    float fiyatı;
};

int main () {
    yapı Bisiklet b1; // Yapı değişkeni bildirimi
    printf ("Bisiklet adını girin:");
    scanf ( "% [^ \ n] s" b1.bike);
    printf ("Fiyatı girin:");
    scanf ( "% m", ve b1.price);
    printf ("\ nBike adı:% s", b1.bike);
    printf ("\ nFiyat:% .2f", b1.price);
    dönüş 0;
}

Durum 2: typedef kullanarak yapı tanımı

#include 

typedef struct Bisiklet {
    char bike [20];
    float fiyatı;
}Bisiklet;

int main () {
    Bisiklet b1; // Yapı değişkeni bildirimi
    printf ("Bisiklet adını girin:");
    scanf ( "% [^ \ n] s" b1.bike);
    printf ("Fiyatı girin:");
    scanf ( "% m", ve b1.price);
    printf ("\ nBike adı:% s", b1.bike);
    printf ("\ nFiyat:% .2f", b1.price);
    dönüş 0;
}

Bunu yapmanın bir avantajı, bu türdeki her değişkeni bildirdiğinizde yapı yazmak zorunda kalmamanızdır. Typedef'in bir önişlemci yönergesi olmadığını unutmayın, bu nedenle yorumu #define'ın aksine önişlemci tarafından değil derleyici tarafından işlenir.

Umarım şüphelerinizi düzeltirsiniz ... Baba dostum!


cevap 2:
C programlamasında typedef struct ve struct arasındaki fark nedir?

typedef ve struct iki ayrı özelliktir. Sadece bunları tek bir beyanda birleştirebilirsiniz.

struct, üye listesinden oluşan yeni bir yapı türü tanımlar:

yapı noktası {
    int x;
    int y;
};

Bu, struct point adlı yeni bir tür tanımlar.

typedef yeni bir tür oluşturmaz. Bunun yerine, mevcut bir tür için yeni bir ad oluşturur.

typedef int my_int;
/ * int ve my_int aynı türün adlarıdır * /

Bir yapı tanımını şu gibi bir typedef ile birleştirmek yaygındır:

typedef struct point {
    int x;
    int y;
} nokta;

Bunun “struct point {…}” kısmı, struct point adlı yeni bir tür oluşturur. Bunu “typedef… point” ile sarmak, mevcut tip yapı noktası için yeni bir isim noktası oluşturur.

Şahsen bunu yapmamayı tercih ederim. Türü zaten mükemmel bir isim, yapı noktası var. Bunun için başka bir isim eklemek, sadece küçük bir yazım kazandırıyor, bu da endişelendiğim kadarıyla bir avantaj değil. Ve bazı programcılar, yapı etiketi ve typedef adı için farklı tanımlayıcılar kullanmakta ısrar ederler, ancak her ikisinde de aynısını kullanmak geçerlidir.

Türün opak olması gerekiyorsa bir typedef kullanacağım, yani türü kullanan kodun bir yapı olduğu gerçeğine bağlı olması gerekmez. DOSYA türü bunun bir örneğidir; bir yapı olarak tanımlanması muhtemeldir, ancak onu kullanan kodun bunu bilmesine veya üyelerine başvurabilmesine gerek yoktur.

Elbette tüm C programcıları bu konudaki fikrimi paylaşmıyor ve tek bir tanımlayıcı olan tür için bir ad oluşturmak için typedef'i kullanmayı tercih ediyor. Her iki tarzda da yazılan kodu okuyabilmeniz gerekir.

(C ++ 'da, bu tür typedef gerekli değildir, çünkü yapı yapı noktası yapı noktası veya nokta olarak adlandırılabilir.)


cevap 3:

C dili standardı, etiket tanımlayıcıları (struct / union / enum için) ve normal tanımlayıcılar (typedef ve diğer tanımlayıcılar için) dahil olmak üzere farklı tanımlayıcı kategorileri için ayrı ad alanları zorunlu kılar.

typedef, mevcut veri türlerine alternatif adlar atamak için C dilinde kullanılan bir anahtar kelimedir. Veri türlerinin adları programlarda kullanımı biraz karmaşık hale geldiğinde, çoğunlukla kullanıcı tanımlı veri türleriyle kullanılır.

sözdizimi: typedef (typedef ) ()

Benzer şekilde yapı söz konusu olduğunda.

Az önce söylediyseniz:

struct Foo {...};
Foo x;

Derleyici hatası alırsınız, çünkü Foo yalnızca etiket ad alanında tanımlanır.

Bunu şu şekilde beyan etmeniz gerekir:

yapı Foo x;

Bir Foo'ya ne zaman başvurmak istersen, ona her zaman bir Foo yapman gerekirdi. Bu can sıkıcı olur, böylece bir typedef ekleyebilirsiniz:

struct Foo {...};
typedef struct Foo Foo;

Şimdi struct Foo (etiket ad alanında) ve sadece düz Foo (sıradan tanımlayıcı ad alanında) her ikisi de aynı şeyi ifade eder ve struct anahtar sözcüğü olmadan Foo türündeki nesneleri serbestçe bildirebilirsiniz.

Yapı:

typedef struct Foo {...} Foo;

yalnızca bildirim ve typedef için kullanılan bir kısaltmadır.

En sonunda,

typedef struct {...} Foo;

anonim bir yapı bildirir ve bunun için bir typedef oluşturur. Bu nedenle, bu yapı ile etiket ad alanında bir ad yoktur, yalnızca typedef ad alanında bir ad vardır. Bu, aynı zamanda ileri bildirilemeyeceği anlamına gelir. Bir ileri bildirim yapmak istiyorsanız, buna etiket ad alanında bir ad vermeniz gerekir.

C ++ 'da, tüm struct / union / enum / class bildirimleri, ad aynı ada sahip başka bir bildirimle gizlenmediği sürece örtük olarak tanımlandıkları gibi çalışır. Tüm ayrıntılar için Bu bağlantı Michael Burr'un cevabına bakınız.

Umarım size yardımcı olur.