2011-12-24 3 views
3

私は奇妙な問題に直面しています。私はstackoverflow.comとかどこかで調べてみましたが、答えが見つかりませんでした。llvm-g ++ - 4.2とC++の新しいスタイルの型キャスト

ここにいくつかの背景があります:私は簡単なライブラリを書いています。主に教育目的のために、そしてC++をより良く理解するためです。私はSnow LeopardでMacBook Proを使用しています。私はXcode 4.2もインストールしていますが、VIMだけを使ってコードを編集しています。私は最近、私がこれまでに持っているもののためにGNUビルドシステムを実装することをやめました。私はもうXcodeに依存する必要はなく、カスタムMakefileを作成して管理する必要はありません。私は最高レベルの警告を使用しています。ここには私が今までに持っていたフラグがあります(しかし、私は、各フラグの理由を理解しながら徐々に追加し続けています):-Wall -Wmissing-field-initializers -Wno-trigraphs -Wreturn-type -Wnon-virtual-dtor -Woverloaded-virtual -Wmissing-braces -Wparentheses -Wswitch -Wunused-value -Wsign-compare -Waddress -Wsequence-point -Wshorten-64-to-32 -Wwrite-strings -Wold-style-cast、最後に-Werrorです。

wint_t weof() { 
    return static_cast<wint_t>(WEOF); 
} 

私はこのコードをコンパイルするときしかし、私は警告「古いスタイルのキャストの使用」を取得:

は今、私は非常に単純に値を返す機能を持っています。私はstatic_cast<>が "古いスタイル"になる方法を理解していません。誰が私になぜこれが起こっているのか説明することができますか?私はWEOFの定義を見て答えを見つけるだろうと思ったが、Macではそれは__DARWIN_WEOFに定義されていて、その定義を見つけることはできないようだ。

ありがとうございます!

答えて

2

ほとんどの場合、__DARWIN_WEOFマクロ自体が古いスタイルのキャストを使用しています(ウェブ検索を行うと、値はおそらく((__darwin_wint_t)-1)と思われます)。 C互換のヘッダーを使用している場合、-Wold-style-castを完全に有効にすることはできません。

この警告を無効にするには、問題のコードを適切な#pragmaで囲むようにしてください。

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wold-style-cast" 
// ... code goes here ... 
#pragma GCC diagnostic pop 

しかし、これはおそらく、しばらく後に冗長/かなり面倒でしょう...

関連する問題