我希望你能在命令行中覆盖一个宏。在我的源代码中,有这样一个定义:
#define MY_FOO 1
我希望在编译我的程序时设置这个宏的值:g++ -DMY_FOO=2 ...
但是,源代码将宏重新定义为其旧值1。问题在于我不拥有首次定义该宏的源代码部分。如果这是我的自己的代码,我可以简单地编写
#ifndef MY_FOO
#define MY_FOO 1
#endif
我的问题将会消失。那么,是否有办法使用g++在命令行上指定宏,使得源代码无法重新定义它?
我希望你能在命令行中覆盖一个宏。在我的源代码中,有这样一个定义:
#define MY_FOO 1
我希望在编译我的程序时设置这个宏的值:g++ -DMY_FOO=2 ...
但是,源代码将宏重新定义为其旧值1。问题在于我不拥有首次定义该宏的源代码部分。如果这是我的自己的代码,我可以简单地编写
#ifndef MY_FOO
#define MY_FOO 1
#endif
我的问题将会消失。那么,是否有办法使用g++在命令行上指定宏,使得源代码无法重新定义它?
你无法这么做。
命令行在任何源代码和头文件之前处理。如果一个源文件定义了一个宏,那么它就不能在之前被定义,并且将从现在开始获得新值。
唯一的改变它的方法是在稍后的时间内 #undef
和 #define
它。如果您可以访问在定义之后包含的头文件,则有机会更改它。
g++ -DMY_FOO=2 -DCONFIG_H
-include file
)。
#include
之后仅使用#undef
就可以了? - svk