我第一個C程序 frist.c

我第一個C程序 frist.clinux

1 #include <stdio.h>
2 
3 int main(void)
4 {
5     printf("這是第一個C程序!\n");
6     return 0;
7 }

1、程序解釋 windows

第一行#include <stdio.h> 這是一個預處理命令行函數

include是一個預處理命令,意思是包含一個文件到當前文件優化

預處理命令行都是以"#"開頭spa

<stdio.h> 指的standard input output 標準的輸入輸入操作系統

".h"指頭文件(header files)主要包含函數的聲明,宏定義等,這個文件主要包含如下輸入輸出的函數命令行

<>指在系統路徑下查找這個文件,也能夠替換爲"stdio.h",指先在用戶目錄查找,而後再在系統目錄查找這個文件3d

第二行空白行,爲分割主要代碼和前面的預處理,使代碼看着更有組織code

第三行int main(void) 這是C的主函數是函數的首部,全部C程序都是從這個函數開始執行,並且每一個程序有且只能有一個main的定義。int 表示main函數的返回值是int(整型),void說明這個main函數沒有參數。一個函數能夠沒有參數可是後面的"()"小括號不能省略。blog

第三行和第七行一對花括號 "{}"這個表示函數體,其中的內容爲函數實現代碼部分

第四行 printf("這是第一個C程序!\n"); 這句意思是調用printf函數在標準輸出設備(屏幕)上輸出"這是第一個C程序!\n"這句話,最後的\n意思是回車,輸出會換行。

第六行 return 0;主函數返回一個0.主函數通常有操做系統調用執行,返回給操做系統一個0表示程序成功執行完成。

2、預處理

    編譯前預處理程序根據預處理命令對C源代碼作一個初步處理,主要有宏替換、條件編譯和文件包含。
windows平臺下能夠使用VC的編譯器程序cl(直接使用cl命令須要在環境變量中添加cl路徑),在命令行下輸入 cl /P first.c 會成一個first.i文件,這個就是預處理後的文件。打開這文件在最後會發現咱們的代碼,這int main(void)以前多出不少代碼。主要就是把stdio.h這文件包含了進來。

linux下使用 gcc -E first.c -o first.i 命令能夠查看預測到first.i中的結果。也是多了不少代碼,可是明顯和windows下的不同,這說明不一樣的預處理程序處理的結果是不一樣的,除了包含stdio.h這個文件外還會添加本身的一些東西。

3、編譯

將源代碼轉爲彙編語言,優化也在這一階段處理。優化選項可查看程序幫助。

Windows cl /FA first.c 會生成 first.asmfirst.objfirst.exe,其中first.asm是編譯後生成的彙編代碼。Cl命令在這一步一次完成了編譯、彙編和鏈接,貌似沒有單獨編譯爲彙編的命令。

Linux gcc -S first.i 會生成 first.s這個彙編文件。查看first.asm first.s他們是不一樣的。不一樣的編譯程序和不一樣的平臺生成的彙編代碼是不相同的。

4、彙編

    將彙編代碼轉換爲機器的二進制語言。在上一步中直接進行了彙編和鏈接過程。

Linuxgcc -c first.s 則能夠生成二進制first.o文件。

5、連接

將生成的目標文件,經過link程序連接生成平臺可執行文件。Linux上的可執行文件在windows上是不能執行的,反之亦然。可執行文件是由他的文件結構和權限決定其是否可以執行。而不是由於他的擴展名是exe。鏈接過程須要不少文件庫文件,不一樣平臺也不一樣。Linux使用ld程序,windows使用link程序。具體使用請查看ldlink程序說明。

6、執行

    執行生成的可執行,在屏幕上輸出"這是第一個C程序!"

 

7、其餘說明

gcc cl生成可執行文件,這個過程並非單一的gcccl完成,而是由多個程序完成的。每一個階段都有相應的處理程序。

gcccl編譯器有不少選項,能夠查看其手冊。

相關文章
相關標籤/搜索