У меня есть сложный многострочный макрос-код на 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 ++ компилятором, поэтому новые языковые особенности не помогли бы.