リンカ・ローダと実行形式

C言語で「extern int count;」と書いたときの意味として正しいものはどれか。

  1. Acountという変数がどこか別の場所で定義されていることを宣言し、ここでは領域を確保しない
  2. Bcountという変数を新しく作り、0で初期化する
  3. Ccountという変数を、このファイルの外から見えないようにする
答えと解説を見る

正解:A. countという変数がどこか別の場所で定義されていることを宣言し、ここでは領域を確保しない

externは「この名前の変数は別のファイルなどで定義されている」という宣言で、メモリの領域は確保しません。コンパイラはcountの番地を知らないまま参照する命令を作り、その場所を再配置情報に記録します。リンカが、別のファイルにある「int count = 0;」のような定義と結びつけて番地を決めます。ヘッダファイルにextern宣言を書き、定義は1つのソースファイルに置くのが基本です。

  • A. 正しい。宣言だけで、定義は別の場所です。
  • B. 領域を確保するのは定義の「int count;」などです。
  • C. 外から隠すのはstaticです。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. Linuxなどでよく使われるELF形式のファイルについて正しいものはどれか。
  2. 実行ファイルの.textセクションに入っているものはどれか。
  3. C言語でファイルの外側に「int limit = 100;」と書いたグローバル変数は、一般にどのセクションに置かれるか。
  4. .bssセクションの特徴として正しいものはどれか。
  5. C言語の「char *p = "hello"; p[0] = 'H';」を実行すると、多くの環境で異常終了する。その理由として正しいものはどれか。