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

标签 c macros

如果我定义如下宏:

#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/

相关文章:

latex - 在 tikzpictures 中使用宏?

c++ - 打印宏连接失败

macros - 如何编写 Clojure 宏来创建多个表达式?

c - 总线错误: 10. 编译时没有错误

c - WinDDK : Running My First Driver

C 如何从结构中建立结构

c++ - 如何在 C++ 中将文字字符串和 MACRO 连接到有效字符串

c - GCC ARM C 编译器不遵守 -std=c99 的 %llx printf 格式化代码

c - 使用大量节点后 malloc 失败

struct - 是否可以自动定义结构的字段?