typedef
bir adı bir türle ilişkilendiren bir dil yapısıdır.
Bunu, orijinal türü kullandığınız gibi kullanırsınız, örneğin
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
onları gibi kullanmak
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
Gördüğünüz gibi, typedefed adını yukarıdaki tanımıyla değiştirebilirsiniz .
Zorluk, C ve C ++ 'da sözdizimi ve okunabilirlik işlevlerinin işaretçisinde yatmaktadır ve bu typedef
tür bildirimlerin okunabilirliğini artırabilir. Bununla birlikte, sözdizimi uygundur, çünkü işlevler - diğer daha basit türlerden farklı olarak - bir dönüş değeri ve parametrelerine sahip olabilir, bu nedenle işlev için bir işaretçinin bazen uzun ve karmaşık bildirimi olabilir.
Okunabilirlik, işlev dizilerine ve diğer bazı dolaylı lezzetlere işaretçilerle gerçekten zor olmaya başlayabilir.
Üç sorunuzu cevaplamak için
Typedef neden kullanılır?
Kodun okunmasını kolaylaştırmak için - özellikle işlevlere veya yapı adlarına işaretçiler için.
Sözdizimi garip görünüyor (işlev bildirimi için işaretçide)
Bu sözdiziminin en azından başlangıçta okunması açık değildir. typedef
Bunun yerine bir bildirimin kullanılması okumayı kolaylaştırır
Bir işlevin bellek adresini saklamak için bir işlev işaretçisi oluşturulmuş mu?
Evet, bir işlev işaretçisi bir işlevin adresini saklar. Bunun typedef
sadece bir programın yazılmasını / okunmasını kolaylaştıran yapı ile bir ilgisi yoktur ; derleyici, gerçek kodu derlemeden önce typedef tanımını genişletir.
Misal:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456