nem*_*ixx 6 c c++ c-preprocessor
我#define在学习C之前遇到过预处理器指令,然后在我读过的一些代码中遇到过它.但除了使用它来定义常量的替换和定义宏之外,我还没有真正解决使用它而没有"body"或token-string的特殊情况.
以这一行为例:
#define OCSTR(X)
Run Code Online (Sandbox Code Playgroud)
就这样!什么可以使用这个或更好,什么时候使用#define必要的?
这用于两种情况.第一个也是最常见的是条件编译:
#ifndef XYZ
#define XYZ
// ...
#endif
Run Code Online (Sandbox Code Playgroud)
你肯定已经将它自己用于包含警戒,但它也可以用于系统依赖:
#ifdef WIN32
// Windows specific code here...
#endif
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,WIN32更可能在命令行上定义,但也可以在"config.hpp"文件中定义.)这通常只涉及类似对象的宏(没有参数列表或括号).
第二个是条件编译的结果.就像是:
#ifdef DEBUG
#define TEST(X) text(X)
#else
#define TEST(X)
#endif
Run Code Online (Sandbox Code Playgroud)
这允许写下这样的东西:
TEST(X);
Run Code Online (Sandbox Code Playgroud)
如果DEBUG定义了函数,它将调用函数,如果不是,则不执行任何操作.