2012-09-22 78 views
1

我正在阅读关于wikipedia在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 
... 

为什么编译器会抱怨unsigned和long?

+5

请注意,typedefs与宏不一样。 – Mysticial

+0

就像签名和未签名不能与用户定义的类型(如结构)一起使用,它们也不能与typedef一起使用。 – Jay

回答

3

typedef'd类型之前,不能预先加入signedunsignedsignedunsigned只能修改基本整数类型并直接执行。

编译器解析signedunsigned单独或接近charshortintlong。在所有其他情况下,它们被认为是无效/意外/错位。

在此意义上,signedunsigned不能用作constvolatile修饰符。

0

您不能使用额外的说明符修改typedef。 你应该只写km_per_hour b;和km_per_hour d; 我希望这可以帮助。

0

因为您已经定义了一种类型 - 即将剑放在地上并制作您的案例。

你不能然后去改变你的情况。这在法庭和编译器中都不起作用。

对不起,隐喻。

1

typedefs不能修改或使用像macros。你有km_per_hour作为int,所以它只能这样使用!

您应该更改typedefs的定义或定义新的来摆脱编译器问题。

相关问题