없음 C++
에 적용되지 않습니다. C++
에서 선호 :
이
struct Foo
{
. . .
};
나머지는 C
에 적용됩니다.
대부분의 경우 기술적으로는 struct Foo {};
이면 충분합니다. 그러나 사용하기에 약간 자세한 내용은 Foo가 사용될 때마다 struct
을 반복해야합니다.
struct Foo {}
void func(struct Foo* foo);
typedef가 더 간단합니다.
typedef struct { } Foo;
void func(Foo* foo);
이 익명 struct
를 생성하고 제공한다 :
typedef struct Foo { } Foo;
void func(Foo* foo);
가 다음 구문을 사용하는 것도 가능 하나 라이너을 수행 할 때 :
struct Foo { };
typedef struct Foo Foo;
void func(Foo* foo);
이
더으로 단축 할 수있다 그것은 Foo라는 이름입니다. 이 수치는
enum
초로 자주 표시됩니다.
일반적으로 초기 중복 Foo가 남아있는 이유가 있습니다. 그것은 연결된 목록처럼 자기 참조 구조체를 만드는 유일한 방법 일뿐입니다.
typedef struct Node
{
Node* next;
} Node;
구조체에 대한 포인터를 선언 할 방법이 없습니다 ommited 초기 Node
합니다. 기술적으로 이것은 유효하지만, 이제는 단 하나가 아닌 두 개의 이름이 필요합니다.
typedef struct node_
{
node_* next;
} Node;
왜 사용 : 균일
typedef struct Foo { } Foo;
. 이 선언 스타일은 모든 기반을 다루므로 구조체를 선언 할 때 생각할 필요가 없습니다.
C가 아니라 C입니다. 올바른 언어를 언급하고 있습니까? –
C 또는 C++,이 예제에서는 차이가 없습니다. Google이나 책에서 typedef를 찾으십시오. –
@gbrandt : 그렇습니다. 그러나 C++에서 구조체를 선언 할 이유가 없습니다. –