2014-10-14 3 views
0

나는 내 컴파일러 클래스에 대한 C + + 컴파일러를 쓰고 있는데, 나는 이것을 궁금해했다.동등한 typedefs 사이의 가정

typedef int FOO; 
typedef int BAR; 

int test; 
FOO i; 
BAR j; 

i = 1; 
j = 2; 
test = i + j; // Code clarity 

이 작동하도록되어 : 산술 해당 형식 정의 사이 따라서, B/C의 형식 정의는 느슨한 이름 동등성이? typedef는 정말로 단지 찬미하는 기본 유형입니까, 아니면 계층 구조로 계단식 연결됩니까?

+1

코드가 작동해야하는지 여부는 구현중인 언어의 의미에 전적으로 달려 있습니다. –

+0

"C++ 컴파일러를 작성 중입니다."... 정말요? 와우. –

답변

2

네, 괜찮습니다.하지만 구조체가 생길 때를 생각해보십시오.

+1

나는 그 사건에 대해 생각했다. 똑같이 작동합니다. 무슨 요점을 만들고 싶니? – MSalters

+2

@MSalters Structs는 엄격한 이름 동등성을 사용합니다.이 동등성은 다른 유형과 다르게 작동합니다. – KRUKUSA

1

C 및 C++에서 typedef 선언은 형식 이름에 대한 별칭을 정의합니다. 새로운 유형을 정의하지는 않습니다. 컴파일러는 typedef 이름을 포함하지 않는 형식 설명자로 모든 typedef를 (필요한 경우 재귀 적으로) 해결해야합니다. (그건 불가능하면, 프로그램이 잘 형성되지 않는다.)

그래서뿐만 아니라 어떠한 암시 적 변환과, FOO(1) + BAR(2) 일 잘, FOO로 정의 된 변수가 템플릿 특수화에 int 일치합니다 않습니다.