プログラムコンパイルの4つの段階の再解釈

プログラムコンパイルの4つのプロセス(記録と投稿、2か月半勉強したC ++研修生の最初のブログ、エラーがある場合は、それらを上げてください)

コンパイラを使用してプログラムのセクションをコンパイルする場合、編集が終了したら、コンパイルボタンをクリックするだけで、コンパイラはプログラムのこのセクションのコンパイル結果を返します。エラーがある場合は、間違ったエラーが返されます。便利な場所とエラーメッセージプログラムをコンパイルできるように、その場所でプログラムを変更します。しかし、コンパイル時にコンパイラがどのようなプロセスであるかを絡ませたことはありませんか。私たちはプログラムのこのセクションしか知りません。コンパイルするとき、関数は4つの段階に分けられ
ます1。事前コンパイル;
2。コンパイル;
3。アセンブリ;
4。リンク;
ここに画像の説明を挿入します

		先来看一段代码:
#include<stdio.h>
int main()
{
    
    
	printf("hello c world!");
	return 0;
}

これは、ほとんどの人がITを学んでいるときに作成する最初のコードです。このコードを使用して、コードをコンパイルするコンパイラーのプロセス全体を理解しましょう。

1.事前コンパイル

C言語を作成するたびに、#include <stdio.h>などを#include <>で始まるコードに記述します。プリコンパイルの目的は、同様のコードを解釈し、同様のヘッダーファイルを処理することです。その他のマクロ定義の場合。同時に、コードコメントを作成しています。事前コンパイルにより、コードのコンパイルにとって重要ではないこれらの問題に対処できます。事前コンパイルが完了するとhello.iのソースファイルが生成されます。
コンパイル済みのルール:

  1. すべての「#define」を削除し、マクロ定義を展開します。
  2. すべての条件付きプリコンパイル済み命令を処理します:「#if」「#ifdef」「#elif」「#else」「#endif」など。
  3. すべてのメモを削除します。
  4. 行番号とファイル名IDを追加します。
  5. すべての#includeヘッダーファイル参照を処理します。
  6. すべての#pragmaコンパイラ指令を保持します

2.コンパイル

コンパイルプロセスは、主に、前処理されたファイルに対して一連の字句解析、文法解析、意味解析を実行し、アセンブリファイルコード(.O)を生成することです。文法分析を行い、文法が正しいか間違っているかを判断し、ヒントを与えます。コードの一部をコンパイルできるかどうかの運命は、この段階でほぼ完全に制御されます。関数のコンパイルプロセスは、関数の実行時にmain()関数から開始するのではなく、上から下に実行されるため、ピットに入ったばかりの人はミスを犯すことがよくあります。さあ、コードを見てください:

#include<stdio.h>
int add(int x,int y)
{
    
    	
	return max=x+y;
}

int main()
{
    
    
	int max,c;
	int a=10;
	int b=20;
	printf("%d \",add(a,b));
	return 0;
}	

Kangkangをコンパイルした結果をクリックすると、結果が表示されます。
上記プログラムのコンパイル結果
コンパイラはコンパイル時に上から下にコンパイルされるため、コンパイラはadd()関数の実行時にmaxが前のコンパイルプロセスにあったことを確認します。私はこの手順を直接殺し、死刑を宣告しました。最も重要なメインプログラムでもmaxが定義されていますが、maxの可視性はメイン関数のみにあり、add()関数には拡張されないため、プログラムはコンパイルに失敗します。(可視性の概念の導入に気づきましたか、後で戻ってきてください)

3.コンパイル

このプロセスでは、コンパイラの最も強力な機能が現れると、人間が標準に達した言語を、機械が理解できるアセンブリ言語に変換し、実際の人間とコンピュータの相互作用を実現します。また、2人のまったく異なる個人間のコミュニケーションの翻訳を完了し、コンピューターを開発者の手に渡るツールにします。

4.リンク

巨大なプロジェクトファイルの場合、機能の実現は複数の.cppファイルまたは.cファイルを介して行われます。さまざまな機能を使用してさまざまな機能を完了し、リンクプロセスを介してさまざまなモジュールを組み立てて最後のステップを完了します。以来、hello.exeファイルが生成されます。実行可能なファイルを使用でき、開発者がクリックして実行した後、コードの結果を正常に実行できます。

おすすめ

転載: blog.csdn.net/ALITAAAA/article/details/102961643