struct
Sを使用するための2つの方法を認識してい
#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++の回答には興味がありません(例:char[32]
の代わりにstd::string
を使用してください)。これはC/C++互換性に関する質問です。
私は「面白い不動産」とは言わず、むしろ不明瞭な不動産です。型名と変数名を区別するために、型名を大文字から始めるのが良いでしょう。 –
これを[typedef構造体と構造体定義の重複](http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions)としてマークしました。技術的には、そうではないと考えることができます(他の質問はCのみを扱います)が、セマンティクスはC++でも同じですが、ユーザ定義の識別子空間でシンボルが見つかると、グローバル識別子空間。それは受け入れられた答え(それはC++のビットを含んでいます)でも扱われます –
また、それらは 'struct'を定義する2つの方法ではありません**、' struct'を定義する単一の方法があります'typedef'(名前付きまたは名前のない型にも適用可能です)がありますが、それはどんな速度でも' struct'を定義する2つの方法ではありません。 'typedef struct type {} type;'それは何の価値があるのか(慣用的なCの方法) –