(AVR-)GCC中的双宏扩展

时间:2014-02-06 15:39:06

标签: macros preprocessor avr-gcc expansion

如果这个问题已在其他地方得到解答,请原谅我,但我不确定要搜索什么。

我从批处理文件传递一个值,虽然是一个makefile,但是传递给头文件,如下所示:

(使用AVR-GCC 4.5.2)

批次:

make ADDR=FOO

生成文件:

CFLAGS += -DADDR=$(ADDR)
...
gcc $(CFLAGS) main.c

这是头文件 main.h ,包含在main.c中;它应该在编译时根据ADDR的值选择特定的引脚排列:

#include "defs.h"

#if ADDR == FOO
...     // Select pinout 1
#elif ADDR == BAR
...     // Select pinout 2
#endif

比较值FOO和BAR是main.h包含的全局头文件 defs.h 中定义的常量:

#define FOO 23
#define BAR 42

现在问题:比较不起作用,ADDR不断读取为0.这似乎是因为预处理器在比较之前没有解析ADDR,即将FOO扩展到23.告诉编译器执行此扩展将是有帮助的。

当然,如果我直接在批处理文件中传递ADDR = 23,它就有效,但为了灵活性,我想使用defs.h中的别名而不是固定的数字常量。

顺便说一句,如果放在main.c中,以下工作:

int addr_val = ADDR;    // is now 23

也许有一个我现在不知道的简单解决方案。请随时贡献。

祝你有愉快的一天!

0 个答案:

没有答案