一部のCコードをTI DSPチップ環境に移植しています。私はCコンパイラに取り組んでいます。ポインタと関数ポインタ間の型キャスト時の警告
私は、関数へのポインタを含むデータ構造を持っています。私はデータ構造を初期化する関数を持っています。 Visual StudioとGCCの下では、この種のコードは苦情なしでコンパイルされます。実際には、pfn
引数がタイプvoid *
なので、実際にキャストする必要はありません。それは単に黙示的に苦情なしに出演するだけです。 TI DSPチップ用のCode Composer Studioの
、私は「警告:無効な型変換」を取得
私のポリシーは警告なしに私のコードのコンパイルをすることですので、私はこの問題を解決したいが。私はあらゆる種類のキャストを試みました。 ポインタをint
にキャストしてから、正しい型にキャストすると、コンパイラが完全に満足していることがわかりました。うん、うん!
コンパイラを使用せずにこのキャストを行うにはどうすればよいですか?コンパイラをシャットダウンするには、実際にint
にキャストする必要がありますか?
注:私は、具体的は「代わりにvoid *
のPFN_FOO
を受け入れるようにinit_struct()
を変更」の効果の解決策を探していませんています。この単純化されたコードスニペットでは動作しますが、実際のコードでは動作しません。実際のコードではおそらく異種のもののリストが作成されます。
正しいタイプの契約があり、pfnタイプPFN_FOOにするのは簡単ではないでしょうか?別のポイント - あなたは明示的な型をinit_struct()に与えるべきです。 VC++ 2008でCコンパイルを使用しても警告なしでコンパイルされません。 – Clifford
@Clifford、私の実際のコードは常に関数に明示的な型を持っています。私は警告なしでコンパイルするために自分のコードを書いています。私は型に注意しています。私が解決しようとしている問題は、異種のものを持つことができるデータ構造を初期化する関数を作成することであり、内部に格納されているデータ型ごとにinit関数が1つではありません。 – steveha