Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++_Clang_Static Methods_Linkage - Fatal编程技术网

C++ 局部静态变量连杆机构

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

有人能解释为什么这两个代码段的编译行为不同(至少在OSX上):

通过但是

//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