我知道的兩種可能的方式來定義和使用struct
S:寫作結構代碼,無論是在C和C++中的工作
#1
struct person
{
char name[32];
int age;
};
struct person dmr = {"Dennis Ritchie", 70};
#2
typedef struct
{
char name[32];
int age;
} person;
person dmr = {"Dennis Ritchie", 70};
的第一種方式的有趣的特性是,無論是類型和變量可以有相同的名稱:
struct person person = {"Sam Persson", 50};
這是C中的慣用嗎?它保證在C++中工作嗎?還是有我應該知道的角落案件?
請注意,我對純粹的C++答案不感興趣(例如「使用std::string
而不是char[32]
」)。這是一個關於C/C++兼容性的問題。
我不會稱之爲「有趣的財產」,它是相當模糊的財產。最好從大寫開始保留類型名稱 - 區分類型名稱和變量名稱。 –
我已經標記爲[typedef struct vs struct definitions](http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions)的重複。從技術上講,你可以認爲它不是(另一個問題只涉及C),但是C++中的語義與單一區別相同,即如果查找在用戶定義的標識符空間中找不到全局標識符空間。這也被接受的答案(包含C++的一部分) –
也被視爲**而不是定義一個'不是名稱),還有'typedef's(可以應用於已命名或未命名的類型),但它們不是以任何速率定義'struct'的兩種方式。並且你錯過了3),結合了兩者:'typedef struct type {} type;'它值什麼(這是慣用的C方式) –