clang++ 是否忽略了某些弃用警告的外部"C"?

Is clang++ ignoring extern "C" for some deprecation warnings?

本文关键字:警告 外部 是否 clang++      更新时间:2023-10-16

如果我使用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,我也不会收到此警告。

这是一个叮当虫还是我做错了什么?

extern "C"并不意味着"将此代码编译为c"。它的意思是"从c代码中制作此功能(或函数(可召唤",这通常意味着更改名称杂交,有时是调用惯例。

也许错误与extern "C"无关?看起来它说的不是,"寄存器与C不兼容",而是"注册与C 1Z不相容"。(我假设C 1X表示C 11/14/17。(