#define definer(x) #define #x?
#x 是 x 的字符串化。您不能#define 字符串标记。 (#define "foo"。)它必须是一个标识符 [a-zA-Z0-9_]* 标记。
你不能像这样嵌套#define。 #define 中不能有#define。
您可以在#if 块中包含#if。
#ifdef FOO
#ifdef BAR
...
#else // BAR
...
#endif // BAR
#else // FOO
...
#endif //FOO
您在#if 宏中可以使用的表达式也受到一定限制。但有时你可以解决这个问题。例如:
/* Use CONCATENATE_4_AGAIN to expand the arguments to CONCATENATE_4 */
#define CONCATENATE_4( a,b,c,d) CONCATENATE_4_AGAIN(a,b,c,d)
#define CONCATENATE_4_AGAIN(a,b,c,d) a ## b ## c ## d
/* Creates a typedef that's legal/illegal depending on EXPRESSION. *
* Note that IDENTIFIER_TEXT is limited to "[a-zA-Z0-9_]*". *
* (This may be replaced by static_assert() in future revisions of C++.) */
#define STATIC_ASSERT( EXPRESSION, IDENTIFIER_TEXT) \
typedef char CONCATENATE_4( static_assert____, IDENTIFIER_TEXT, \
____failed_at_line____, __LINE__ ) \
[ (EXPRESSION) ? 1 : -1 ]
加上类似的东西:
STATIC_ASSERT( sizeof(int1) == 1, sizeof_int1_equal_1 );
(是的,我知道#include 。这只是一个例子。)