小编Hen*_*nry的帖子

如何让gcc预处理器检查表达式是否计算值或什么都没有?

我正在使用gcc(特别是avr-gcc).

所以这是我的难题:

假设我在某处定义了这些:

#define THING_0_A 0
#define THING_0_B 1
#define THING_1_A 0
Run Code Online (Sandbox Code Playgroud)

然后在第二个文件中我有这个:

#define CONCAT_(A,B,C) A ## B ## C
#define CONCAT(A,B,C) CONCAT_(A,B,C)

#define ID 0

#define THING_N(A) CONCAT(THING_,ID,A)
Run Code Online (Sandbox Code Playgroud)

有了这个我现在有一些表达式(仍然在第二个文件中):

THING_N(_A) // evaluates to 0
THING_N(_B) // evaluates to 1
THING_N(_C) // evaluates to... nothing? Or undefined? Or THING_0_C?
Run Code Online (Sandbox Code Playgroud)

现在,我正在努力解决的是如何做到这一点(还在第二个文件中):

#ifdef THING_N(_A)
    // Do something knowing that THING_N(_A) is defined (in this case THING_0_A)
#endif
Run Code Online (Sandbox Code Playgroud)

要么:

#if THING_N(_A)
    // Do something knowing that the value THING_N(_A) evaluates to is defined …
Run Code Online (Sandbox Code Playgroud)

c gcc language-lawyer c-preprocessor

11
推荐指数
1
解决办法
197
查看次数

标签 统计

c ×1

c-preprocessor ×1

gcc ×1

language-lawyer ×1