C++ 局部静态变量连杆机构
有人能解释为什么这两个代码段的编译行为不同(至少在OSX上): 通过但是C++ 局部静态变量连杆机构,c++,clang,static-methods,linkage,C++,Clang,Static Methods,Linkage,有人能解释为什么这两个代码段的编译行为不同(至少在OSX上): 通过但是 //struct A //{ /*static*/ int func() { static int value __attribute__((weak)); return value++; } //} 失败并出现错误: 1.cpp:6:35: error: weak declaration cannot have internal linka
//struct A
//{
/*static*/ int func()
{
static int value __attribute__((weak));
return value++;
}
//}
失败并出现错误:
1.cpp:6:35: error: weak declaration cannot have internal linkage
static int value __attribute__((weak));
编译命令行:
clang++ 1.cpp -shared
通常,在C++中,在块范围声明的名称没有链接。对于供应商扩展,您需要查阅供应商的文档。如果我将此代码静态链接到共享库,而二进制代码也链接到同一个共享库,该怎么办?在这种情况下,静态int值会发生什么情况?关于符号何时可以进行内部和外部链接,有几个规则。在第一种情况下,值本质上是隐藏在静态成员函数中的全局变量,该函数默认为外部链接。然而,当进入常规功能时,内部联动装置将失效。尝试将extern添加到值声明中,看看它是否解决了链接错误
clang++ 1.cpp -shared