2017-11-17 1 views
0

schot's answer은 좋은 것입니다. 그는 주장struct 태그, union 태그 및 enum 태그가 별도의 네임 스페이스를 갖고 있습니까?

  • 태그 (구조, 노동 조합 및 열거의 이름)가.

    // In the same scope 
    struct T {}; 
    union T {}; 
    enum T {}; 
    

    그러나 위의 인용에서 추론, 그것은 모든 태그 같습니다

는이 코드가 완전히 잘되도록 구조, 노동 조합 및 열거에 대한 태그, 다른 네임 스페이스를 가지고 있다고 생각 동일한 네임 스페이스를 공유합니다. 대답이 명확하지 않거나 잘못 되었습니까?

+0

는'gcc'이에 대한 하드 오류를 제공, 그래서 구조체, 노동 조합 및 열거 태그 같은 태그 네임 스페이스의 일부입니다 말할 것입니다. 나는 그들이 * 독립적 인 네임 스페이스를 차지할 수 있다고 생각하지만 분명히 그렇지 않습니다. –

답변

4

No.

모든 태그는 동일한 네임 스페이스를 공유합니다. 그래서, 당신은 할 수 없습니다 :

struct T {...}; 
union T {...}; 
enum T {...}; 

C11 draft N1570, 6.2.3 Name spaces of identifiers 명시 적으로의 각주를 추가 할 수 있습니다.

32) 태그가 인 경우에도 은 하나의 이름 공간 만 사용할 수 있습니다.

+0

설명 : 세 가지가 가능합니다. 한 번에. C는 동시에 여러 개를 허용하지 않습니다. – Mast

1

아니요, 별도의 네임 스페이스가 없습니다. 태그에는 네임 스페이스가 하나만 있습니다. 이

struct T{}; 
union T{}; 

가 아닌 동안

struct TS{}; 
union TU{}; 
int TS, TU; 

이 유효을 의미합니다. T의 두 선언은 같은 네임 스페이스에 있습니다.

+1

구조체와 공용체의 내용은 필요하지 않습니다. – iBug

+0

@iBug; 이제 내 질문에 대한 편집이 잘못되었습니다. 편집 중. – haccks

+2

글쎄, 그건 원래 내가 들여 쓰기 위해 들여 쓴 것입니다. 그렇지 않으면 중괄호에 타원을 남기지 않았을 것입니다. – iBug

1

질문에 대한 답변 :

태그 이름 : structs, unions 및 열거 타입의 이름으로 선언 된 모든 식별자. 세 종류의 태그 모두 하나의 이름 공간을 공유합니다.

reference guide에서 인용하면됩니다. 조회 시점

은 식별자 이름 공간은 사용되는 방식에 의해 결정된다 : 키워드 struct, union 또는 enum 다음

  • 식별자에 퍼진 태그 이름 공간. 그것은 가치가 무엇인지에 대한
관련 문제