У меня есть проблема, которая может быть легко решена.
У меня есть такой код:
#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
Но я бы предпочел только один короткий макрос в одной строке.
Что вы можете сделать, так это определить макрос:
#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
).
Других решений пока нет …