1.C言語初心者(day 1)

2706 ワード

一、初めてC言語を勉強する
(1)C言語とアセンブリ言語の関係?
プログラマが作成したC言語コードは、まずC言語コンパイラを経てアセンブリコードを生成し、このプロセスをコンパイルステップと呼び、C言語コンパイラがアセンブリコードを生成した後、アセンブリを呼び出してアセンブリコードをアセンブリ命令にコンパイルする.これは巨人の肩に立つやり方で、最初のC++プログラミング言語もこのような実現方法で、ただその時Cfrontプログラムと呼ばれて、Cfrontプログラムの作用はC++コードをC言語コードに変換して、1つのテキストプロセッサに似て、それからC言語コンパイラを呼び出して、Cソースコードをアセンブリコードにコンパイルして、次に、アセンブリを呼び出してアセンブリコードをマシンコードにコンパイルします.このプロセスは,Windowsプラットフォームでは容易に操作できないが,Linuxプラットフォームでは容易に見ることができる.gccというc言語コンパイラを例にとると、実際には4つの小さなプログラムです.cp:c言語プリプロセッサで、プリプロセッサ操作を担当します.cc:CソースコードをアセンブリコードにコンパイルするC言語コンパイラ.as:アセンブリは、アセンブリコードをマシンコードにコンパイルする責任を負い、一般的にgcc testを使用する.cのようなコマンドがC言語をコンパイルすると、実際にはas ouput、すなわちアセンブリ出力ファイルを指すa.outのプログラムが生成されます.link:コンパイラが入力したマシンコードとライブラリをオペレーティングシステムで実行可能な実行可能ファイルにパッケージ化し、Linux上の実行可能ファイルフォーマットはELFフォーマットであり、このフォーマットの実現はリンクが完成している.
プロセス:前処理操作——Cソースコードをアセンブリコードにコンパイルする——アセンブリを使用してアセンブリコードをマシンコードにコンパイルする——リンク
(2)異なるCPUに対してその機器指令は異なる?CPUによってアセンブリ言語が異なりますか?
各コンピュータ会社が設計生産したコンピュータは、その命令の数と機能、命令フォーマット、アドレス方式、データフォーマットに差があり、算術論理演算命令、転送命令など、よく使われる基本命令でもそれぞれ異なる.したがって,各種モデルのコンピュータの高度言語は基本的に同じであるが,高度言語プログラム(例えばFortran言語プログラム)を機械言語にコンパイルすると,その差も大きい.したがって,マシン言語で表されるプログラムを他のマシンに移植することはほとんど不可能である.まとめ:CPUによって、異なるマシン言語があるに違いない.**だから**アセンブリ言語**が現れました:アセンブリ言語はすべてCPUの設計構造と一致して、機械コードと一つ一つ対応して、異なるCPU構造は千差万別で、同じメーカーの異なる段階あるいはシリーズのCPUが使うアセンブリはすべて異なって、異なる桁数のCPUのアセンブリは異なっています.32ビットのX 86アセンブリと32ビットのSPARC V 8アセンブリは異なり、後者は簡略命令システム(RISC)であり、前者はCISCである.ただし、基本的なものは同じです.アドレス、基本命令(命令のスペルが異なる場合があります).**まとめ:つまり、異なる機械が独自のアセンブリ言語に対応している.**したがって、高度な言語**が現れ、高度な言語コードを:解釈器/コンパイラを介して高度な言語で書かれたプログラムを機械命令に変換してから実行することができます.△従って、異なる機器に対して異なる機器命令に変換することができるので、高度な言語で書かれたプログラムは、一度作成すれば、任意の機器で実行することができる.
(3)main()関数
コンピュータ上でコンパイル後のプログラムを実行するとき、オペレーティングシステムはエントリ関数(main()関数)を呼び出し、実行と同時にプログラムにデータ(変数)を渡すことができます.
(4)returnキーワード
役割:return文は、関数から返され、関数の実行が終了することを示します.
(5)コード例:
int mian()
{
	return 0;
}

//「int main()」は整数を返します.(main関数はオペレーティングシステムに0を返し、エラーがないことを示し、0でない場合は何らかのエラーを示す)
(6)printf関数C言語(標準ライブラリ)は、画面に出力情報を印刷するためのprintf関数を提供する.
#include 
int main
{
	printf("hello world");
	return 0;
}

//標準入出力ヘッダファイル「stdio.h」にprintf関数が宣言されているため、前処理「#include」でファイルを含める必要があります.//プリプロセッサ(ソースファイルをコンパイルする場合、システムは自動的にプリプロセッサを参照してソースプログラムのプリプロセッサ部分を処理し、処理が完了すると自動的にソースプログラムのコンパイルに入る.プリプロセッサはプリコンパイルとも呼ばれ、コンパイラはコンパイラ/プロセッサを含む):ソースコードのプリプロセッサ命令を処理し、新しいソースコードを得る.プロセス:前処理命令を含むソースコード-プリプロセッサを介して「前処理命令のないソースコード」に変換-コンパイラ/解釈器を介してマシン命令コードに変換(01010101)
C言語の3つの前処理:
統合開発環境では、コンパイル、リンクが同時に完了します.実は、C言語コンパイラはソースコードをコンパイルする前に、さらに処理する必要があります:プリコンパイル.プリコンパイルの主な役割は、1、ソースファイルに「include」形式で含まれているファイルをコンパイルされたソースファイルにコピーすることです.2、「#define」で定義した文字列を実際の値で置換します.3、「if」の後の条件によりコンパイルするコードを決定する.