这段代码正确吗?

extern "C" extern int x;       // 1
extern extern "C" int y;       // 2
extern "C" extern "C" int z;   // 3

int main() { }

gcc 拒绝 1 和 2 作为语法错误并接受 3。clang 接受所有三个,但给出了关于它们的重复声明说明符警告。

也许相关的是 C++17 [dcl.stc]/5:

最佳答案

extern extern "C" 不是有效的语法,因为 extern "C" 不是说明符,因此不能出现在 decl-specifier-seq 中。相反 extern "C" 只能作为链接规范的一部分出现,其语法是



因此,extern "C" 必须首先出现。

此外,根据 [dcl.link]/7,extern "C" extern 也无效:



( extern 是存储类说明符。)

不过,似乎没有任何规则禁止 extern "C" extern "C"

关于c++ - 是否允许 extern extern "C"和 extern "C"extern?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57518041/

10-13 09:09