関数タイプは何に使いますか?

940 ワード

関数タイプは、通常、関数を宣言したり、複雑なタイプを構成したりするために使用されます.例えばvoid foo(){int bar 1();//関数barを宣言し、intを返します.パラメータテーブルは空で、そのタイプは関数タイプint(*p 1)();//p 1は関数ポインタ、*p 1のタイプは関数タイプで、typedef int FUN()と同じです.;//typedef関数タイプFUN.このタイプはintを返し、パラメータテーブルは空FUNbar 2である.//int bar 2();  FUN *p2;//int(*p 2)();  FUN *foobar(FUN *);//関数foobarを宣言します.その戻り値はFUN*、パラメータもFUN*//int(*foobar(*)())))());}C/C++規定関数の戻り値は、関数タイプまたは配列タイプではなく、関数ポインタまたはオブジェクトポインタのみで代用できます
たとえば、次のような宣言があります.
 typedef int F(void);
このタイプの関数はパラメータを持たず、戻り値はintです.では、fgをこのように宣言することができます.
F f, g;
宣言に相当:
int f(void);int g(void);
次の関数宣言はエラーです.
F h(void);//関数はvoidタイプ、スカラータイプ、構造体、連合体を返すことができますが、関数タイプを返すことも配列タイプを返すこともできません.
 
例:int foo(){return 0;}typedef int FUN();FUN bar1() {  // error!  return foo;}FUN*bar 2(//OK!return foo;//foo暗黙的に関数ポインタに変換}基本的には、C/C++では関数に値の意味がなく、各関数はコンパイル時に定義されなければならず、実行中に1つの関数を生成してコピーすることはできません