【发布时间】:2019-12-22 09:20:17
【问题描述】:
这段代码正确吗?
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关键字也可以用在 explicit-instantiations 和 linkage-specifications 中,但 它不是 storage-类说明符 在这种情况下。 — 尾注]
【问题讨论】:
-
你为什么觉得你想写这样的代码?
-
@LightnessRacesinOrbit 这有什么关系?
-
*叹气* 好吧,没关系。
-
这是我确信我即将学习一些值得学习的东西的问题之一,但我不太确定是什么。我能找到与之相关的唯一注意事项是,在将非系统标头
#include包装到extern "C"之前,您应该验证标头尚未包含链接规范——这意味着执行两次是不需要的。 -
你看过this的视频吗?
标签: c++ language-lawyer extern extern-c