C言語の基本的な質問ですが、関数へのポインタの宣言
関数へのポインタの質問です。
下のように、関数へのポインタを使ったプログラムを書きました。
(関数へのポインタを理解するためのものなので、実用的な意味はありません。(*^_^*)
また、このプログラムはコンパイルもリンクも実行も問題なく出来ます。)
#include <stdio.h>
int add_func(int,int);
(*func_p0) (int,int);
int main(void)
{
int (*func_p1) (int,int);
int (*func_p2) ( );
int hoge0,hoge1,hoge2;
func_p0=add_func;
hoge0=func_p0(3,5);
printf("0 : 3+5は%d\n",hoge0);
func_p1=add_func;
hoge1=func_p1(3,5);
printf("1 : 3+5は%d\n",hoge1);
func_p2=add_func;
hoge2=func_p2(3,5);
printf("2 : 3+5は%d\n",hoge2);
return(0);
}
int add_func(int x, int y)
{
return(x+y);
}
func_p0のように戻り値の型を書かない場合と、func_p1やfunc_p2のように戻り値の型を書くのとでは何が違うのでしょうか。
func_p0は外部変数ですが、自動変数にする(main関数の中で同様に宣言。)とコンパイルエラーになります。
それはなぜですか。
func_p1のように引数の型が書いてあるのと、func_p2のように引数の型が書いていないのでは何が違うのでしょうか。
int (*func_p2) ( );というのは、int (*func_p2) (void);とは違うんですよね?
補足
ありがとうございます。 正確には。。funcの定義がなかったです。。 エラーメッセージのまんまです。 えーもうオレはだめです。 へろへろへろ