数値定数を文字列に変換する必要があります。ただし、構文がマクロパラメータに対してのみ有効なので、#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;
}
あなたはマグナスHoff氏が指摘したように、あなたは文字列化を呼び出すことができますhttp://ideone.com/cR1KZP
EDIT
でアクションで上記を見ることができます
#define VER_STR STR STRINGIFY(BM) STRINGIFY(NUM_OF_THREADS)
'#BM'は' 'BM ''を与えません。コンパイルエラーです。 '# 'は、関数型マクロのパラメータでのみ使用できます。 – Angew
@Angew、fixed。私はそれを書いている間、不完全な解決策を念頭に置いていました。 – StoryTeller
完全性のために: '#_def VER_STR STRINGIFY(BM)STRINGIFY(BM)STRINGIFY(NUM_OF_THREADS)'を持つ中間 'S _...' -macrosなしでも動作します:http://ideone.com/hbBQIp –