【发布时间】:2019-05-02 16:59:46
【问题描述】:
我在尝试使用条件编译时遇到以下错误,如下所示: 注意:请注意,ONE、TWO 和 THREE 是预处理器定义的符号,而 THREE 是宏,使用的编译器是 IAR (IDE AtmelStudio)
- 为 ((defined(ONE)) 添加了额外的括号,并且可能用于两个和三个
- 尝试包含一个仅带有 ) 的 #else 块,并将附加的 ) 放在 #if (SUM) 下的语句末尾
#if (defined(ONE) && !defined(TWO)
#if (SUM)
&& !defined(THREE)
#endif
)
some_statements_1
#else
some_statements_2
#endif /* #if (defined(ONE) && !defined(TWO) */
我希望 some_statements_1 仅在定义 ONE 时执行 TWO 未定义并且
案例 1: 如果 SUM 设置为 > 0,则不应定义 THREE
案例 2: 如果 SUM 设置为 0,则照常(不检查 THREE)
实际结果是:
Pe018: expected a ")" at line 1 and
error: Pe169: expected a declaration at line 3
【问题讨论】:
-
宏不跨越行边界。长宏可以使用 '\' 将多行合二为一。
-
我已经尝试在除最后一行之外的每一行的末尾插入 \,但唯一的结果是(相同的)语法错误显示在第 2 行而不是第 1 行
-
ONE、TWO和THREE定义为什么? -
SUM是宏还是运行时变量?如果它是运行时的,那么这根本不起作用。您需要在编译时还是运行时做出决定?
标签: c c-preprocessor