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

C言語のmain関数が「return 3;」で終わったとき、その値3は一般にどうなるか。

  1. Aプログラムの終了ステータスとして、プログラムを起動した側(シェルなど)に渡される
  2. B画面に「3」と表示される
  3. C次にプログラムを起動したときの、最初の引数になる
答えと解説を見る

正解:A. プログラムの終了ステータスとして、プログラムを起動した側(シェルなど)に渡される

mainの戻り値は起動コードによってexitに渡され、OSを通じて親のプロセスに終了ステータスとして伝えられます。慣習として0は成功、0以外は何らかの失敗を表し、シェルでは「echo $?」で直前のコマンドの終了ステータスを見られます。スクリプトでは、この値を見て次の処理を続けるか止めるかを決めます。

  • A. 正しい。0は成功、0以外は失敗を表すのが慣習です。
  • B. 戻り値が自動で表示されることはありません。
  • C. 次回の引数にはなりません。
この分野を解く 分野ページへ

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

  1. 実行ファイルにstripコマンドを使ったときに起こることとして正しいものはどれか。
  2. リンカでの弱いシンボル(weak symbol)の扱いとして正しいものはどれか。
  3. C++のコンパイラが関数名に引数の型などの情報を付け加えてシンボル名を作る「名前修飾(マングリング)」の主な目的はどれか。
  4. Linuxのdlopen関数(WindowsのLoadLibraryに相当)の使い道として最も適切なものはどれか。
  5. 100個のプロセスが同じ共有ライブラリを使っているとき、物理メモリの使い方として正しいものはどれか。