C ++ MultiLine #if - PullRequest
       44

C ++ MultiLine #if

1 голос
/ 05 июля 2019

Я уже некоторое время пытаюсь найти это в Google, но не могу найти четкого ответа, если это вообще возможно.

Я хотел знать, возможно ли этосделать выражение MultiLine #if в C ++ аналогично этому типу, если

if (
   1 == 1 ||
   2 == 2 ||
   3 == 3
) {
   cout << "True\n";
}

Я надеялся на что-то вроде (что, я знаю, безнадежно неправильно)

#if
   1 == 1 ||
   2 == 2 ||
   3 == 3
#then
   cout << "True\n";
#else
   cout << "False\n";
#endif

Ответы [ 4 ]

6 голосов
/ 05 июля 2019
#if \
   1 == 1 || \
   2 == 2 || \
   3 == 3
   cout << "True\n";
#else
   cout << "False\n";
#endif

Комбинации с обратной косой чертой и новой строкой очень рано удаляются при предварительной обработке, даже до токенизации ввода. Вы можете использовать это для распределения директив препроцессора по нескольким физическим линиям.

Черт, вы теоретически могли бы даже сделать

#i\
f 1 == 1 |\
| 2 == 2 || 3 =\
= 3

но тогда ваши коллеги могут расстроиться из-за вас.

6 голосов
/ 05 июля 2019

Да. С продолжением строки:

#if \
   1 == 1 || \
   2 == 2 || \
   3 == 3
   cout << "True\n";
#else
   cout << "False\n";
#endif
2 голосов
/ 05 июля 2019

я думаю, что ответом будет использование экранирования символов в конце строки '\'

 #if \
   1 == 1 || \
   2 == 2 || \
   3 == 3
   void foo(){}
#else
   void bar(){}
#endif
2 голосов
/ 05 июля 2019

Правильный способ использования - ниже. Каждый макрос предварительной обработки может быть записан в несколько строк, используя \ в конце текущей строки. В cpp:

нет ключевого слова #then
    #if \
       1 == 1 || \
       2 == 2 || \
       3 == 3
       cout << "True\n";
    #else
       cout << "False\n";
    #endif
...