在C++中,是否存在在特定条件下定义/运行宏的问题

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

本文关键字:运行 问题 下定义 特定条件 C++ 是否 存在      更新时间:2023-10-16

在C++中是否有定义/运行特定条件下的宏?

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

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

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

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

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

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

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

这就是为什么总是定义LOOPBACK宏——扩展与if语句无关。

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