clang ++是否忽略了extern“C”的某些弃用警告?

问题描述 投票:0回答:2

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

这是一个铿锵的错误还是我做错了什么?

c++ multilingual clang++ extern-c
2个回答
7
投票

extern "C"并不意味着“将此代码编译为C”。它意味着“使这个函数(或函数)可以从C代码中调用”,这通常意味着更改名称修改,有时甚至是调用约定。


0
投票

也许这个错误与extern "C"无关?它看起来好像不是说“寄存器与C不兼容”,而是“寄存器与C ++ 1z不兼容”。 (我假设C ++ 1x意味着C ++ 11/14/17。)

© www.soinside.com 2019 - 2024. All rights reserved.