在c中,是原始数据类型,如“int”“long”“char”“unsigned”...所有宏? 如果是这样,他们在哪里定义?它们是如何实现的,例如“int”类型?
答案 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_t
或uintptr_t
或ptrdiff_t
之类的内容)实现为typedef或macros。但是编译器需要一些“原始”或“基本”类型(例如char
,int
等),它们内置在编译器中,而不是在头文件中定义。
答案 2 :(得分:1)
它们不是宏。每种编程语言都需要不是宏的主要类型,而是语言语法树的一部分。编译器会将这些原始数据类型directyl转换为适当的二进制表示。
我认为你也误解了如何使用宏。有些类型是通过typedef通过其他类型定义的。
typedef unsigned short BOOL;
你可以使用宏来做这件事,但这不会给你完整的编译器检查,这就是为什么你应该更喜欢tyepef。
答案 3 :(得分:0)
原始数据类型如int
,char
,float
等在C标准中定义,编译器本质上知道它们。其他类型如uint32_t
是在头文件中定义的typedef,它们是根据基元类型定义的。