c++ - 在 C++ 预处理器中为参数添加引号

标签 c++ c-preprocessor double-quotes

我想将包含文件的名称作为编译器参数传递,以便我可以修改大量配置参数。但是,我的 C++ 构建是通过一个类似于 makefile 的过程,该过程从传递给编译器和预处理器的参数中删除引号。我希望做一些相当于

#ifndef FILE_ARG
// defaults
#else
#include "FILE_ARG"
#endif

我的命令行包括 -DFILE_ARG=foo.h。这当然行不通,因为预处理器不翻译 FILE_ARG。

我试过了

#define QUOTE(x) #x
#include QUOTE(FILE_ARG)

由于同样的原因它不起作用。

出于脚本原因,我宁愿在命令行上执行此操作,也不愿在适当的例程中编辑包含行。有什么办法吗?

最佳答案

要添加引号,您需要这个技巧:

#define Q(x) #x
#define QUOTE(x) Q(x)

#ifdef FILE_ARG
#include QUOTE(FILE_ARG)
#endif

关于c++ - 在 C++ 预处理器中为参数添加引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671698/

相关文章:

c++ - 为什么从 C++ I/O 系统中删除了 iostream_withassign、ostream_withassign 和 istream_withassign 类?

c++11 - 在 LLVM/Clang 下编译时,命名空间 'unique_ptr' 中没有名为 'std' 的类型

c++ - 如何在 C++ 中将字符串传递给双引号

java - 如何强制 Hibernate-Envers 在字段名称周围使用引号?

c - 如何在 gstreamer 命令行的接收器定义的引号内转义引号

c++ - c++中使用getline()时如何判断是否是EOF?

c++ - 如何返回函数的参数数量?

c++ - 来自 STL 的 vector 与列表 - 删除方法

ios - 在 Swift 中访问 C 宏

C#error 指令和注释