※ ChatGPTを利用し、要約された質問です(原文:複雑な関数宣言の使い方)
C言語の関数プロトタイプを使って複雑な関数宣言を行う方法
このQ&Aのポイント
C言語で関数プロトタイプを使って複雑な関数宣言を行う方法を教えてください。
上記のCのコードで、関数プロトタイプにあるint (*i(AdPoint))(int, int); を使ってエラーが発生してしまいます。
コンパイルエラーの原因が分かりません。どなたか教えていただけないでしょうか。
#include <stdio.h>
typedef int (*AdPoint)(int, int);
int add(int x, int y)
{
int z = x + y;
return z;
}
AdPoint test(AdPoint ap)
{
return ap;
}
int (*i(AdPoint))(int, int);
int main()
{
int sum;
AdPoint p = add;
AdPoint pp = test(p);
sum = (*i(pp))(1, 2);
//sum = pp(1, 2);
printf("%d\n", sum);
return 0;
}
上記のCの記述で、記述してあるsumをコメントアウトし、下のコメントアウトしてあるものを取って実行させると、期待通り、sum = 3 になるのですが、これと同じことを、関数プロトタイプにある
int (*i(AdPoint))(int, int); の関数iを使って行おうとすると、
error LNK2019: 未解決の外部シンボル "int (__cdecl*__cdecl i(int (__cdecl*)(int,int)))(int,int)" (?i@@YAP6AHHH@ZP6AHHH@Z@Z) が関数 _wmain で参照されました。
といったコンパイルエラーが出てしまって、理由が分かりかねています。
御経験のある方、御教示願えたらと思います。
補足
#include <stdio.h> typedef int (*AdPoint)(int, int); int add(int x, int y) { int z = x + y; return z; } //AdPoint test(AdPoint ap) //{ // return ap; //} int (*i(AdPoint p))(int a, int b) { AdPoint pp = p; return pp; } int main() { int sum; AdPoint p = add; //AdPoint pp = test(p); //sum = pp(1, 2); sum = (*i(p))(1, 2); printf("sum = %d\n", sum); return 0; } 一応、上の記述で私のやりたいことはできるようになりました。 int (*i())() の関数の中身には、 AdPoint pp = p; return pp; を書きました。 これでいいのでしょうかね? 何か補足あれば、お願い致します。