関数タイプは何に使いますか?
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);
このタイプの関数はパラメータを持たず、戻り値は
F f, g;
宣言に相当:
int f(void);int g(void);
次の関数宣言はエラーです.
F h(void);//関数は
例:int foo(){return 0;}typedef int FUN();FUN bar1() { // error! return foo;}FUN*bar 2(//OK!return foo;//foo暗黙的に関数ポインタに変換}基本的には、C/C++では関数に値の意味がなく、各関数はコンパイル時に定義されなければならず、実行中に1つの関数を生成してコピーすることはできません
たとえば、次のような宣言があります.
typedef int F(void);
このタイプの関数はパラメータを持たず、戻り値は
int
です.では、f
とg
をこのように宣言することができます.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つの関数を生成してコピーすることはできません