Как закомментировать кусок кода в многострочном макросе? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть сложный многострочный макрос-код на C ++ (который обрабатывает некоторую геометрию и вычисляет ее физические свойства в RT), который используется много раз и не может быть преобразован в функцию (без огромных потерь пространства и производительности). Проблема в том, что мне иногда нужно настроить код внутри отключающих частей кода (во время компиляции для конкретных задач / машин) примерно так:

#define some_macro \
 bla;              \
 bla;              \
 if (0)            \
  {                \
  bla;             \
  bla;             \
  bla;             \
  }                \
 bla; 

Как вы можете видеть, это приводит к множеству unreachable code предупреждений из-за многократного использования макросов. Использование /* */ комментариев возможно, но очень плохо для управления таким кодом (по крайней мере, для меня) из-за необходимости изменения каждой строки кода.

Единственный другой жизнеспособный вариант, о котором я могу подумать, это использование макросов, например:

#define my_disable
#define some_macro  \
 bla;               \
 bla;               \
 #ifndef my_disable \
  bla;              \
  bla;              \
  bla;              \
 #endif             \
 bla; 

#undef my_disable

или с помощью некоторой переменной переменной типа volatile таким же образом:

volatile bool on=true;
#define some_macro \
 bla;              \
 bla;              \
 if (on)           \
  {                \
  bla;             \
  bla;             \
  bla;             \
  }                \
 bla; 

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

Есть ли другие варианты, не требующие изменения всех строк фрагмента кода или создания макроса / переменной для каждого фрагмента кода?

Другим, вероятно, гораздо более простым решением было бы отключить Предупреждение для части кода, оставив остальной код обработкой предупреждения, как обычно, но я не знаю синтаксис. Таким образом, альтернативный вопрос будет:

Как отключить [C++ Warning] W8066 Unreachable code только для части исходного кода?

Я застрял со старым BDS2006 C ++ компилятором, поэтому новые языковые особенности не помогли бы.

1 Ответ

3 голосов
/ 11 июля 2019

Как отключить [C++ Warning] W8066 Unreachable code только для части исходного кода?

Вы можете заключить код в операторы #pragma warn:

#pragma warn -8066 // disable W8066 warnings
<code>
#pragma warn .8066 // restore W8066 warnings back to default

В противном случаеЯ бы предложил сделать копию макроса, закомментировать оригинал и изменить копию, чтобы удалить требуемый код по мере необходимости.

/*
#define some_macro \
 bla;              \
 bla;              \
 if (0)            \
  {                \
  bla;             \
  bla;             \
  bla;             \
  }                \
 bla; 
*/
#define some_macro \
 bla;              \
 bla;              \
 bla; 

Или вы можете просто закомментировать нужный код внутриОригинальный макрос:

#define some_macro \
 bla;              \
 bla;              \
 //if (0)            \
 // {                \
 // bla;             \
 // bla;             \
 // bla;             \
 // }                \
 bla; 
...