teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

footnote

2019/03/12 01:57

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  - {#1}: 参照はがし `(* {#2})`
5
5
  - {#2}: 型キャスト `({#3}) hoge`
6
6
 
7
- {#3}部は関数ポインタ型`void(*)()`、つまり「“引数をとらずvoid型を返す関数”へのポインタ型」です。(※注1)
7
+ {#3}部は関数ポインタ型`void(*)()`、つまり「“引数をとらずvoid型を返す関数”へのポインタ型」です。※注1
8
8
 
9
9
  少しだけわかりやすく書き直すと、次コードのようになります。
10
10
 
@@ -13,7 +13,7 @@
13
13
  (* (FuncType) hoge)();
14
14
  ```
15
15
 
16
- 関数ポインタ型に対する参照はがし(`*`)は明示不要ですから、下記のようにも書けます。
16
+ 関数ポインタ型に対する参照はがし(`*`)は明示不要ですから、下記のようにも書けます。※注2
17
17
 
18
18
  ```c
19
19
  typedef void (*FuncType)();
@@ -21,4 +21,6 @@
21
21
  ```
22
22
 
23
23
  ----
24
- ※注1: C言語仕様に厳格に従うと、`void(*)(void)`表記がより望ましいです。`void(*)()`は任意個の実引数を取りうる関数ポインタ型です。この回答では本質でないため、簡単に「引数なし」と説明しています。
24
+ ※注1: C言語仕様に厳格に従うと、`void(*)(void)`表記がより望ましいです。`void(*)()`は任意個の実引数を取りうる関数ポインタ型です。この回答では本質でないため、簡単に「引数なし」と説明しています。
25
+
26
+ ※注2: C言語仕様に厳格に従うと、関数呼び出しは **常に** 関数ポインタ型を経由します。つまり、普通の関数呼び出しにおいて「関数名から関数ポインタ型への変換」が暗黙に行われています。プログラマがこの型変換を意識することはないでしょう。

1

footnote

2019/03/12 01:57

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  - {#1}: 参照はがし `(* {#2})`
5
5
  - {#2}: 型キャスト `({#3}) hoge`
6
6
 
7
- {#3}部は関数ポインタ型`void(*)()`、つまり「“引数をとらずvoid型を返す関数”へのポインタ型」です。
7
+ {#3}部は関数ポインタ型`void(*)()`、つまり「“引数をとらずvoid型を返す関数”へのポインタ型」です。(※注1)
8
8
 
9
9
  少しだけわかりやすく書き直すと、次コードのようになります。
10
10
 
@@ -18,4 +18,7 @@
18
18
  ```c
19
19
  typedef void (*FuncType)();
20
20
  ((FuncType) hoge)();
21
- ```
21
+ ```
22
+
23
+ ----
24
+ ※注1: C言語仕様に厳格に従うと、`void(*)(void)`表記がより望ましいです。`void(*)()`は任意個の実引数を取りうる関数ポインタ型です。この回答では本質的でないため、簡単に「引数なし」と説明しています。