在 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
语句无关。
在 C++ 中是否有 define/run 特定条件下的宏?
我的应用程序在 运行 上使用一些参数,比如 ./test -l
如果 -l 作为参数提供,我想定义一个宏,所以我尝试了:
if (strcmp(argv [2],"-l")==0)
#define LOOPBACK
但这是错误的。我的应用程序总是定义 LOOPBACK
!!
所有预处理器指令(例如:#include
、#define
、...)都由在编译器之前运行的预处理器执行/评估。因此,您定义的宏是在不知道 if(...)
语句的情况下定义的。
预处理器宏执行文本替换,然后将预处理器的输出编译为代码。
这意味着,根据定义,宏只能在(严格来说,之前)编译时定义、重新定义、取消定义或展开。宏无法根据运行时数据进行不同的扩展。
这也意味着宏不遵守任何范围规则。
这就是您的 LOOPBACK 宏总是被定义的原因 - 扩展与 if
语句无关。