回答編集履歴

2

あえてそのままは避ける

2017/08/05 08:57

投稿

maisumakun
maisumakun

スコア145184

test CHANGED
@@ -3,3 +3,7 @@
3
3
 
4
4
 
5
5
  > ある型の関数へのポインタを,別の型の関数へのポインタに型変換することができる。さらに再び型変換で元の型に戻すことができるが,その結果は元のポインタと比較して等しくなければならない。型変換されたポインタを関数呼出しに用い,関数の型がポインタが指すものの型と適合しない場合,その動作は未定義とする。
6
+
7
+
8
+
9
+ 「正しい関数型に戻すのは呼んだ側の責任」でいいのであれば、まだ`void *`を返したほうが、そのまま使えないだけ親切だと思います。

1

キャストまではOKでした

2017/08/05 08:56

投稿

maisumakun
maisumakun

スコア145184

test CHANGED
@@ -1,4 +1,4 @@
1
- C言語の世界では、「引数や返り値の違う関数」は**別の型**です。関数の引数や返り値は**呼び出す側**でのコード生成にも影響しますので、「シグネチャの違う関数ポインタにキャストす」ことは**未定義の動作**となります(≒やってはいけません)。
1
+ C言語の世界では、「引数や返り値の違う関数」は**別の型**です。関数の引数や返り値は**呼び出す側**でのコード生成にも影響しますので、「シグネチャの違う関数ポインタにキャストして、そのまま呼び出す」ことは**未定義の動作**となります(≒やってはいけません)。
2
2
 
3
3
 
4
4