这段代码正确吗?
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/