C言語 | 関数 | パラメータと戻り値

関数は処理に使う値を受け取り、処理結果を呼び出し元へ返すことができます。

関数に値を渡す

関数へ渡す情報を引数と呼びます。関数側で引数を受け取るために宣言する変数はパラメータです。関数定義の括弧内に型と識別子を書き、複数ある場合はカンマで区切ります。

void Function(int iValue, float fValue) { ...

呼び出すときは、パラメータの型と互換性がある式を指定します。

コード1

#include <stdio.h>

void Function(int iValue, float fValue) {
  printf("iValue = %d : fValue = %g\n", iValue, fValue);
}

int main() {
  Function(10, 3.14F);
  Function(100, 1000);
  return 0;
}

Function(100, 1000) では、float 型のパラメータに int 型の引数を渡しています。代入と同様に、互換性があれば暗黙の型変換が行われます。iValuefValue のようなパラメータは、宣言された関数内でのみ使用できます。

関数の結果を返す

関数は呼び出し元へ値を返せます。呼び出し元はその値を変数に保存することも、無視することもできます。

コード2

#include <stdio.h>

int Triangle(int iBase, int iHeight) {
  return iBase * iHeight / 2;
}

int main() {
  int iBase, iHeight, iArea;
  printf("三角形の底辺と高さを入力してください。 >");
  scanf("%d %d", &iBase, &iHeight);

  iArea = Triangle(iBase, iHeight);
  printf("三角形の面積 = %d\n", iArea);
  return 0;
}

Triangle() は底辺と高さを受け取り、面積を返します。異なる関数では同じ識別子の変数を宣言できます。それぞれ別のスコープに属するためです。

古いC言語では戻り値の型を省略すると int として扱われました。この旧式の構文は現在のC規格では使用できず、C++でもエラーになります。新しいコードでは戻り値の型を必ず明示してください。

コード3

#include <stdio.h>

int Function(void) {
  printf("Function()\n");
  return 0;
}

int main(void) {
  return Function();
}

型を明示すると、関数の目的が明確になり、廃止された構文への依存を避けられます。