klu*_*utt 2 c self-reference c-preprocessor
我遇到了这些问题:
#define bool bool
#define false false
#define true true
Run Code Online (Sandbox Code Playgroud)
我不认为我需要说的不仅仅是"wtf?",而是要明确:为自己定义一些东西有什么意义?
这些行来自clang stdbool.h
它允许用户代码根据是否定义了这些宏来有条件地编译:
#if defined(bool)
/*...*/
#else
/*...*/
#endif
Run Code Online (Sandbox Code Playgroud)
它基本上使您不必使用另一个名称(例如HAVE_BOOL)污染全局命名空间,前提是该实现允许其用户知道如果它提供了一个bool,它还将提供一个具有相同名称的宏扩展到它(或者实现可以简单地在内部使用它来实现它自己的预处理器条件.
C和C++标准明确允许(并要求没有无限扩展)
BTW,类似函数的递归(或自我反射)宏更有用:
#define puts(X) (nblines++,puts(X))
Run Code Online (Sandbox Code Playgroud)
(内部puts 是对标准puts函数的调用;宏通过计数"重载"这样的进一步调用nblines)
你的定义可能很有用,例如后面的结构就像#ifdef true,并且它不能简单,因为它会"擦除"每次进一步使用#define truetrue,所以它必须是精确的#define true true.