我已经解决宏(这是一个微控制器,使访问物理地址是OK),打破了这个(有条件定义的长序列后,属性等):比较C宏
#define ADDR_A (*18)
#define ADDR_B (*30)
#define ADDR_C (*18)
我想对它们进行比较,所以我可以优化编译:
#if ADDR_A==ADDR_C
return 1;
#else
return 0;
#endif
,但我得到“错误:运营商‘*’没有左操作数”,这是有道理的。是否可以比较宏的定义。我有一种预感,我可以将它们转换为字符串来进行比较,但是我没有找到一种方法(就像使用#作为宏参数)。
不,我不想在运行时执行此操作,因为我正在计算周期。
这是无效的C.编译器应该如何知道它是一个地址和该对象的类型?你的问题的其余部分不清楚。你想比较哪些doy,为什么?它闻起来像一个XY-问题。 – Olaf
我完全同意@Olaf。另外,如果表达式只有字面常量(如果要比较两个存储器映射寄存器的地址,那么我所用的所有C编译器都会优化一个普通的'if'语句;而且,由于您使用的是微控制器,因此无论如何您都应该启用优化。换句话说,不需要依赖*预处理器*来优化相关的代码;任何一半体面的C编译器都可以为你做(如果你使用正常的C if语句)。 –