2012-09-22 4 views
1

위키 백과에 대해 Typedef에 대해 읽고 있습니다. 해당 페이지에 언급 된 예는이 예제에서 컴파일러가 불평하는 이유는 무엇입니까?

typedef int km_per_hour ; 
typedef int points ; 

km_per_hour current_speed ; 
points high_score ; 
... 

void congratulate(points your_score) { 
if (your_score > high_score) 
... 

입니다. 더 자세히 말하면 나는 이것을 이해하지 못합니다.

void foo() { 
unsigned int a;   // Okay 
unsigned km_per_hour b; // Compiler complains 
long int c;    // Okay 
long km_per_hour d;  // Compiler complains 
... 

컴파일러가 부호없는 긴 코드를 사용하는 이유는 무엇입니까?

+5

typedef는 매크로와 같지 않습니다. – Mysticial

+0

signed와 unsigned 같은 것은 사용자 정의 유형 (구조체)과 함께 사용할 수 없으며 typedef와 함께 사용할 수 없습니다. – Jay

답변

3

typedef '형식보다 앞에 signed 또는 unsigned을 붙일 수 없습니다. signedunsigned은 기본 정수 유형을 수정할 수 있으며이를 직접 수행 할 수 있습니다.

컴파일러는 signed 또는 unsigned 단독으로 또는 char, short, intlong 근처에 구문 분석합니다. 다른 모든 경우에는 유효하지 않거나 예상치 못한/잘못 배치 된 것으로 간주됩니다.

그런 의미에서 signedunsignedconst 또는 volatile 수정 자로 작동하지 않습니다.

0

추가 지정자로 typedef를 수정할 수 없습니다. km_per_hour b로만 작성해야합니다. 및 km_per_hour d; 도움이되기를 바랍니다.

0

유형을 정의했기 때문에 - 즉 검을 땅에 집어 넣고 사례를 만들었 기 때문입니다.

그런 다음 케이스를 바꿀 수 없습니다. 그것은 법정이나 컴파일러에서 작동하지 않습니다.

은유를 드려 죄송합니다.

1

typedefsmacros처럼 수정하거나 사용할 수 없습니다. km_per_hourint으로 지정되어 있으므로 그대로 사용할 수 있습니다.

컴파일러 문제를 제거하려면 typedefs의 정의를 변경하거나 새 정의를 정의해야합니다.

관련 문제