clang++ 是否忽略了某些弃用警告的外部"C"?
Is clang++ ignoring extern "C" for some deprecation warnings?
如果我使用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。(
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 在函数内部的声明中初始化数组,并在外部使用它
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 如何忽略来自 Bazel 中的外部C++依赖项标头的警告
- clang++ 是否忽略了某些弃用警告的外部"C"?
- 如何在外部库中隐藏汇编中的警告
- C++编译器标志忽略外部库的警告,但不包括目录
- 当外部变量在其他文件中声明不同时,如何使G 产生警告
- 如何在 CMake 中为本机代码和外部代码设置不同的编译器警告级别
- 使用指向函数的指针的外部引用时的链接器警告
- VS2013:如何禁用项目外部包含的头文件的警告