1. 程式人生 > >編寫一個簡單的C程式

編寫一個簡單的C程式

程式程式碼

 其實與其他語言編寫的程式相比,C程式較少要求“形式化的東西”,一個完整的c程式可以只有幾行程式碼,下面寫一個最簡單的程式碼列印Hello World。如果剛開始不會用虛擬機器的話,自己看我的上一篇部落格,然後安裝好環境以後可以自己去百度一下怎麼用的,我們用的是vim編輯器和gcc編譯器。可能以後如果自己研究Linux的話會補充進去的。

#include<stdio.h>
int main(int argc, const char *argv[])
{
	printf("Hello World\n");
	return 0;
}

執行結果
在這裡插入圖片描述
 以後還是會對這段程式進行詳細的說明的,這裡只是簡單的介紹一下。
 程式的第一行
#include <stdio.h>
 這個是不能缺少的,因為這裡面有關於c語言標準輸入/輸出庫的資訊

、程式的可執行程式碼都在main函式中,這個函式代表主程式。printf函式來自標準輸入/輸出庫,可以產生完美的格式化輸出。程式碼\n告訴Printf函式執行完訊息顯示後要進行換行操作。
 return 0
 這個標識程式終止時會向作業系統返回值0;

編譯和連結

 因為這個用到的是Gcc編譯器,雖然這個.C十分簡短,但是為了執行這個程式而包含的內容可能比想象的要多。
Gcc的編譯流程分為了四個步驟
1.預處理;生成預編譯檔案(.檔案)
Gcc -E hello.c -o hello.i
2.編譯:生成彙編程式碼(.檔案)
Gcc -S hello.i -o hello.s
3.彙編:生成目標檔案(.o檔案)
Gcc –c hello.s –o hello.o
4.連結:生成可執行檔案:
Gcc hello.o –o hello
在編譯成功之後,就進入了連結階段。但是這裡有一個重要的概念就是函式庫。

 因為在這個程式裡面我們呼叫了printf函式,但是沒有看待printf的實現,而且函式的宣告只是被包含在Stdio.h裡面,一般我們用帶一個函式不光需要他的宣告也需要他的實現,但是這裡只是有了宣告,但實現我們沒有看到,難道我們用錯了嗎?答案肯定是否定的,因為系統會把這些函式的實現都被做到名為lib.c的庫檔案中去了,再沒有特別指定時,Gcc會到系統預設路徑“/usr/lib/”下進行查詢,也就是連結到libc.so.6庫函式中去,這樣就能實現函式”printf”了,而這也就是連結的作用。
 函式庫一般分為靜態庫和動態庫兩種。靜態庫是指編譯連結時,把庫檔案的程式碼全部加入到可執行檔案中,因此生成的檔案比較大,但在執行時也就不再需要庫檔案了。其後綴名一般為”.a”。動態庫與之相反,在編譯連結時並沒有把庫檔案的程式碼加入到可執行檔案中,而是在程式執行時由執行時連結檔案載入庫,這樣可以節省系統的開銷。動態庫一般字尾名為”.so”,如前面所述的libc.so.6就是動態庫。Gcc在編譯時預設使用動態庫。
整個過程如果想一步到位:
gcc hello.c -o hello
即可