blog

C++をソース・ファイルから実行ファイルにする

この点をまとめます。まず、1.プリコンパイル段階 2.コンパイル段階 3.アセンブル段階 4.リンク段階 といういくつかの段階があることを明確にしておきましょう。 それぞれの段階が何をしているのかを説...

Mar 20, 2020 · 2 min. read
Share this

この知識をここでまとめておきましょう。まず、いくつかの段階があることを明確にすることから始めましょう。

1.プリコンパイル段階

2.コンパイル段階

3.コンパイル段階

4.リンキングフェーズ

以下、各ステージで具体的に何が行われているのか、各ステージごとに説明します。

プリコンパイル段階

その仕事は

1. #defineフィールド代入、マクロ代入としても知られています。LINE__、 FILETIME__のような組み込みの前処理マクロがあります。また、__attribute__もあります。

2.#includeの内容を置き換えます。

4.条件付きコンパイルの取り扱い

5.行番号とファイルラベルを追加して、デバッグやコンパイル時にどのファイルがどの行なのか分かるようにします。

6.コンパイラは#pragmaコンパイラ・ディレクティブを使用する必要があるため、#pragmaコンパイラ・ディレクティブを保持します。

この段階では構文エラーのチェックはありません。この段階で.iファイルが生成されます。

コンパイル段階

コンパイル段階は、高レベル言語を低レベルのアセンブリ言語に変換するところです。この段階で構文がチェックされます。コンパイルが実行されます。コンパイルは、字句解析、構文解析、意味解析、最適化の各段階に分けられます。

コンパイル段階

この段階は、低レベルのアセンブリ言語をマシン語にすることです。.oファイルの生成

リンク段階

ターゲットファイルから参照される外部ライブラリのコードをリンクして実行ファイルを生成する段階です。リンクは動的リンクと静的リンクに分けられます。静的リンクとは、外部ライブラリのコードをバイナリファイルにコピーすることで、重複コピーが発生する可能性がありますが、クロスプラットフォームに適しています。動的リンクは、外部ライブラリのコードセグメントを実行時に再配置するもので、コードの共有が可能ですが、静的リンクほどクロスプラットフォームではありません。C++はオーバーロードをサポートしていますが、オーバーロードされた関数が複数ある場合、リンカはどれをリンクすればよいかわからなくなります。例えば、void func(char ch)とvoid func(int i)は_func_char, _func_intになります。 しかし、C++はオーバーロードをサポートしていないため、C++は名前を変更しません。このとき、C++にCのコンパイルルールを使わせるためにextern Cを指定する必要があります。詳しくはこちらの記事をご覧ください。

Read next

二分探索アルゴリズムの実装

C++ #include #include using namespace std; int ; int main()

Mar 20, 2020 · 1 min read

CocoaPods最新バージョンの問題

Mar 19, 2020 · 1 min read

一般的なHTMLタグ

Mar 19, 2020 · 2 min read

Jenkinsの設定 gitLab ssh認証

Mar 19, 2020 · 2 min read