このプログラムを考えてみましょう:
int func2(char x, char y)
{
return x+y;
}
int (*fp1)(char);
void main()
{
fp1 = func2; /* func2 has one more argument than fp1 */
}
最終課題は C90 に準拠していますか?
Keil C51 v9.06 は警告なしでプログラムを受け入れますが、gcc は次のように文句を言います。
警告: 互換性のないポインター型からの代入
これが Keil コンパイラのバグなのか、それとも実際に C90 に準拠した対処方法なのかを知りたいです。
更新: C99 に関するこの回答によると、対応するキャストは合法です。ただし、関数ポインターを呼び出すと、未定義の動作が発生します。これは、割り当ても合法であることを意味しますか?