[英]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.