Rav*_*avi 4 c c++ android casting android-ndk
我在SO上看过这篇文章:有没有办法在c ++中禁用旧的C样式演员,并且很高兴能够应用-Wold-style-cast到我的Android C++代码中.我很快遇到了以下演员阵容stdio.h:
static __inline int __sputc(int _c, FILE *_p) {
if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
return (*_p->_p++ = _c);
else
return (__swbuf(_c, _p));
}
Run Code Online (Sandbox Code Playgroud)
该文件stdio.h是通过一系列其他包括从中开始的ostream.C++库头文件是否应包含进行C样式转换的C头文件?有没有人尝试在Android NDK下禁用C样式演员?
是的,对于包含C头的C++标准库头,它是完全有效的.
如果您想解决这个问题(不修改标准库代码),可以在包含标题之前禁用警告,然后使用GCC Diagnostic Pragmas重新启用它们.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wold-style-cast"
#include <iostream>
#include <vector>
// etc.
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
该push和pop在那里,这样就可以前后保持诊断的状态#pragmas.
当然,您需要在包含标准标题的任何地方执行此操作.如果你有很多地方包含它们,那么最好"重构"你的包含,这样你的所有标题都包含一个标题,而标题包含diagnostic包装的标准标题.