如果我使用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
,我也不会收到此警告。
这是一个铿锵的错误还是我做错了什么?
答案 0 :(得分:7)
extern "C"
并不意味着"将此代码编译为C"。它意味着使这个函数(或函数)可以从C代码中调用,这通常意味着更改名称修改,有时甚至是调用约定。
答案 1 :(得分:0)
错误可能与extern "C"
无关?它看起来像是,而不是,"注册与C"不兼容。而是"注册与C ++ 1z"不兼容。 (我假设C ++ 1x意味着C ++ 11/14/17。)