リンカ・ローダと実行形式
C言語で「extern int count;」と書いたときの意味として正しいものはどれか。
- Acountという変数がどこか別の場所で定義されていることを宣言し、ここでは領域を確保しない
- Bcountという変数を新しく作り、0で初期化する
- Ccountという変数を、このファイルの外から見えないようにする
答えと解説を見る
正解:A. countという変数がどこか別の場所で定義されていることを宣言し、ここでは領域を確保しない
externは「この名前の変数は別のファイルなどで定義されている」という宣言で、メモリの領域は確保しません。コンパイラはcountの番地を知らないまま参照する命令を作り、その場所を再配置情報に記録します。リンカが、別のファイルにある「int count = 0;」のような定義と結びつけて番地を決めます。ヘッダファイルにextern宣言を書き、定義は1つのソースファイルに置くのが基本です。
- A. 正しい。宣言だけで、定義は別の場所です。
- B. 領域を確保するのは定義の「int count;」などです。
- C. 外から隠すのはstaticです。