Исключить строку из компиляции через Makro Stack Overflow

У меня есть проблема, которая может быть легко решена.

У меня есть такой код:

#define _MG_ALL //This might be defined in some other headerfile

#ifndef _MG_ALL
#define MG_ALL <?????>
#else
#define MG_ALL <nothing>
#endif

В коде это используется так:

ALL foo = thisIsSomeFunc(foo);

Эта строка должна быть скомпилирована, только если _ALL определено. Это также может быть решено с помощью этого:

#ifdef ALL
foo = thisIsSomeFunc(int foo);
#endif

Но я бы предпочел только один короткий макрос в одной строке.

-1

Решение

Что вы можете сделать, так это определить макрос:

#ifdef _ALL
#define ALL if(1)
#else
#define ALL if(0)
#endif

Когда вы используете его, он будет производить код, похожий на этот

ALL std::cout << "Debug Message" << std::endl;
==> if(1) std::cout << "Debug Message" << std::endl;

Хороший компилятор должен распознавать постоянное значение в if-statement и должен составлять только правую часть (1 ==> if part, 0 ==> nothing).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]