戻り値の型
関数の戻り値の型は関数によって返される値の型とサイズを設定し次のような構文の型指定子に対応しています :
構文
関数の定義 :
宣言指定子の opt 属性 seqopt 宣言子リストの 複合ステートメント opt の宣言seq 属性 は /* */Microsoft 仕様です。
宣言指定子 :
ストレージ クラス指定子の宣言指定子 opt型指定子の宣言指定子 opt
宣言型修飾子の指定子 opt
型指定子 :
voidchar
short
int
long
float
double
Signed
署名されていません
構造体または共用体指定子
列挙指定子
型定義名
型指定子 基本クラス構造体または共用体の型を指定できます。 型指定子 がない場合戻り値の型 int と見なされます。
関数定義で指定された戻り値の型はプログラムで関数の宣言の戻り値の型の他の場所に一致する必要があります。return のステートメントで式を実行したときに関数の戻り値。式は戻り値の型に評価され必要に応じて変換され関数が呼び出された時点に戻ります。関数の戻り値の型 void いる場合はこれらのステートメントは式警告が生成され式は評価されません。
次の例では関数の戻り値について説明します。
typedef struct
{
char name[20];
int id;
long class;
} STUDENT;
/* Return type is STUDENT: */
STUDENT sortstu( STUDENT a, STUDENT b )
{
return ( (a.id < b.id) ? a : b );
}
この例では typedef の宣言を含む STUDENT の型を定義しSTUDENT の戻り値の型を持つように関数 sortstu を定義します。関数は 2 個の構造体引数の 1 つがを選択して返します。関数への後続の呼び出しで引数の型をコンパイラが確認のチェック STUDENT です。
[!メモ]
効率は構造体全体にではなく構造体へのポインターを渡すことによって強化されています。
char *smallstr( char s1[], char s2[] )
{
int i;
i = 0;
while ( s1[i] != '\0' && s2[i] != '\0' )
i++;
if ( s1[i] == '\0' )
return ( s1 );
else
return ( s2 );
}
この例では文字の配列へのポインターを返す関数を定義します。関数は 2 文字列の短いの引数と戻りとして 2 文字の配列 (文字列) ポインターを受け取ります。配列の要素のうち最初の配列へのポインターへのポインターの型は; したがって関数の戻り値の型は char を入力するポインターです。
引数と戻り値をチェックする正しい型を有効にするようにプロトタイプをお勧めしますがメソッドを呼び出す前に int の戻り値の型で関数を宣言する必要はありません。