2009-11-08 70 views
1

在c中,是基本數據類型,如「int」「long」「char」「unsigned」...所有的宏? 如果是這樣,他們在哪裏定義?它們是如何實現的,如「int」類型?是c宏中的原始數據類型?

回答

6

它們不是宏,它們只是被編譯器轉換成適當的數據存儲和操作。

例如,當你在你的程序有:

int i; 
i=5 
i+=7; 

編譯器將其轉換爲類似於這樣:

Allocate sizeof(int) bytes in the stack 
Put the number 5 in the allocated space 
Retrieve the number on the allocated space, add 7 to it, and save it again at the same location 
2

一些標準的類型(通常,像size_tuintptr_tptrdiff_t )被實現爲typedef或宏。但編譯器需要一些「原始」或「基本」類型(如char,int等),它們是內置於編譯器中的,並且未在頭文件中定義。

0

的基本數據類型等intcharfloat等被C標準中定義的,並且編譯器知道他們本質。其他類型如uint32_t是在頭文件中定義的typedef,它們是用原始類型定義的。

1

它們不是宏。每種編程語言都需要不是宏的主要類型,而是語言語法樹的一部分。編譯器會將這些原始數據類型directyl轉換成適當的二進制表示形式。

我想你也誤解了如何使用宏。有些類型是通過typedef通過其他類型定義的。

typedef unsigned short BOOL; 

可能做到這一點與宏但是這不會給你完整的編譯器檢查,這就是爲什麼你應該更喜歡tyepef。