【发布时间】:2017-03-22 16:43:21
【问题描述】:
我有寻址宏(它在微控制器上,所以访问物理地址是可以的)分解成这个(经过一长串的条件定义、属性等):
#define ADDR_A (*18)
#define ADDR_B (*30)
#define ADDR_C (*18)
我想比较它们以便优化编译:
#if ADDR_A==ADDR_C
return 1;
#else
return 0;
#endif
但我得到“错误:运算符'*'没有左操作数”,这是有道理的。是否可以比较宏的定义。我有一种预感,我可以以某种方式将它们转换为字符串进行比较,但我还没有找到一种方法(比如用 # 表示宏参数)。
不,我不打算在运行时执行此操作,因为我正在计算周期。
【问题讨论】:
-
这不是有效的 C。编译器应该如何知道它是一个地址以及对象的类型?您的其余问题尚不清楚。你想比较什么,为什么?它闻起来像 XY 问题。
-
我完全同意@Olaf。此外,如果表达式只有文字常量(就像您要比较两个内存映射寄存器的地址一样),我使用的所有 C 编译器都会优化普通的
if语句;而且,由于您使用的是微控制器,因此您绝对应该启用优化。换句话说,不需要依赖预处理器来优化相关代码;任何半体面的 C 编译器都可以并且将为您完成(如果您使用普通的 Cif语句)。
标签: c macros preprocessor