在Android下删除C ++代码中的C样式转换

时间:2011-06-25 14:53:44

标签: c++ android c casting android-ndk

我在SO:Is there a way of disabling the old c style casts in 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样式转换?

2 个答案:

答案 0 :(得分:7)

是的,对于包含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

pushpop就在那里,以便您可以在#pragmas之前和之后维护诊断的状态。

当然,您需要在包含标准标头的任何地方执行此操作。如果你有很多地方包含它们,那么最好“重构”你的包含,这样你的所有标题都包含一个标题,而标题包含diagnostic包装的标准标题。

答案 1 :(得分:2)

是的,显然C ++标头可能包含C标头。并且该标准不禁止任何标题执行C风格的演员表。不,我没有尝试过这个功能。我个人在没有编译器的帮助下避免使用C-Style演员表。