【C++】実行までの流れ

実行ファイルの作成

テキストファイル
C++の文法に従って、人間が分かるように書かれたテキストファイル(拡張子がcpp)。
Javaとは異なり、クラス名とファイル名が違っても良い。
プリプロセス
プリプロセッサがプリプロセスステートメントの加工を行う。
代表的に#includeディレクティブがあり、プリプロセッサが#includeで指定したファイルをコピー&ペーストしてくれる。
極端な例ではあるが、以下の場合、プリプロセッサが※の箇所にPreprocess.hをペーストしてくれる。
Preprocess.h

}
Main.cpp

#include <iostream>

int main(){
 std::cout << "Test" << std::endl;
#include "Preprocess.h" // ※
プリプロセスの結果のファイルは*.iファイルで、プロジェクトのプロパティ>[構成プロパティ]>[C/C++]>[プリプロセッサ]>[ファイルの前処理]を"はい(/P)"に指定すると出力される。
コンパイル
C++のコンパイラはテキストファイル単位(分割コンパイル)で実行可能なファイル(バイナリ形式)に変換する。
コンパイル時にエラー(コンパイルエラー)が発生した場合のエラーメッセージはC~
コンパイルされた結果は*.objファイルとして出力される。
ファイルを保存後"Ctrl+F7"でコンパイルすることが可能。
バイナリ形式の一歩手前のアセンブリファイルを出力するためには、プロジェクトのプロパティ>[構成プロパティ]>[C/C++]>[出力ファイル]>[アセンブリの出力]を"アセンブリコードのみ(/FA)"に指定
リンキング
結構躓くところ
コンパイルに記載の通り、C++は分割コンパイルであり、コンパイル結果の各オブジェクトファイルは他のオブジェクトのことが分からない。
そこで、リンカがグローバル変数や関数の呼び出し参照を結合する。
リンキングが失敗した際のエラー(リンキングエラー)が発生した場合のエラーメッセージはLNK~
エントリーポイント(main関数)
名前はmainでなくても良いが、一般的にmainとされている。
特殊な関数で、戻り値がint型であるが、returnしなくても良い。