Neden bir yapı çok sık C typedef miyiz?
Birçok program aşağıdaki gibi yapılardan oluşan görmedim
typedef struct
{
int i;
char k;
} elem;
elem user;
Bunu birçok kez gördüm. Neden bu kadar sık gerekli midir? Herhangi bir neden veya geçerli alan?
CEVAP
Greg Hewgill dediği gibi, typedef artık her yerde struct
yazmak zorunda kalıyoruz. Sadece tuş vuruşlarını kaydeder, bu da bir nebze daha fazla bir soyutlama sağlar beri kod temizleyici yapabilirsiniz.
Åžeyler gibi
typedef struct {
int x, y;
} Point;
Point point_new(int x, int y)
{
Point a;
a.x = x;
a.y = y;
return a;
}
"her yerde, anahtar sözcük, daha çok bir tür" "senin dilinde. Noktası denir yok gibi görünüyor yapı görmek gerekmez zaman daha temiz olur , typedef
, sonra sanırım durum bu.
Ayrıca örnek (ve benim) struct
kendini adlandırma ihmal ederken, aslında adlandırma da donuk bir tip sağlamak istediğinizde yararlı olduğunu unutmayın. O zaman, örneğin: başlık içinde böyle bir kod var
typedef struct Point Point;
Point * point_new(int x, int y);
ve sonra uygulama dosyasında: struct
bildirim saÄŸlamak
struct Point
{
int x, y;
};
Point * point_new(int x, int y)
{
Point *p;
if((p = malloc(sizeof *p)) != NULL)
{
p->x = x;
p->y = y;
}
return p;
}
Bu ikinci durumda, kendi ulusal üstbilgi dosyası kullanıcıların gizli olduğu için değer Nokta dönüşü olamaz. Bu tekniği yaygın olarak örneğin GTK kullanılır.
GÜNCELLEMENot orada da oldukça iddialı projeleri C bu kullanım typedef
gizle struct
kabul kötü bir fikir, Linux çekirdeği olduğunu muhtemelen en iyi bilinen bu proje. Linus The Linux Kernel CodingStyle document' kızgın sözler. bkz: Bölüm 5 :) Benim açımdan "gereken soru belki de ayarlı değil" sonuçta taş,.
'yapı' ve 'typedef yapı...
typedef yapı vs yapı tanımlar...
Neden't bir yapı her üyenin boyut...
Neden sadece C bir dizi içeren bir yap...
Neden't bir yapı için varsayılan ...