2014-07-17 32 views
3
typedef long a; 
extern a int c; 

嗨上面的代碼中給出了類似In function 'main': Line 7: error: two or more data types in declaration specifiersç的typedef

但是當同樣的「A」在第二行是由長取代它工作完全正常的錯誤。 這工作完全正常

typedef long a; extern long int c;

請解釋爲什麼會發生這種情況

+0

正如你可以看到[點擊這裏] [1]長已經是一個類型 [1]:http://en.wikipedia.org/wiki/C_data_types –

+0

,'long'被視爲'的縮寫長整型「。 「int」意味着例如「long int int」。 – BLUEPIXY

回答

4

long int是一個類型名。

type-alias-name type-name被解析爲即使type-alias-namelongtype-nameint別名兩種類型。

3

A typedef不是宏。

一旦你有一個typedef你不再有文本「INT」那正好可以與文字「長」作出新的類型合併。這是它自己的一流類型,它會在同一個聲明中與另一類型衝突。