月ノ書

【C言語】static関数とextern関数の違いとは?ファイル分割時の正しい使い分けを解説

この記事でわかること
  • static 関数の意味と使いどころ
  • extern が必要になる理由
  • 複数ファイル構成での正しい設計イメージ
  • 関数名の衝突を防ぐ考え方
  • 実務でよく使われる使い分けパターン

static関数とは

関数の前に static を付けると その関数は「定義されたファイル内だけ」で使える関数 になります

つまり

という制限がかかります

なぜそんな仕組みがあるのか

理由は主に次の3つ

特に 関数名の衝突防止 はとても重要

static関数の例
#include <stdio.h>

// static を付けた関数 → このファイル内だけで有効
static void hello(void) {
    printf("Hello この関数はファイル内限定\n");
}

int main(void) {
    hello();   // 同じファイル内なのでOK
    return 0;
}

この hello 関数は

という特徴を持ちます

static関数を使うべき場面

つまり

「この関数は内部実装だから外に出すな」という意思表示が static

extern関数とは

extern別のファイルで定義された関数を使います という宣言です

C言語では

を分けて考えます

複数ファイル構成の例

util.c(関数を定義する側)

#include <stdio.h>

void greet(void) {
    printf("こんにちは util.c から呼び出されました\n");
}

main.c(関数を使う側)

#include <stdio.h>

// 他ファイルの関数を使う宣言
extern void greet(void);

int main(void) {
    greet();
    return 0;
}

実行方法

gcc main.c util.c -o program
./program
出力結果
こんにちは util.c から呼び出されました

このように

という役割分担ができます

extern はなぜ必要なのか

C言語は「この関数はどこかに存在するはずだ」という情報がないとコンパイラが関数を使えません

そのため

extern void greet(void);

という宣言で「この関数は別ファイルにあるよ」と教える必要があります

static と extern の決定的な違い

種類役割使える範囲
static関数内部専用定義したファイル内のみ
extern関数外部公開他ファイルから使用可能

設計的には

が基本方針

実務でのよくある設計パターン

こうすることで


まとめ

学習進捗

0
Would love your thoughts, please comment.x