2012-09-22 101 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的定義或定義新的來擺脫編譯器問題。

相關問題