2011-10-20 11 views
3

C++コードからselectを使用するプロジェクトに取り組んでいます。コードはFD_ZERO, FD_SET, FD_ISSETなどのマクロを使用します。残念ながら、これらのマクロは 'C'キャストを使用し、コードが-Wold-style-castでコンパイルされるとコンパイラの警告を生成します。これらのマクロのためだけに-Wold-style-castを無効にする最良の方法は何ですか?私は考えることができるsys/select.hマクロを使用した古いスタイルのキャスト警告

唯一のオプションは次のとおりです。

  1. 使用#pragma diagnosticは、インライン関数でマクロ呼び出しをラップし、機能の周りの警告を無効にするマクロ
  2. を使用して機能のための警告を無効にします。

誰かがより良いアプローチをしていますか?

+0

この問題のコンパイラ固有の解決策があります。それらに興味があれば、使用しているコンパイラを教えてください。 –

+0

これは、GCC 4.4.3 – mark

答えて

0

-Wallを使用してC++コードでselectマクロを使用し、警告を表示しませんが、-Wold-style-castは使用しません。 Cスタイルのキャストを使わないことがなぜ重要なのかを再考することが、より良いアプローチだと思います。私は、Cの標準ライブラリ関数とインターフェースするために、それは完全に適切だと思います。

C++ dynamic_castの方法は多型およびクラスに有用である。 const_castは、定数を削除する特別なケースです。 static_castおよびCの(type)キャストは非常に似ています。 static_cast<type>を使用してどのような利点が(type)以上のキャストを提供するのかはわかりませんが、C++スタイルになっています。 reinterpret_cast<type>はCの*(type*)&キャスト方法に比べてほとんど利点がありません。

一般に、鋳造の必要性は、ソフトウェアの設計にある弱点を暗示しますが、これはおそらくdynamic_castです。自分自身のコードでキャストを必要としないように努力することは賞賛されますが、これらの値を遡ってサードパーティのライブラリ、特に標準やOSに適用しようとすると価値がないと思います。

コードでCスタイルのキャストを使用したくない場合は、コンパイラ設定以外のポリシーを設定し、コードを確認して削除します。あなたが本当にコンパイラにこの作業をさせたいなら、制御できないソフトウェアの警告を無効にする必要があります。これは価値があるよりも多くの作業であり、場合によっては必要でもありません。たとえば、ダーウィンでは、FD_ISSETの実装にキャストはありません。結局のところ、Cスタイルのキャストよりもはるかに悪い習慣がコードから取り除かれています。

+0

を使ってコンパイルしたもので、Cのコードとのやりとりが意味をなさないというだけで、Cスタイルのキャストの使用を推奨しています。明らかに可能な限り避けたいと思っています。なぜあなたが不思議なら、SOは説明がいっぱいです。 – Arvid

関連する問題