Неожиданная синтаксическая ошибка при расширении макроса - PullRequest
0 голосов
/ 02 мая 2019

Я получаю приведенную ниже ошибку при попытке использовать условную компиляцию, как показано ниже: Примечание: обратите внимание, что ONE, TWO и THREE являются символами, определенными перед обработчиком, тогда как THREE является макросом, а компилятор используется IAR (IDE AtmelStudio)

  1. Добавлены дополнительные скобки для ((определены (ОДИН)) и, скорее всего, для ДВУХ и ТРЕХ
  2. Попытка включить блок #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 не должно быть определено case 2: если SUM установлено в 0, то как обычно (без проверки THREE)

Фактический результат:

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

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Выражения в условных строках препроцессора должны быть автономными. Вы не можете поместить #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))

0 голосов
/ 02 мая 2019

если (определено (ОДИН) &&! Определено (ДВЕ)

В приведенном выше утверждении вы пропустили одну закрывающую скобку. Пожалуйста, добавьте это

...