什么用例需要#define而没有令牌字符串?

nem*_*ixx 6 c c++ c-preprocessor

#define在学习C之前遇到过预处理器指令,然后在我读过的一些代码中遇到过它.但除了使用它来定义常量的替换和定义宏之外,我还没有真正解决使用它而没有"body"或token-string的特殊情况.

以这一行为例:

#define OCSTR(X)
Run Code Online (Sandbox Code Playgroud)

就这样!什么可以使用这个或更好,什么时候使用#define必要的?

Jam*_*nze 7

这用于两种情况.第一个也是最常见的是条件编译:

#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定义了函数,它将调用函数,如果不是,则不执行任何操作.