第七回-01 関数の基礎


main は関数である

関数とは C 言語プログラミングにおいて重要な単位である。

まず、C 言語によるプログラミングでは 「C 言語によるプログラムは関数の集まり」であることをまずは了解して欲しい。

本演習で初めて取り扱ったプログラムを眺めてみよう。




ここで、以下の構造に着目しよう。

int main()
{
    std::cout << "はじめてのコンソールアプリケーションです\n";
}

実は、この記述には return 0; が省略されている。すなわち、以下が正式な記法である。

int main()
{
    std::cout << "はじめてのコンソールアプリケーションです\n";

    return 0;
}

この構造のことを main 関数と呼ぶ

つまり、C 言語によるプログラムは関数の集まりであると述べたが、
これまでコンソールアプリケーションで学んで来たのは関数 (main 関数) 一つだけのプログラムであった というわけである。

本ページでは、main 関数以外にも複数の関数を持つプログラミングを学ぶ。
冒頭に述べたように、関数とは C 言語の最も基本的な単位であるため、関数を学ぶことでようやくプログラミングのスタートラインに立つことになる。

関数とは、1年生の Basic で学んだ Sub プロシージャFunction プロシージャとを統合した概念である。
Basic では別々に取り扱ったが C 言語ではこれらを区別しない。

Basic で学んだことと同じく、関数とはプログラムのあるまとまった単位をモジュールとしてまとめたもの、と考えるとよい。
そして、main 関数とはその様々な関数 (モジュール) を呼び出して、ある目的の処理を実行するもの、と考えられる。

なお、本ページではここまで「C 言語」という語句は用いたが「C++」という語句は用いていない。
それは実は という違いがあるからである。 このように、C 言語と C++ ではプログラミングに対する基本的な考え方が異なるのだが、
C++ は C 言語の拡張として作られた言語であるため、C 言語風の記述もできる、という点に特徴がある。

C++ よりも後に登場した Java や C# はオブジェクト(クラス)を前提としているという意味でオブジェクト指向言語と呼ばれる。


関数を使ったプログラムの構成

自分で関数を作成する場合、典型的には の記述が必要である。

その際、関数には引数戻り値があることに注意して欲しい。
本日の演習で取り扱うのは、数学の関数 y=f(x) のようなものである。
この場合、x が関数 f(x) に対する引数、y に格納されるのが関数 f(x) の戻り値である。

関数のプロトタイプ (宣言)
戻り値 関数名(引数リスト);    // 自分で作る関数のプロトタイプ

関数の実装
戻り値 関数名(引数リスト)    // これが自分で作る関数の実装
{


  return ... ;               // 戻り値を return 文で返す
}


2乗を計算する関数

ここでは練習として を作成してみよう。

なお、Basic では x^2 で x の 2 乗を計算できたが、C/C++ では「^」という演算子をべき乗として使えない。
そこで、2 乗の関数を自分で作ってみよう、というわけである。

まずいつも通りコンソールプログラムのプロジェクトを作成しよう。
第一回-03 初めての C/C++ プログラミング(コンソールアプリケーション編)」を参考に作成する。

square 関数のプロトタイプと実装を全て記述したプログラムが以下である。

#include <iostream>

// 関数のプロトタイプ
double square(double x);

// main関数
int main()
{
	std::cout << square(2) << "\n";
}

// square関数の実装
double square(double x)
{
	double val;
	val = x * x;
	return val;
}

なお、square 関数の実装は課題との兼ね合いで3行に分けて丁寧に記述しているが、1行で

double square(double x)
{
	return x*x;
}

と書いても同じである。

一方、main 関数にある

std::cout << square(2) << "\n";

実際に square 関数を利用している箇所である。

このように、関数を用いたプログラミングでは、関数の定義(実装)を記述する部分と、
それを利用する部分の両方を分けて記述することになる。

もちろん、関数の戻り値を以下のように別の変数に格納して利用することもできる。

y = square(3);
std::cout << y << "\n";





←第六回課題第七回-02 関数〜課題を解くための準備→

非情報系学生のための C/C++ 入門に戻る