您需要將數字常量轉換爲字符串。但是,#BM
是錯誤的,因爲語法只對宏參數有效。 所以你需要通過一箇中間宏強制擴展。而且你可能也有一個字符串化宏來做到這一點:
#include <iostream>
#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)
#define STR "SOME_STRING"
#define BM 8
#define S_BM STRINGIFY(BM)
#define NUM_OF_THREADS 8
#define S_NUM_OF_THREADS STRINGIFY(NUM_OF_THREADS)
#define VER_STR STR S_BM S_NUM_OF_THREADS
int main() {
// your code goes here
std::cout << VER_STR;
return 0;
}
你可以看到在上述行動在http://ideone.com/cR1KZP
編輯
由於馬格努斯·霍夫指出的那樣,你可以調用字符串化直接也是如此:
#define VER_STR STR STRINGIFY(BM) STRINGIFY(NUM_OF_THREADS)
'#BM'不給''BM「,它給出了一個編譯錯誤。 '#'只能用於函數式宏的參數。 – Angew
@Angew,固定。寫作時我腦子裏有一個不完整的解決方案。 – StoryTeller
爲了完整性:它也可以沒有中間單曲_...'-macros,與'的#define VER_STR STR字符串化(BM)字符串化(NUM_OF_THREADS)':http://ideone.com/hbBQIp –