2013-02-06 83 views
0

我想使用#define定義一個字符串文字(在這種情況下是一個文件路徑),但我無法從另一個#defined'd元素獲取路徑。總之,我想是這樣的:在字符串文字中放置預處理器指令?

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

給我Y"/var/stuff/stuff.txt"。這甚至有可能做到嗎?事先感謝。

編輯:或者,將這樣的兩個文字串聯成一個?

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

回答

2

不是你擁有它的方式,沒有 - 宏替換不會發生在字符串文字內部。

你可以,但是,一個字符串從片粘貼在一起:

#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; 
} 
+0

那麼有沒有辦法讓一個字符串出兩個宏則? – SuperTron

+0

@SuperTron是的,但它的醜陋,並涉及一些多級預處理器voodoo –

+1

@SuperTron:請參閱編輯的答案。 –