如果我定义如下的宏:
#define TEST_VARIABLE 10
编译器如何在内部存储它?作为有符号/无符号整数?
我的程序中有一个循环:
for (unsigned int loop = 0; loop < TEST_VARIABLE; loop++)
我想检查编译器是否添加了额外的指令来输入cast&#34; loop&#34;与TEST_VARIABLE比较时变量。如果TEST_VARIABLE存储在不同的数据类型中,则需要额外的指令。
答案 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
,因为没有类型后缀或强制转换。