簡體   English   中英

在Android下刪除C ++代碼中的C樣式轉換

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

pushpop是存在的,因此您可以在#pragmas之前和之后維護診斷的狀態。

當然,您需要在包含標准標題的任何地方執行此操作。 如果你有很多地方包含它們,那么最好“重構”你的包含,這樣你的所有標題都包含一個標題,而標題包含帶有diagnostic包裝的標准標題。

是的,顯然C ++標頭可能包含C標頭。 並且該標准不禁止任何標題執行C風格的演員表。 不,我沒有嘗試過這個功能。 我個人在沒有編譯器的幫助下避免使用C-Style演員表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM