C言語で「static」と聞くと、変数のイメージが強いかもしれません。
しかし、関数にもstaticを付けることができます。
では、static関数とは何を意味し、なぜ使うのでしょうか。
この記事では、static関数の役割とメリットを、実務目線でわかりやすく解説します。
⇩staticの基本的な使い方についてはこちらの記事で解説しています。

static関数とは何か
結論から言うと、static関数とは
👉 同じファイル内からしか呼び出せない関数です
■ 通常の関数との違い
まずは比較です。
// 通常の関数
void func(void) {
}
// static関数
static void func(void) {
}この違いは「どこから呼べるか」です。
| 種類 | 呼び出せる範囲 |
|---|---|
| 通常の関数 | 他のファイルからも呼べる |
| static関数 | 同じファイル内のみ |
初心者さん関数ってどこからでも呼べるんじゃないんですか?



通常はね。でもstaticを付けると“このファイル専用”になるんだ
C言語文法解説シリーズ
本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説しています。
C言語文法解説シリーズ一覧はこちら


なぜstatic関数が必要なのか
主な理由は3つあります。
① 外部から隠せる(カプセル化)
static関数は他のファイルから見えません。
👉 内部処理を隠せる
static void internalProcess(void) {
// 外部に見せたくない処理
}② 名前の衝突を防げる
C言語では、関数名はグローバルに共有されます。
つまり、
- 別のファイルに同じ名前の関数があると衝突する可能性がある
👉 staticにすると回避できます
③ 設計が明確になる
- 外部に公開する関数
- 内部だけで使う関数
を分けることで、構造が整理されます。
👉 読みやすく、保守しやすいコードになる
externとの違い
よく比較されるのがexternです。
■ extern関数
extern void func(void);👉 他のファイルで定義された関数を使う
■ static関数
static void func(void);👉 他のファイルからは使えない
💡 まとめると:
- extern → 外に公開
- static → 内に閉じる
externについてはこちらの記事で解説しています。


実務での使い方(ファイル分割)
実際の開発では、このように使い分けます。
■ 外部公開する関数
extern void process(void);void process(void) {
internalProcess();
}■ 内部専用関数
static void internalProcess(void) {
}👉 外からは process しか見えない構造になります
組み込みでのメリット
組み込み開発では、static関数はほぼ必須です。
■ 不要な公開を防ぐ
- モジュール単位で閉じる
- バグの影響範囲を限定
■ 最適化されやすい
コンパイラは
👉 「この関数はこのファイルでしか使われない」
と分かるため、最適化しやすくなります。
static変数との違い
同じstaticでも、意味が違います。
■ static変数
👉 値を保持する(寿命の制御)
■ static関数
👉 スコープを制限する(見える範囲の制御)



同じstaticなのに全然違いますね



どこまで見えるか”と“どれだけ生きるか”の違いだね
👉 staticによる公開範囲の違いについてはこちら


まとめ
- static関数は「同一ファイル内でしか使えない関数」
- 外部から隠すことで安全性・保守性が上がる
- 名前衝突を防げる
- 実務では内部関数として積極的に使う
この記事が参考になった方へ
関数を含むC言語の基本文法をこちらの記事で整理しています。


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









コメント