こんにちは。はまじです。
先日、能力の高い後輩がGithubに自作ライブラリ公開してたので、ソースコードリーディングしていました。
そこで気になったのが、関数の定義(実装時)にstatic修飾子をつけていたことです。
これで5が出力されますが、他のファイルからこのファイルをincludeしても、getNum関数を使うことはできません。
static修飾子がついた関数は、他ファイルで参照することを禁止します。
つまり、関数のstatic修飾子は一種の隠蔽化する役割を持っています。
ちなみに、main関数にstatic修飾子つけると怒られます。
ライブラリ等でかなり出てきそうなので,覚えておくといいですね.
先日、能力の高い後輩がGithubに自作ライブラリ公開してたので、ソースコードリーディングしていました。
そこで気になったのが、関数の定義(実装時)にstatic修飾子をつけていたことです。
static int getNum(void){
return 5;
}
int main(void){
printf("%d\n",getNum());
}
これで5が出力されますが、他のファイルからこのファイルをincludeしても、getNum関数を使うことはできません。
static修飾子がついた関数は、他ファイルで参照することを禁止します。
つまり、関数のstatic修飾子は一種の隠蔽化する役割を持っています。
ちなみに、main関数にstatic修飾子つけると怒られます。
#include
static int main(void){
int i;
char c;
printf("%ld\n",sizeof(i));
printf("%ld\n",sizeof(c));
}
% gcc test.c
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
ライブラリ等でかなり出てきそうなので,覚えておくといいですね.