2012-09-19 37 views
0

我需要一個字符串,它使用一個整數的宏值。但它不在任何函數中,所以我不想創建一個變量。我在#pragma評論中使用它。有沒有辦法在不分配變量的情況下將字符串連接到數字?

所以是這樣的:

#define num 7 
#pragma comment(lib, "string" + num) 

這將結合字符串和num使得它(的#pragma評論(LIB, 「string7」)

+0

這是之前回答的。 [1]:http://stackoverflow.com/questions/5256313/cc-macro-string-concatenation – Ram

+1

這沒有奏效,並且解決方案也沒有工作 – Bullsfan127

回答

4

你想要做什麼叫做字串

#define stringify_1(x...)  #x 
#define stringify(x...)  stringify_1(x) 

#define NUM 7 

char *p = stringify(NUM); 

這是通過在Linux內核中的幫手include/linux/stringify.h__stringify宏啓發

+0

他希望編譯指示變成'comment(lib,「string7」)' – oldrinb

+0

我刪除了'__'作爲Linux宏名稱的前綴,因爲以'__ *'開頭的名字被保留用於任何用途。 – ouah

+1

@oldring我無法訪問MSVC以檢查是否可以使用「註釋(lib,」字符串「stringify(NUM))」 – ouah

3

我不是意圖完全清楚,這聽起來像一些預處理能力: http://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification

從這個例子中,你會發現好像是你想要的這個簡短解釋。

#define xstr(s) str(s) 
#define str(s) #s 
#define foo 4 
str (foo) 
     ==> "foo" 
xstr (foo) 
     ==> xstr (4) 
     ==> str (4) 
     ==> "4" 

所以,你將能夠做這樣的事情:

#define xstr(s) str(s) 
#define str(s) #s 
#define num 7 
#pragma comment(lib, "string" xstr(num)) 

普通字符串合併規則應該讓所有的罰款,如果它是在實際的代碼,但我不知道,如果字符串自動合併在編譯指示中。這可能與實施有關。

相關問題