2009-11-08 69 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。