2011-06-03 47 views
0

是否有任何連接方式#define宏在c + +(ms編譯器)?「定義」宏串聯和_TEXT

我有現有的代碼是這樣的:

#define LOG_FILENAME _TEXT("VendorBlaBlaDriver.log") 
#define REGISTRY_FILENAME _TEXT("VendorBlaBlaDriver") 
#define VENDOR_NAME _TEXT("VendorBlaBla") 

我要做到以下幾點:

#define NAME_PART1 "VenorBlaBla" 
#define NAME_PART2 "Driver" 

#define LOG_FILENAME _TEXT(NAME_PART1 NAME_PART2 ".log") 
#define REGISTRY_FILENAME _TEXT(NAME_PART1 NAME_PART2) 
#define VENDOR_NAME _TEXT(NAME_PART1) 

但是編譯器給我一個錯誤:

error C2308: concatenating mismatched strings 

有什麼辦法這樣做對嗎?問題是這是一個組件,我想在之後指定-D選項來編譯。我不想在源代碼中存儲NAME_PART1和NAME_PART2。

+0

[C預處理器和串聯]的可能重複(http://stackoverflow.com/questions/1489932/c-preprocessor-and-concatenation) – 2011-06-03 09:49:03

+0

不,沒有_TEXT宏有 – 2011-06-03 09:52:32

+0

您可以簡單地鍵入#define LOG_FILENAME NAME_PART1 NAME_PART2「.log」還是我錯過了什麼? – 0xbadf00d 2011-06-03 09:56:32

回答

3

不能應用_TEXT宏兩次。或多個字符串,但可以連接結果。即

#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log") 

但是,你真的不應該打擾。 _TEXT宏被用於世紀之交,當時還有非Unicode平臺。今天我們只寫#define NAME_PART1 L"VenorBlaBla";沒有人再銷售Windows 95軟件。

1

這是因爲_TEXT正被施加到NAME_PART1而已,而不是其他的部分,這應該被寫爲:

#define NAME_PART1 "VenorBlaBla" 
#define NAME_PART2 "Driver" 

#define LOG_FILENAME  _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log") 
#define REGISTRY_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) 
#define VENDOR_NAME  _TEXT(NAME_PART1) 

的失配_TEXT是定義一個寬的字符串,其中與其它字符串仍然是正常字符串。

1

這是不是工作(沒有一個編譯器,隨手又嘗試一下):

#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log") 

,然後讓編譯器串聯兩個字符串。