一部のCコードをTIDSPチップ環境に移植しています。私はCコンパイラに取り組んでいます。
関数へのポインタを含むデータ構造があります。データ構造を初期化する関数があります。このようなもの:
typedef void (*PFN_FOO)(int x, int y);
struct my_struct
{
PFN_FOO pfn;
};
init_struct(struct my_struct *p, void *pfn)
{
p->pfn = (PFN_FOO)pfn;
}
Visual StudioとGCCでは、この種のコードは文句なしにコンパイルされます。実際、pfn
引数は型であるためvoid *
、キャストを配置する必要はありません。それは文句なしに暗黙のうちにキャストするだけです。
TIDSPチップ用のCodeComposerStudioで、「警告:無効な型変換」が表示されます。
私のポリシーは、警告なしにコードをコンパイルすることなので、これを修正したいと思います。いろいろなキャスティングを試しました。void *
ポインタをint
最初にキャストしてから正しいタイプにキャストすれば、コンパイラは完全に満足していることがわかりました。うわぁ、うん!
コンパイラが文句を言わずにこのキャストを行うにはどうすればよいですか?int
コンパイラをシャットダウンするために本当にキャストする必要がありますか?
注:私は特に、「の代わりに受け入れるように変更する」という効果の解決策を探していません。これは、この単純化されたコードスニペットでは機能しますが、異種のもののリストを作成する実際のコードでは機能しません。init_struct()
PFN_FOO
void *