「C言語は関数の集まり」——この感覚を早くつかめるかどうかで、上達スピードは大きく変わります。
C言語のプログラムは、入口となる main 関数から始まり、必要な処理を小さな関数として切り出して呼び出しながら動作します。関数を正しく理解すると、コードは読みやすく・修正しやすく・再利用できるようになります。
この記事では、初心者の方がつまずきやすいポイントを丁寧に整理しながら、次の内容をわかりやすく解説します。
- main関数の基本構造
- 標準ライブラリ関数とユーザー関数
- 宣言と定義の違い
- プロトタイプ宣言の意味
- 引数と戻り値の考え方
- よくあるミスと対処法
1. main関数とは?Cプログラムの入口

C言語のプログラムは通常、main関数から実行されます。
int main(void) {
return 0;
}
voidは「何もない」を意味し、return 0;は「正常終了」を意味します。
初心者のうちはこの形を基本として覚えておけば十分です。
コマンドライン引数を扱う場合は、次の形になります。
int main(int argc, char *argv[]) {
return 0;
}
まずは int main(void) を確実に書けるようになりましょう。
2. 関数の種類|標準ライブラリ関数とユーザー関数

■ 標準ライブラリ関数
C言語には、あらかじめ用意された便利な関数があります。
printf()(画面表示)scanf()(入力)strlen()(文字列長)malloc()(メモリ確保)
例:
#include <stdio.h>
int main(void) {
printf("Hello, C!\n");
return 0;
}
使用するには対応するヘッダを#includeします。

■ ユーザー定義関数
自分で作る関数です。
int square(int x) {
return x * x;
}
これが「処理を部品化する」第一歩です。
3. 宣言と定義の違い(最重要ポイント)

初心者が最も混乱する部分です。
- 宣言:この関数が存在することを知らせる
- 定義:関数の中身を書く
■ プロトタイプ宣言
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. 引数と戻り値の仕組み

関数は「入力を受け取り、結果を返す装置」です。
int add(int a, int b) {
return a + b;
}
呼び出し側:
int result = add(3, 5);
入力は、整数値の「3」と「5」。
戻り値は、合計した値の「8」ということになります。


■ 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)の外で、変数aの数値が変更されていることが確認できます。
5. 関数を分けるメリット

- コードが読みやすい
- 修正が楽
- 再利用できる
- バグの発見が容易
実務では「1関数1責務」が基本です。
6. よくあるミス10選

- 宣言より前に関数を呼ぶ
- 戻り値の型が一致しない
- returnを書き忘れる
- ヘッダをincludeしていない
- voidの意味を誤解
- 値渡しとポインタ渡しを混同
- 関数名が不明確
- 1つの関数が長すぎる
- 同じ処理をコピペする
- 入出力と計算を混ぜる
まとめ|関数を制する人がC言語を制する

C言語の理解は「関数理解」と言っても過言ではありません。
宣言 → 定義 → 呼び出しという流れを正しく整理し、引数と戻り値を設計できるようになると、コードは劇的に改善します。
まずは短い関数をたくさん作ることから始めてみてください。
小さな成功体験が、最速の上達ルートです。
よくある質問(FAQ)

- QC言語の宣言と定義の違いは何ですか?
- A
宣言は関数の存在と型を知らせるものです。
定義は関数の中身を実装することです。
- Qプロトタイプ宣言は必要ですか?
- A
推奨されます。
型の不一致をコンパイラが検出できるため、安全なプログラムになります。
- QC言語は値渡しですか?
- A
基本は値渡しです。
元の値を変更したい場合はポインタを使用します。
- Qmain関数の正しい書き方は?
- A
初心者は int main(void) が推奨です。
- Qincludeは何をしていますか?
- A
指定したヘッダファイルの内容を読み込み、関数の宣言を利用できるようにします。

コメント