![見出し画像](https://assets.st-note.com/production/uploads/images/123811495/rectangle_large_type_2_0431a7096dcb95882abcfb8bc8d01691.png?width=800)
Compile in C
コンパイルについて
コンパイル(Compile)
→人間が書いたプログラム(ソースコード)をコンピュータがわかる言葉に翻訳すること。
![](https://assets.st-note.com/img/1701887581399-NA9eFXlf4a.png?width=800)
・プリプロセス:
C言語のソースコードに対する前処理。
①コメントの削除
②プリプロセッサディレクティブの実行
→ '#'から始まる行のこと。例えば、#include, #define.
・狭義のコンパイル:
ソースコードをアセンブリ言語へ変換する。
→アセンブリ言語とは、機械語を扱いやすくするために作られたプログラ
ミング言語。
(例)「10110」→「SUB」
(機械語) → (アセンブリ言語)
・アセンブル:
アセンブリ言語のソースコードをオブジェクトコードに変換する。
→オブジェクトコードとは、実行ファイルの一歩前の状態。
・リンク:
オブジェクトコードやライブラリと呼ばれるプログラミング部品を結びつ
けて、実行ファイルを作成。
![](https://assets.st-note.com/img/1701887581860-cryOCiP88g.png?width=800)
詳細 (処理名 オプション)
プリプロセッサ(プリコンパイラ)-E
コンパイラの前処理、テキストファイルの追加や変換などの処理。#で始まるディレクティブに従って元のCプログラムを別のCプログラムに改変します。拡張子は.i
コンパイラ -S
コンピュータが解釈・実行できるアセンブリ言語の形式に一括して変換。テキストファイル.iアセンブリ言語プログラムからなるテキストファイル.sに翻訳。
アセンブラ -c
アセンブリ言語で記述されたテキストファイルを、マシン語命令に翻訳し、それをリロケータブルオブジェクトプログラムと呼ばれる形にパッケージ化し、その結果をオブジェクトファイルに格納する。ここでプログラムはテキストファイル(人間が読める形式)からコンピュータが直接解釈・実行できるバイナリファイルになる。拡張子は.o
リンカ(リンケージエディタ)
機械語(マシン語)で記述されたプログラム(オブジェクトコード)を連結、編集して実行可能ファイルを作成。hello.cというprintfを呼ぶプログラムの場合は、標準Cライブラリのprintf.oというオブジェクトファイルを結合し、hello.oに結合する。
コラム1: GCCとは?
GNU Compiler Collection. GNUプロジェクトが開発および配布している、さまざまなプログラミング言語のコンパイラ集のこと。
GNU(グニュー)とは、「GNU is Not Unix」の頭文字を取った略号であり、UNIXと上位互換性のあるフリーな総合ソフトウェアシステムの名称。Richard M. Stallmanを中心とした、世界中の開発者によるボランティア活動によって開発が進められている。
参考:GCC vs CC Compiler: Difference and Comparison
コラム2:GCCとClang
Clang は,LLVMのサブプロジェクトである. C言語ファミリ(C,C++,Objective C/C++,OpenCL,CUDA,RenderScript)の機能, GCC互換のコンパイラドライバ (clang) の機能, MSVC互換のコンパイラドライバ (clang-cl.exe) の機能を持つ.
LLVMプロジェクト
任意のプログラミング言語の静的コンパイルと動的コンパイルの両方をサポートできる最新の SSA ベースのコンパイル戦略を提供することを目的としたプロジェクト。
GNUに関する説明の中で、Cコンパイラの定番ともいえるgccについて説明しましたが、実はCコンパイラは、今もものすごい勢いで進化しているのです。世界中に普及したGCCですが、現在それに置き換わるこののできるコンパイラを提供することを目的とした、「Clang(クラン)」というコンパイラの開発プロジェクトが進行しています。
この記事が気に入ったらサポートをしてみませんか?