関数にstaticを付けるとその関数は、
記述されたファイル内でのみ使える関数となります。
static付き関数の基本的な書き方
main1.c
#include <stdio.h>
static void show(void);
void main2(void);
void main(void) {
show();
main2();
}
static void show(void) {
printf("show\n");
}
main2.c
void main2(void);
void show(void);
void main2(void) {
show(); // show関数を呼び出せない
}
main関数からshow関数の呼び出しは何の問題もありません。
しかし、次のmain2関数呼び出しで、
処理がmain2.cファイルに移ります。
そこでshow関数を呼び出そうとすると・・・できません。
これがstaticの効果です。
外部のファイルからはshow関数は存在しない(見えない)のです。
もっとも、上記のプログラムは
コンパイル時にエラーとなり、実行できません。
別ファイルでは同じ関数名を使う事ができる
static付き関数は、上記で説明したように
別のファイルからは見えません。
なので、static付き関数と同じ関数名を使用しても何の問題もありません。
記述例
main1.c
#include <stdio.h>
static void show(void);
void main2(void);
void main(void) {
show();
main2();
show();
}
static void show(void) {
printf("main1.cのshow関数が呼ばれました\n");
}
main2.c
void main2(void);
void show(void);
void main2(void) {
show();
}
void show(void) {
printf("main2.cのshow関数が呼ばれました\n");
}
上記のプログラムを実行したら
結果はどうなるでしょうか?
main1.cのshow関数が呼ばれました
main2.cのshow関数が呼ばれました
main1.cのshow関数が呼ばれました
結果は上記のように出力されました。
スポンサーリンク
static付き関数の使いどころは?
static付き関数は、例えば複数人での開発となった場合に、
個人個人でそれぞれ異なった関数名や(グローバル)変数名を
付けると思いますが、万が一、他人とかぶってしまう場合があり、
プログラムを結合する時に問題になります。
そういう時に、static付き関数と
static付きグローバル変数などを使って
限られた範囲内で開発してもらうようにすると、うまくいきます。