その場で一意の変数名を作成したいと思います。
これは私のコードです:
int call(int i)
{
return i;
}
#define XCAT3(a, b, c) a ## b ## c
#define CALL_2(arg, place, line) int XCAT3(cl, place, line) = call(arg);
#define CALL_1(arg) CALL_2(arg, __FUNCTION__, __LINE__)
int main(int argc, char* argv[])
{
CALL_1(1); /* this is line 20 */
return 0;
}
これはGCC(http://ideone.com/p4BKQ)では機能しますが、残念ながらVisualStudio2010または2012では機能しません。
エラーメッセージは次のとおりです。
test.cpp(20):エラーC2143:構文エラー:';'がありません 'function_string'の前
test.cpp(20):エラーC2143:構文エラー:';'がありません 「一定」の前
test.cpp(20):エラーC2106:'=':左のオペランドはl値でなければなりません
C ++でオンザフライの一意の変数名を作成するにはどうすればよいですか?
解決:
#define CAT2(a,b) a##b
#define CAT(a,b) CAT2(a,b)
#define UNIQUE_ID CAT(_uid_,__COUNTER__)
int main(int argc, char* argv[])
{
int UNIQUE_ID = 1;
int UNIQUE_ID = 2;
return 0;
}