2012-03-02 9 views
2

제 질문은 간단합니다. C++에서 다음과 같은 선언에 typedef를 연기하는 것이 합법적입니까? gcc는 문제없이 코드를 수락하지만 사용되지 않는 방법입니까? 나는 명령의 시작 부분에 매번 typedef를 가진 샘플을 발견했기 때문에 이것을 묻습니다.C++의 Typedef enum 선언

enum _mytype { 
A=1, 
B=2 
} typedef mytype; 
+0

문법에 따라'typedef'가'decl'ion-seq -> decl'ion -> block-decl'ion -> simple-decl'ion -> decl-spec-seq - > decl-spec'), 그러나 의미론이 잘 정의되어 있는지 확신 할 수 없습니다. –

+1

이런 종류의 typedef 규칙이 C++에서 쓸모 없다는 것을 알고 있습니까? typedef st_foo {...} foo와 같은 일을하는 유혹은 더 이상 없습니다. C++에서는 short-handing이 아니기 때문에 'struct foo'없이 'foo'를 쓸 수 있습니다. 마찬가지로 typedef와 같은 것을 필요로하지 않습니다. en_foo {...} foo; 같은 이유로. 사실 그것은 BUFB aka Expert C Programming에 따라 typedef를 사용하여 'struct'또는 'enum'을 숨기는 C 조약조차 권장하지 않습니다. – stinky472

+1

그리고 밑줄로 시작하는 식별자를 사용하는 것은 좋은 생각이 아닙니다. –

답변

4

typedef X Y;

X typedef Y;

는 C++에 정확히 같은 일을 작성하는 두 가지 방법입니다. 어느 쪽도 더 이상 사용되지 않습니다. 첫 번째 표현이 "typedef X as Y"로 읽을 수 있기 때문에 더 많이 사용됩니다.

+1

+1. 한 번 후자의 스타일을 사용하여 자신의 코드에 1-space 들여 쓰기를 사용하는 성가신 습관을 가진 동료 중 한 명에게 이미 4-space 들여 쓰기를 사용하여 코드를 수정하는 방법을 사용했습니다. – stinky472

+0

나는 이것을 몰랐다. –

+1

@ stinky472 : 둘 다 탭 들여 쓰기를 사용해야합니다. 공간 들여 쓰기는 성가신 습관입니다. –

-2

는 C에서 당신은 종종

typedef enum 
{ 
} what_ever; 

을 사용하기 때문에 유형 "열거 what_ever"가 아니라 "what_ever"를 정의 할 C에서 "what_ever 열거가". 그러나 C++에서는 그렇지 않으며 이전 버전과의 호환성 때문에 C++을 작성할 때 typedef를 사용하면 안됩니다.

+0

나는이 질문을 다시 읽어야한다고 생각한다; 네가 전혀 대답하지 않았다고 생각해. –

관련 문제