リンカ・ローダと実行形式
C言語で関数にstaticを付けて定義したとき(例: static int helper(void))の効果として正しいものはどれか。
- Aその関数はプログラムの実行中、ずっとメモリに残らない
- Bその関数はファイルの中だけから見え、ほかのファイルに同じ名前の関数があっても衝突しない
- Cその関数は、ほかのどの関数よりも先に実行される
答えと解説を見る
正解:B. その関数はファイルの中だけから見え、ほかのファイルに同じ名前の関数があっても衝突しない
関数やグローバル変数にstaticを付けると内部リンケージになり、シンボルはそのファイルの中でだけ使われ、ほかのファイルからは参照できなくなります。名前の衝突を防げるだけでなく、コンパイラはその関数がほかから呼ばれないと分かるので、インライン展開や使われない関数の削除などの最適化もしやすくなります。
- A. 関数のコードは実行中ずっとメモリにあります。
- B. 正しい。内部リンケージになります。
- C. 実行の順番は変わりません。