3

私は奇妙な問題に直面しています。stackoverflow.com などをあちこち調べましたが、答えが見つかりませんでした。

ここにいくつかの背景があります: 私は単純なライブラリを書いています。主に教育目的で、C++ をよりよく理解するためです。Snow Leopard 搭載の MacBook Pro を使用しています。Xcode 4.2 もインストールしていますが、VIM のみを使用してコードを編集しています。Xcode に依存する必要がなくなり、同時にカスタムの Makefile を作成して維持する必要がなくなるように、これまでに持っていたものすべてに GNU ビルド システムの実装を最近完了しました。最高レベルの警告を使用しています。これまでに取得したフラグは次のとおりです (ただし、各フラグの理由を理解しながら、段階的に追加し続けています): -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おり、その定義を見つけることができないようです。

ありがとう!

4

1 に答える 1

2

__DARWIN_WEOFマクロ自体が古いスタイルのキャストを使用している可能性が最も高いです (いくつかの Web 検索を行うと、値はおそらく のようです((__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

しかし、これはおそらくしばらくするとかなり面倒/冗長になります...

于 2011-12-24T18:42:28.890 に答える