从命令行替代宏
Override macro from the command line
本文关键字:命令行 更新时间:2023-10-16
我想从命令行重写一个宏。在我的资料来源中,有这样一个定义:
#define MY_FOO 1
我想在编译程序时设置这个宏的值:
g++ -DMY_FOO=2 ...
但是,宏会被源代码重新定义为原来的值1。问题是,我不拥有最初定义宏的源代码部分。如果是我自己的代码,我可以简单地编写
#ifndef MY_FOO
#define MY_FOO 1
#endif
我的问题就会消失。那么,有没有办法在命令行上使用g++指定宏,这样源代码就不能重新定义它?
你不能。
命令行在任何源文件和头文件之前进行处理
如果源文件定义了宏,则在此之前不得对其进行定义,并将从现在起获取新值。
更改它的唯一方法是稍后再次将其更改为#undef
和#define
。如果您有权访问定义后包含的标头,那么您就有机会访问。
如果您试图从命令行创建可配置的内容,并且您可以更改源代码,那么只有在尚未定义宏的情况下,才可以使用#ifndef来定义宏。因此,当你定义宏时,代码会看到它而不会覆盖它,但如果你不定义它,它将有一个默认值。
如果文件config.h阻止了多个包含(通过#ifndef config_h等),那么您可能会滥用它:
g++ -DMY_FOO=2 -DCONFIG_H
注意:如果config.h文件包含您需要的任何其他内容,那么您也必须自己重新定义。您可以将该文件复制为my_config.h并将其包含在内。(另请参阅-include file
预处理器选项)。
相关文章:
- 从命令行c++发送文本文件名
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 数组长度,为什么从命令行获取时不能使用它?
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 通过 Openssl 命令行加密,通过 c++ 解密
- CMake "--target install"无需"--build"命令行
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 使用 C++ 将命令行参数拆分为参数/向量
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 如何在OMNET++中添加专门的命令行参数?
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 在命令行中创建快捷命令
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- C++命令行提示符不应重复
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 通过命令行在Visual Studio中编译单个独立文件