C言語の関数入門|初心者が最短で理解する「宣言・定義・引数・戻り値」完全ガイド

C言語の関数コードを表示したモニターの前で作業する女性エンジニア スキルアップ・学習

「C言語は関数の集まり」——この感覚を早くつかめるかどうかで、上達スピードは大きく変わります。

C言語のプログラムは、入口となる main 関数から始まり、必要な処理を小さな関数として切り出して呼び出しながら動作します。関数を正しく理解すると、コードは読みやすく・修正しやすく・再利用できるようになります。

この記事では、初心者の方がつまずきやすいポイントを丁寧に整理しながら、次の内容をわかりやすく解説します。

  1. main関数の基本構造
  2. 標準ライブラリ関数とユーザー関数
  3. 宣言と定義の違い
  4. プロトタイプ宣言の意味
  5. 引数と戻り値の考え方
  6. よくあるミスと対処法

1. main関数とは?Cプログラムの入口

C言語のmain関数コードを表示したモニターの前で作業する女性エンジニア
オフィスでコードを読む女性

C言語のプログラムは通常、main関数から実行されます。

int main(void) {
    return 0;
}

voidは「何もない」を意味し、return 0;「正常終了」を意味します。
初心者のうちはこの形を基本として覚えておけば十分です。

コマンドライン引数を扱う場合は、次の形になります。

int main(int argc, char *argv[]) {
    return 0;
}

まずは int main(void) を確実に書けるようになりましょう。

2. 関数の種類|標準ライブラリ関数とユーザー関数

明るいオフィスでC言語の関数コードを同僚に説明する女性エンジニア
プログラミングディスカッションの一瞬

■ 標準ライブラリ関数

C言語には、あらかじめ用意された便利な関数があります。

  • printf()(画面表示)
  • scanf()(入力)
  • strlen()(文字列長)
  • malloc()(メモリ確保)

例:

#include <stdio.h>

int main(void) {
    printf("Hello, C!\n");
    return 0;
}

使用するには対応するヘッダを#includeします。

printfの動作確認
実行結果

■ ユーザー定義関数

自分で作る関数です。

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

これが「処理を部品化する」第一歩です。

3. 宣言と定義の違い(最重要ポイント)

C言語の関数宣言と定義のコードを確認している女性エンジニア(明るいオフィス風景)
ソフトウェアエンジニアの集中した瞬間

初心者が最も混乱する部分です。

  • 宣言:この関数が存在することを知らせる
  • 定義:関数の中身を書く

■ プロトタイプ宣言

int max(int a, int b);

これは「max関数はintを返し、int型2つを受け取る」と伝えています。

■ 実際の使用例

int max(int a, int b);  // 宣言

int main(void) {
    int m = max(10, 20);
    return 0;
}

int max(int a, int b) { // 定義
    if (a > b) return a;
    return b;
}

関数を呼び出す前に宣言が見えていることが重要です。

関数テストのコード
実際のコーディング
関数のテストの結果
実行結果

4. 引数と戻り値の仕組み

C言語の関数と戻り値のコードを確認しながらタイピングする女性エンジニア(明るいオフィス)
オフィスでプログラミングに集中する女性

関数は「入力を受け取り、結果を返す装置」です。

int add(int a, int b) {
    return a + b;
}

呼び出し側:

int result = add(3, 5);

入力は、整数値の「3」と「5」。
戻り値は、合計した値の「8」ということになります。

足し算の関数コード
関数addの使用例
足し算の関数の実行結果
実行結果

■ C言語は値渡し

void add10(int x) {
    x = x + 10;
}

int main(void) {
    int a = 5;
    add10(a);
    printf("%d\n", a);  // 5のまま
}

関数の中で値が変わるだけで、元の値は変わりません。

■ 値を変更したい場合(ポインタ)

void add10(int *p) {
    *p = *p + 10;
}

int main(void) {
    int a = 5;
    add10(&a);
    printf("%d\n", a);  // 15
}
関数で値を変える
add10の使用例
add10実行結果
実行結果

関数(add10)の外で、変数aの数値が変更されていることが確認できます。

5. 関数を分けるメリット

main関数と複数の小さな関数を2画面で確認する女性エンジニア(明るいオフィス)
コードをチェックするエンジニア
  • コードが読みやすい
  • 修正が楽
  • 再利用できる
  • バグの発見が容易

実務では「1関数1責務」が基本です。

6. よくあるミス10選

複数の小さな関数で構成されたC言語プログラムを確認しながら微笑む女性エンジニア(明るいオフィス)
ソフトウェアエンジニアの仕事現場
  1. 宣言より前に関数を呼ぶ
  2. 戻り値の型が一致しない
  3. returnを書き忘れる
  4. ヘッダをincludeしていない
  5. voidの意味を誤解
  6. 値渡しとポインタ渡しを混同
  7. 関数名が不明確
  8. 1つの関数が長すぎる
  9. 同じ処理をコピペする
  10. 入出力と計算を混ぜる

まとめ|関数を制する人がC言語を制する

複数の小さな関数で構成されたC言語プログラムを表示したモニターの前で、白い歯が少し見える柔らかな笑顔の女性エンジニア(明るいオフィス)
ソフトウェアエンジニアの笑顔

C言語の理解は「関数理解」と言っても過言ではありません。

宣言 → 定義 → 呼び出しという流れを正しく整理し、引数と戻り値を設計できるようになると、コードは劇的に改善します。

まずは短い関数をたくさん作ることから始めてみてください。
小さな成功体験が、最速の上達ルートです。

よくある質問(FAQ)

ヘッドセットを付けてFAQ対応を行う女性エンジニアと男性エンジニア(明るくモダンなオフィス)
オフィスでのエンジニアたち
Q
C言語の宣言と定義の違いは何ですか?
A

宣言は関数の存在と型を知らせるものです。
定義は関数の中身を実装することです。

Q
プロトタイプ宣言は必要ですか?
A

推奨されます。
型の不一致をコンパイラが検出できるため、安全なプログラムになります。

Q
C言語は値渡しですか?
A

基本は値渡しです。
元の値を変更したい場合はポインタを使用します。

Q
main関数の正しい書き方は?
A

初心者は int main(void) が推奨です。

Q
includeは何をしていますか?
A

指定したヘッダファイルの内容を読み込み、関数の宣言を利用できるようにします。

コメント

タイトルとURLをコピーしました