如果我定义如下宏:
#define TEST_VARIABLE 10
编译器内部是如何存储的?作为有符号/无符号整数?
我的程序中有一个循环:
for (unsigned int loop = 0; loop < TEST_VARIABLE; loop++)
我想在与 TEST_VARIABLE 比较时检查编译器是否添加了额外的指令来类型转换“循环”变量。如果 TEST_VARIABLE 存储在不同的数据类型中,则需要额外的指令。
最佳答案
当预处理器执行宏替换时,它会将其视为文本。在宏处理过程中,替换看起来像一个数字这一事实完全无关紧要。当编译器处理结果时,就像您在其位置键入了替换内容一样。所以
for (unsigned int loop = 0; loop < TEST_VARIABLE; loop++)
被同等对待
for (unsigned int loop = 0; loop < 10; loop++)
编译器会将 10
解释为 signed int
。
关于c - C编译器如何存储宏变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532979/