Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将宏扩展用作标识符的一部分_C++ - Fatal编程技术网

C++ 将宏扩展用作标识符的一部分

C++ 将宏扩展用作标识符的一部分,c++,C++,考虑以下代码: struct S {}; #define CREATE_INSTANCE S instance_##__LINE__ int main() { CREATE_INSTANCE; CREATE_INSTANCE; return 0; } 我想要它做的是创建两个名为instance_7和instance_8的S实例。它实际做的是创建实例\uuuuuuuuuuuuuuuuuuuuuuuuuuuu两次 如何实现我想要的?使用一些间接方法: #define C

考虑以下代码:

struct S {};

#define CREATE_INSTANCE S instance_##__LINE__

int main()
{
    CREATE_INSTANCE;
    CREATE_INSTANCE;
    return 0;
}
我想要它做的是创建两个名为
instance_7
instance_8
S
实例。它实际做的是创建
实例\uuuuuuuuuuuuuuuuuuuuuuuuuuuu
两次


如何实现我想要的?

使用一些间接方法:

#define Concat_(a, b) a ## b
#define Concat(a, b) Concat_(a, b)
#define CREATE_INSTANCE S Concat(instance_, __LINE__)

有趣!你是说宏是在其他宏的参数的上下文中扩展的,而不是在我在这里使用它的上下文中?@VioletGiraffe记住cpp实际上是一个过程。我仍然不明白为什么需要双间接寻址…@user0042:但是宏不应该在其他宏的扩展中扩展吗?@Violet不,没有宏,这些问题实际上是无法解决的。