[英]Removing C-style casts in C++ code under Android
我在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));
}
文件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
push
和pop
是存在的,因此您可以在#pragmas
之前和之后维护诊断的状态。
当然,您需要在包含标准标题的任何地方执行此操作。 如果你有很多地方包含它们,那么最好“重构”你的包含,这样你的所有标题都包含一个标题,而标题包含带有diagnostic
包装的标准标题。
是的,显然C ++标头可能包含C标头。 并且该标准不禁止任何标题执行C风格的演员表。 不,我没有尝试过这个功能。 我个人在没有编译器的帮助下避免使用C-Style演员表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.