【发布时间】:2017-09-14 10:33:24
【问题描述】:
如果我使用 clang 3.8.1 编译:
extern "C" {
int foo(int x) { register int y = x; return y; }
}
int main() { return foo(123); }
我收到警告:
a.cpp:3:18: warning: 'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]
int foo(int x) { register int y = x; return y; }
^~~~~~~~~
... 我真的不应该得到这个,因为内部函数是 C 代码。如果我使用 GCC 6.3.1,即使使用 -Wall,我也不会收到此警告。
这是一个clang错误还是我做错了什么?
【问题讨论】:
-
那与C无关!
-
代码还是C++代码!
extern "C"只是指定 ABI 和命名约定。 (你甚至读过警告吗?) -
extern "C"仅对外部名称的链接有影响 - 它不会将编译器更改为“C 模式”。 -
要么修复它,要么用 C 编译这部分 - 以任何有意义的方式。
标签: c++ multilingual clang++ extern-c