在宏中连接字符串 - C++

Posted

技术标签:

【中文标题】在宏中连接字符串 - C++【英文标题】:Concatenating strings in macros - C++ 【发布时间】:2010-12-16 21:10:28 【问题描述】:

连接宏中定义的字符串的最简单方法是什么。 即我正在寻找的伪代码如下:

#define ROOT_PATH "/home/david/"
#define INPUT_FILE_A ROOT_PATH+"data/inputA.bin"
#define INPUT_FILE_B ROOT_PATH+"data/inputB.bin"
...
#define INPUT_FILE_Z ROOT_PATH+"data/inputZ.bin"

我知道的唯一方法是在代码中使用 strcat,或者使用 string 类,然后使用 c_str 方法,但是当我有很多输入文件时它会变得混乱。我想直接使用 INPUT_FILE_A 等,没有很多局部变量。有什么好办法吗?

谢谢。

【问题讨论】:

【参考方案1】:

编译器会自动连接相邻的字符串:

#define ROOT_PATH "/home/david/"
#define INPUT_FILE_A ROOT_PATH "data/inputA.bin"

或更通用的:

#define INPUT_FILE_DETAIL(root,x) root #x
#define INPUT_FILE(x) INPUT_FILE_DETAIL(ROOT_PATH "data/", x)

【讨论】:

【参考方案2】:

Shell 正在“吃掉”引号。 因此,必须使用以下行:

-DROOT_PATH=\"some-string"\

【讨论】:

以上是关于在宏中连接字符串 - C++的主要内容,如果未能解决你的问题,请参考以下文章

在宏中调用函数

确保每个字符串文字都包含在宏中

MS Visual Studio 2010 C++ 预处理器 - 如果函数在宏中定义并在其他地方调用,未定义时是不是有任何开销

如何在宏中获取Scala-macro-annotated类或对象的扩展类路径?

C++学习(三二七)宏中#和##的作用

在宏内取消字符串化