C-宏扩展过程中意外的语法误差



我在尝试使用条件汇编时获得以下错误:注意:请注意,一个,两个和三个是预处理定义的符号

  1. 为((定义(一个((添加了其他支架,并且可能是两个和三个
  2. 尝试将一个#else块与仅a(一起包含一个#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) */

我希望只有定义ONETWO,并且未定义some_statements_1,并且案例1:如果SUM设置> 0,则不应定义THREE案例2:如果将SUM设置为0,则像往常一样(无检查THREE(

实际结果是:

Pe018: expected a ")" at line 1 and
error: Pe169: expected a declaration at line 3

在处理前条件线上的表达式需要独立。您不能将#if放在预处理器表达式中间。

尝试:

#if defined(ONE) && !defined(TWO) && !((SUM) && defined(THREE))
     some_statements_1
#else
     some_statements_2
#endif

我假设SUM是一个宏,它扩展到适用于预处理器评估的整数常数。

(编辑:是#if defined(ONE) && !defined(TWO) && (!(SUM) || defined(THREE))

if(定义(一个(&&!定义(两个(

在上述语句中,您错过了一个闭幕式。请添加

最新更新