在 C++ 中是否有 define/run 特定条件下的宏?

Is there anyway to define/run a macro on specific condition in C++?

在 C++ 中是否有 define/run 特定条件下的宏?

我的应用程序在 运行 上使用一些参数,比如 ./test -l

如果 -l 作为参数提供,我想定义一个宏,所以我尝试了:

if  (strcmp(argv [2],"-l")==0)
        #define LOOPBACK

但这是错误的。我的应用程序总是定义 LOOPBACK!!

所有预处理器指令(例如:#include#define、...)都由在编译器之前运行的预处理器执行/评估。因此,您定义的宏是在不知道 if(...) 语句的情况下定义的。

预处理器宏执行文本替换,然后将预处理器的输出编译为代码。

这意味着,根据定义,宏只能在(严格来说,之前)编译时定义、重新定义、取消定义或展开。宏无法根据运行时数据进行不同的扩展。

这也意味着宏不遵守任何范围规则。

这就是您的 LOOPBACK 宏总是被定义的原因 - 扩展与 if 语句无关。