无论如何在C ++中定义/运行特定条件的宏?
我的应用程序在运行时需要一些参数,比如./test -l
如果-l作为参数提供,我想定义一个宏,所以我尝试了:
if (strcmp(argv [2],"-l")==0)
#define LOOPBACK
但这是错的。我的应用程序始终定义LOOPBACK
!!
答案 0 :(得分:2)
预处理器宏执行文本替换,然后将预处理器的输出编译为代码。
这意味着,根据定义,只能在(严格地说,在编译之前)编译时定义,重新定义,未定义或扩展宏。宏不能基于运行时数据进行不同的扩展。
这也意味着宏不会遵守任何范围规则。
这就是为什么总是定义LOOPBACK宏 - 扩展与if
语句无关。
答案 1 :(得分:1)
所有预处理程序指令(例如:#include
,#define
,...)由预处理程序执行/评估,预处理程序在编译器之前运行。因此,您定义的宏是在不知道if(...)
语句的情况下定义的。