• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複雑な関数宣言の使い方)

C言語の関数プロトタイプを使って複雑な関数宣言を行う方法

このQ&Aのポイント
  • C言語で関数プロトタイプを使って複雑な関数宣言を行う方法を教えてください。
  • 上記のCのコードで、関数プロトタイプにあるint (*i(AdPoint))(int, int); を使ってエラーが発生してしまいます。
  • コンパイルエラーの原因が分かりません。どなたか教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.3

> int (*i(AdPoint p))(int a, int b) > { > AdPoint pp = p; > return pp; > } あなたの期待通りならそれで良いのではないでしょうか。 Warningとか出てないなら型の整合性はとれていると思いますが。 まあ個人的には、わざわざわかりにくい書き方せずに AdPoint i(AdPoint p) {  return p; } と書けば良いのではないかと思いますが。 こう書いた方が戻り値がAdPointってことがすぐわかるし。 > sum = (*i(p))(1, 2); も sum = i(p)(1, 2); と書ける。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「変数」は変数であって関数ではないし, 「関数を初期化する」なんてことはできない. #1 で何を言われたのか, 本当に理解できてるの?

tmiyoshi
質問者

補足

#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; を書きました。 これでいいのでしょうかね? 何か補足あれば、お願い致します。

すると、全ての回答が全文表示されます。
回答No.1

iの実体がないですね。 int test(); とだけ書いて test(); と呼び出してるのと同じです。

tmiyoshi
質問者

補足

すいません、言われるとおりです。 変数iは、「intを返す関数へのポインタを返す関数」になるので、 typedef int (*i(AdPoint))(int, int); で宣言してしまうと、関数を初期化することになってしまいます。 やりたいことは、関数iを使って、sum = pp(1, 2); と同じことを実現したいだけなのですが、どのように書けばいいか分かりかねています。

すると、全ての回答が全文表示されます。

関連するQ&A