是c宏中的原始数据类型?

时间:2009-11-08 08:09:32

标签: c types

在c中,是原始数据类型,如“int”“long”“char”“unsigned”...所有宏? 如果是这样,他们在哪里定义?它们是如何实现的,例如“int”类型?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

某些标准类型(通常是size_tuintptr_tptrdiff_t之类的内容)实现为typedef或macros。但是编译器需要一些“原始”或“基本”类型(例如charint等),它们内置在编译器中,而不是在头文件中定义。

答案 2 :(得分:1)

它们不是宏。每种编程语言都需要不是宏的主要类型,而是语言语法树的一部分。编译器会将这些原始数据类型directyl转换为适当的二进制表示。

我认为你也误解了如何使用宏。有些类型是通过typedef通过其他类型定义的。

typedef unsigned short BOOL;

可以使用宏来做这件事,但这不会给你完整的编译器检查,这就是为什么你应该更喜欢tyepef。

答案 3 :(得分:0)

原始数据类型如intcharfloat等在C标准中定义,编译器本质上知道它们。其他类型如uint32_t是在头文件中定义的typedef,它们是根据基元类型定义的。