这段代码正确吗?
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
符不能用于类成员或函数参数的声明。对于使用extern
说明符声明的名称的链接,请参见 6.5。[注意:extern
关键字也可以用在显式实例化和链接规范中,但在这种情况下它不是存储类说明符。——尾注]