将预处理程序指令放在字符串文字中?

时间:2013-02-06 03:32:21

标签: c gcc c-preprocessor

我正在尝试使用#define来定义字符串文字(在这种情况下是文件路径),但是我无法从另一个#define'd元素获取路径。简而言之,我想要这样的事情:

#define X /var/stuff
#define Y "X/stuff.txt"

Y作为"/var/stuff/stuff.txt"给我。这甚至可能吗?先谢谢。

编辑:或者,像这样的东西将这两个文字连成一个吗?

#define X "/var/stuff"
#define Y X"/stuff.txt"

1 个答案:

答案 0 :(得分:3)

不是你的方式,不 - 在字符串文字中不会发生宏替换。

但是,您可以将片段中的字符串粘贴在一起:

#define str(x) #x
#define expand(x) str(x)

#define X /var/stuff
#define Y expand(X) "/stuff.txt"

快速演示代码:

#include <iostream>

int main(){
    std::cout << Y;
}