C编译器如何存储宏变量?

时间:2017-04-21 02:33:25

标签: c macros

如果我定义如下的宏:

#define TEST_VARIABLE 10

编译器如何在内部存储它?作为有符号/无符号整数?

我的程序中有一个循环:

for (unsigned int loop = 0; loop < TEST_VARIABLE; loop++)

我想检查编译器是否添加了额外的指令来输入cast&#34; loop&#34;与TEST_VARIABLE比较时变量。如果TEST_VARIABLE存储在不同的数据类型中,则需要额外的指令。

2 个答案:

答案 0 :(得分:3)

当预处理器执行宏替换时,它将其视为文本。在宏处理期间,替换看起来像数字这一事实完全无关紧要。当编译器处理结果时,就像你在其位置键入替换一样。所以

for (unsigned int loop = 0; loop < TEST_VARIABLE; loop++)

相同
for (unsigned int loop = 0; loop < 10; loop++)

编译器会将10解释为signed int

答案 1 :(得分:0)

#define创建的宏基本上是文本替换,由preprocesser处理。然后将预处理器的结果交给编译器。

因此,当预处理器完成您的代码时,结果是:

for (unsigned int loop = 0; loop < 10; loop++)

然后编译器读取并编译此代码。所以在这种特殊情况下,你有一个数字常量。此常量的类型为int,因为没有类型后缀或强制转换。