从命令行覆盖宏

Sh4*_*4pe 10 c++ macros g++ c-preprocessor

我想从命令行覆盖一个宏.在我的源代码中,有一个这样的定义:

#define MY_FOO 1
Run Code Online (Sandbox Code Playgroud)

我想要的是在编译程序时设置此宏的值:

g++ -DMY_FOO=2 ...
Run Code Online (Sandbox Code Playgroud)

但是,宏源被源代码重新定义为旧值1.问题是我不拥有首先定义宏的源代码部分.如果它是我自己的代码,我可以简单地写

#ifndef MY_FOO
#define MY_FOO 1
#endif
Run Code Online (Sandbox Code Playgroud)

我的问题就不复存在了.那么是否可以使用g ++在命令行上指定一个宏,以便源代码无法重新定义它?

ugo*_*ren 10

你不能.

命令行在任何源文件和头文件之前处理.
如果源文件定义了宏,则之前不能定义它,并且从现在开始将获得新值.
改变它,唯一的办法就是#undef#define它再次,在稍后的点.如果您可以访问定义后包含的标题,那么您有机会.