C言語入門|関数を作る基本形

前の記事で、
「関数を使うとプログラムがスッキリする」
という話をしました。

では次の疑問です。

「関数って、どうやって作るの?」

この節では、
C言語で関数を作るときのいちばん基本の形
を、じっくり見ていきましょう。

関数を使うまでの2つのステップ

関数を利用する流れは、とてもシンプルです。

ステップ内容
関数を作る(関数の定義)
作った関数を使う(関数の呼び出し)

まずは、
関数を作ること から始めます。

関数を作ることを、
関数の定義 と呼びます。

いちばんシンプルな関数の形

引数も戻り値も使わない、
いちばん基本的な関数は、次の形で定義します。

void 関数名(void)
{
    関数が呼び出されたときに実行する処理
}

初めて見ると、
少し独特な形に感じるかもしれませんね。

でも、1つずつ分解して見ていくと、
とても単純です。

関数定義を構成する要素

関数定義は、次の要素でできています。

部分役割
void戻り値がないことを表す
関数名関数の名前
(void)引数がないことを表す
{ }関数の処理内容を書く場所

この形を覚えるだけで、
関数作成の第一歩はクリアです。

シンプルな関数を定義してみよう

では、実際のコードを見てみましょう。
次のプログラムは、
画面にメッセージを表示する関数を定義しています。

#include <stdio.h>

void greet(void)
{
    printf("ようこそC言語の世界へ!\n");
}

この greet という関数は、

  • 引数を受け取らず
  • 値も返さず
  • 画面にメッセージを表示する

という、とても単純な処理を行います。

関数定義だけではプログラムは動かない

ここで大事な注意点があります。

このコードには、
main関数が存在しません

そのため、
これまでと同じ方法でコンパイルしようとすると、
エラーになります。

関数は、
作っただけでは動きません

あとで必ず、
main関数などから呼び出して使う必要があります。

関数は「あとから使える部品」

関数を定義すると、

  • その定義より下に書かれたコードから
  • その関数を利用できる

というルールがあります。

つまり、
関数は「部品」として先に用意しておき、
あとから使うイメージです。

関数の中に関数は作れない

もう1つ、
とても重要なルールがあります。

関数の中に、別の関数を定義してはいけません。

次のような書き方はできません。

void outer(void)
{
    void inner(void)   // これはNG
    {
        ...
    }
}

C言語では、
すべての関数は
ソースコードのトップレベル に定義します。

void が2つある理由(今は気にしなくてOK)

関数定義を見ると、

void 関数名(void)

と、void が2回出てきます。

「なんだか意味深だな……」
と思った人もいるでしょう。

今の段階では、
こう覚えておけば十分です。

位置意味
左の void戻り値がない
右の void引数がない

詳しい意味や使い分けは、
このあとじっくり解説していきますので、
今は「おまじない」くらいの感覚で大丈夫です 😊

関数定義は設計図を書くようなもの

関数を定義するというのは、

  • 「どんな名前で」
  • 「どんな仕事をする部品か」

を宣言することです。

この時点では、
まだプログラムは動きません。

でも、
プログラムを整理するための土台
は、ここでしっかり作られています。

次にやること

ここででは、

  • 関数を作るとはどういうことか
  • いちばん基本的な関数の形
  • 関数定義のルール

を確認しました。

次は、

  • 関数を実際に呼び出す方法
  • main関数との関係
  • 関数が実行される流れ

を見ていきます。

関数を「作る」だけで終わらせず、
ちゃんと使えるようにする
ところまで、一緒に進んでいきましょう 😊