как задать в #define конструкцию #if...#endif
#if ...
...
#endif
#if ...
...
#endif
В смысле как?:
#if DEBUG
... //Это скомпилируется
#endif
#undef DEBUG
#if DEBUG
... //А вот это уже нет
#endif
....\
#endif
#define check(state) #ifdef state .... #endif
....\
#endif
Все простое перепробовал - ошибки в компиляции
maybe, потому что в работе не проверял -- скомпилилось знач работает ;)
Я уже пробовал c "#":
#define bb {int i = 0;}
#define check(state) "#"ifdef aa state "#"endif
check(bb)
и c "##" (без кавычек не проходит совсем)
но компилятор выдает
[C++ Error] Unit1.cpp(18): E2379 Statement missing ;
откуда это вылезает, непонятно
Syntax
#define macro_identifier <token_sequence>
Description
..........
However, if the macro expands into what looks like a preprocessing directive, such a directive will not be recognized by the preprocessor. There are these restrictions to macro expansion:
Any occurrences of the macro identifier found within literal strings, character constants, or comments in the source code are not expanded.
A macro won't be expanded during its own expansion (so #define A A won't expand indefinitely).
Example
#define HI "Have a nice day!"
#define empty
#define NIL ""
#define GETSTD #include <stdio.h>
Так оно и есть - параметры макры "склеивает" - иногда удобно задавать новые имена.
You can paste (or merge) two tokens together by separating them with ## (plus optional whitespace on either side). The preprocessor removes the whitespace and the ##, combining the separate tokens into one new token. You can use this to construct identifiers.
Given the definition
#define VAR(i, j) (i##j)
the call VAR(x, 6) expands to (x6).
ты ж сам привёл кусок доки - там в екзампле такая строка есть. разве это не оно?