【发布时间】:2009-11-08 16:15:50
【问题描述】:
在c中,诸如“int”“long”“char”“unsigned”之类的原始数据类型......都是宏吗? 如果是这样,它们在哪里定义?以及它们是如何实现的,例如“int”类型?
【问题讨论】:
在c中,诸如“int”“long”“char”“unsigned”之类的原始数据类型......都是宏吗? 如果是这样,它们在哪里定义?以及它们是如何实现的,例如“int”类型?
【问题讨论】:
它们不是宏,它们只是被编译器转换成适当的数据存储和操作。
例如当你在你的程序中有:
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
【讨论】:
一些标准类型(通常是 size_t 或 uintptr_t 或 ptrdiff_t)被实现为 typedef 或宏。但是编译器需要一些“原始”或“基本”类型(如char、int等),它们是编译器内置的,而不是在头文件中定义的。
【讨论】:
它们不是宏。每种编程语言都需要不是宏的主要类型,而是语言语法树的一部分。编译器会将这些原始数据类型直接转换为适当的二进制表示。
我认为您也误解了宏的使用方式。有些类型是通过 typedef 由其他类型定义的。
typedef unsigned short BOOL;
您可以使用宏来执行此操作,但这不会为您提供完整的编译器检查,这就是您应该更喜欢 tyepef 的原因。
【讨论】:
int、char、float 等原始数据类型在 C 标准中定义,编译器本质上知道它们。其他类型如uint32_t 是在头文件中定义的类型定义,它们是根据原始类型定义的。
【讨论】: