関数 (Function)

関数の定義

関数の定義:

返却値型 識別子(仮引数の型 仮引数, ...)
{/* 本体 */}

return 文

返却値の指定には return 文を使う.

return 文に出会うと, 関数内の処理はそこで止まり, 呼び出し元に処理は戻される. return 文は複数 存在しても構わない.

return 文を使う際には, 返却値型が void のときには return に 式 を指定しないこと, 逆に返却値型 が void 以外の場合は return に式を指定する必要があることに注意する.

main 関数の仮と返却値:

int main(void){ /* ... */}

int main(int argc, char *argv[]){ /* ... */}

プロトタイプ宣言

関数は, 呼び出せば, 動くように思いがちだが, どのような関数なのかを宣言せずに呼び出すのは, やや乱暴かもしれない. そこで, 呼び出す前に関数の原型を示す宣言が用意されている.

関数原型宣言 (関数プロトタイプ宣言, Function Prototype Declaration):

返却値型 識別子(仮引数の型, ...);

返却値型 識別子(仮引数の型 仮引数名, ...);

例えば,:

double f(char x, int y){/* ... */};

doublef(char int);

プロトタイプとは, 返却値型と仮引数の型がなんのかを示したものなので, 仮引数の識別子はあってもなくても同じである.

関数の呼び出し

func_call.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>

int max(int, int);

int main(void){
  int a = 5, b = 9;
  printf( "%d\n", max(a, b) );
  return 0;
}

int max(int x, int y){
  return (x > y ? x : y);
}

func_call.c の実行結果は:

[cactus:~/code_c/c_tuts]% ./func_call
9

規定の実引数拡張

引数を一切とらないのであれば,:

double f(void);

のように, 仮引数の型に void を指定したプロトタイプ宣言を行う.

これに対し, 仮引数の型を全くしない宣言:

double f();

は [引数をとらない] という意味にはならない. これは, 引数の型が不明という意味になる. このような場合に関数呼び出しをすると, 不明な箇所に代入された変数のすべてに整数拡張が施され, 浮動小数点型の引数は double 型に変換される.

この暗黙の型変換を規定の実引数拡張 (Default Argument Promotions) という.

Table Of Contents

Previous topic

式 (Expressions)

Next topic

配列 (Arrays)