2011-11-15 48 views
1

我有一些地方後來者都PARLY由早期的是否可以使用#字符串與定義的常量?

const char* ID  = "01099BB2"; 
const char* FS_LOCATION_ROOT = "fs:/~0x"; 

我要創建的級聯,並使用#如下試圖常量字符串常量,但得到的編譯錯誤:

const char* FS_LOCATION = FS_LOCATION_ROOT#ID; 

有沒有這種方式來組合字符串?

+0

字符串化是一種預處理器功能。在實際的語言C本身中沒有這樣的東西。如果這些是真正的常量,你可以使用預處理器宏和#define ... –

回答

4

這取決於你想要對這些字符串做什麼。串化器操作數#是預處理器的一部分,因此必須出現在宏定義中。它看起來不像它會幫助你滿足你的特殊情況。但是,您可以簡單地使用secuential字符串文字串聯的事實。

"fs:/~0x" "01099BB2" is turned into "fs:/~0x01099BB2" 

但是,您不能在變量中使用它,只能使用文字。你可以做這樣的事情:

#define ID "01099BB2" 
#define FS_LOCATION_ROOT "fs:/~0x" 

#define FS_LOCATION FS_LOCATION_ROOT ID 

或更好,但

const char* FS_LOCATION = FS_LOCATION_ROOT ID 

不過,我倒覺得這兩次定義一個名爲ID宏之前。

+0

謝謝,我沒有意識到他們可以像這樣連接起來。名稱ID是一個截斷版本,用於在這裏發佈而不是真實姓名。 – Gruntcakes

1

不一旦它們被定義爲符號。我想,你可以同時產生兩者。

#define stupid_macro(ID,ROOT) \ 
    const char *id = #ID ; \ 
    const char *root = #ROOT ; \ 
    const char *both = #ID #ROOT ; 

我並沒有完全測試,以驗證stringize東西的作品,但它應該這樣結束了。

const char *id = "id_val" ; 
const char *root = "root_val" ; 
const char *both = "id_val" "root_val" ; 

最後一個將連接它們。這當然是合法的,但我不能說它的道德。

相關問題