如果我使用铛3.8.1编译:是铿锵++忽略外部“C”的一些弃用警告?
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
,我也不会收到此警告。
这是一个叮咚的bug还是我做错了什么?
这与C无关! – Olaf
该代码仍然是C++代码! 'extern“C”'只是指定了ABI和命名约定。 (你甚至读过警告吗?) – Olaf
'extern“C”'只影响外部名称的链接 - 它不会将编译器更改为'C-mode'。 –