C/C++プリプロセッサにおいて、一意な識別子名生成に利用できる__COUNTER__マクロについて。非標準機能だが主要コンパイラで一通りサポートされている。 #define CAT_IMPL(s1, s2) s1##s2 #define CAT(s1, s2) CAT_IMPL(s1, s2) #ifdef __COUNTER__ #define GEN_ID(str) CAT(str, __COUNTER__) #else #define GEN_ID(str) CAT(str, __LINE__) #endif // 識別子生成: 変数"foo1"などが生成される auto GEN_ID(foo) = /*...*/; Visual C++ Visual Studio .NET 2003(MSVC7.1)以降で利用可能。 Expands to an integer starting