C言語で関数を学び始めると、最初に出てくるのが「関数宣言」と「関数定義」です。
なんとなく書いて動いているけど、
「宣言って何?なくてもよくない?」と感じたことはないでしょうか。
この記事では、関数宣言と関数定義の違いと、なぜ宣言が必要なのかを、実際の動作イメージとともにわかりやすく解説します。
C言語文法解説シリーズ
本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説しています。
C言語文法解説シリーズ一覧はこちら

関数とは何か(おさらい)
関数とは、処理をひとまとまりにしたものです。
int add(int a, int b) {
return a + b;
}このように定義しておくことで、何度でも同じ処理を呼び出すことができます。
関数の基本についてはこちらの記事で解説しています。
関数宣言と関数定義の違い
まず結論から整理します。
| 用語 | 役割 |
|---|---|
| 関数宣言 | 関数の「存在」と「型」をコンパイラに伝える |
| 関数定義 | 実際の処理内容を書く |
型についてはこちらの記事で解説しています。

■ 関数宣言とは
関数宣言は「こういう関数があります」と事前に知らせるためのものです。
int add(int a, int b);これだけでは処理は書かれていません。
あくまで「関数の情報だけ」を伝えています。
■ 関数定義とは
関数定義は、実際に処理を書く部分です。
int add(int a, int b) {
return a + b;
}こちらが本体です。
なぜ関数宣言が必要なのか
ここが一番重要なポイントです。
C言語は「上から順番に読む言語」です。
つまり、コンパイラは未来を見てくれません。
■ 宣言がないとどうなるか
int main() {
int result = add(1, 2);
return 0;
}
int add(int a, int b) {
return a + b;
}このコードはエラーになります。
理由はシンプルで、mainの時点でaddという関数を知らないからです。
■ 宣言を追加するとどうなるか
int add(int a, int b); // ← これが宣言
int main() {
int result = add(1, 2);
return 0;
}
int add(int a, int b) {
return a + b;
}これでコンパイルが通ります。
初心者さん後で書くんだから、別に知らなくてもよくないですか?



C言語は未来を見ないんだ。呼び出す時点で“知っている必要がある”んだよ
コンパイルの仕組みと関数宣言
少し踏み込むと、関数宣言は「型チェック」のためにも重要です。
例えば:
int add(int a, int b);この宣言があることで、
- 引数はintが2つ
- 戻り値はint
という情報がコンパイラに伝わります。
■ 宣言がないと危険なケース
昔のCでは、宣言なしで関数を呼べてしまうことがありました。
int main() {
double result = add(1.5, 2.5); // 本当はdouble
}もし実際の関数が int add(int, int) だった場合、
型の不一致が検出されず、バグの原因になります。
👉 宣言は「安全に使うための契約」でもあります。
実務での使われ方(ファイル分割)
実際の開発では、関数宣言はヘッダファイル(.h)に書きます。
int add(int a, int b);int add(int a, int b) {
return a + b;
}#include "add.h"int main() {
int result = add(1, 2);
}このように分割することで、
- 複数ファイルから利用できる
- 役割ごとに整理できる
というメリットがあります。
まとめ
- 関数宣言は「関数の情報を先に伝えるもの」
- 関数定義は「実際の処理を書くもの」
- C言語は上から読むため、宣言がないと呼び出せない
- 宣言は型チェックの役割もあり、安全性に重要
この記事が参考になった方へ
関数を含むC言語の基本文法をこちらの記事で整理しています。


技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。
小さなご相談からでもお気軽にご連絡ください。










コメント