コンパイラ

C言語のプログラムから実行ファイルができるまでの一般的な流れとして正しいものはどれか。

  1. Aリンク → コンパイル → アセンブル
  2. Bアセンブル → リンク → コンパイル
  3. Cコンパイル → アセンブル → リンク
答えと解説を見る

正解:C. コンパイル → アセンブル → リンク

C言語のソースファイルは、まずコンパイラで機械語に近いアセンブリ言語(または直接オブジェクトファイル)に変換され、アセンブラで機械語のオブジェクトファイルになります。最後にリンカが複数のオブジェクトファイルやライブラリをまとめ、関数や変数のアドレスを決めて実行ファイルを作ります。オブジェクトファイルの段階では、ほかのファイルにある関数のアドレスはまだ決まっていません。ほかの順番では、前の段階の出力が次の段階の入力になりません。

  • A. リンクは最後の段階です。
  • B. アセンブルの前にコンパイルが必要です。
  • C. 正しい。コンパイル、アセンブル、リンクの順です。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 生成した機械語の短い並びを小さな窓で見て、むだな命令の組み合わせをより良い命令に置き換える最適化を何と呼ぶか。
  2. 上のコードで、sqをインライン展開したあとに続けて効く最適化と、その結果として正しいものはどれか。
  3. ソフトウェアパイプライン化(ソフトウェアパイプライニング)の説明として正しいものはどれか。
  4. コンパイラが、浮動小数点数の足し算 (a + b) + c を、厳密な設定のもとでは a + (b + c) に勝手に並べ替えない理由として正しいものはどれか。
  5. コンパイラの自動ベクトル化で使われる命令の種類として正しいものはどれか。