无论如何在C ++中定义/运行特定条件的宏?

时间:2015-02-21 11:17:43

标签: c++ macros

无论如何在C ++中定义/运行特定条件的宏?

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

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

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

但这是错的。我的应用程序始终定义LOOPBACK !!

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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