回答編集履歴
2
footnote
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
|
|
@@ -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
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(*)()`は任意個の実引数を取りうる関数ポインタ型です。この回答では本質的でないため、簡単に「引数なし」と説明しています。
|