1. 程式人生 > >c語言查缺補漏-2.md

c語言查缺補漏-2.md

C語言查缺補漏(二)

忽略點二:使用IED而忽略最基礎的命令

大一開始使用CodeBlocks來寫C語言程式,後來用VS,再後來Xcode。最近才發現一個問題,自己竟然不會使用終端編譯執行.C檔案。這種最基本的東西,很遺憾在這兩年學習中被我無情的忽略了。

​ 第一步: cd到.c檔案所在目錄

$ cd 路徑地址		

​ 第二步:編譯原始檔並生成可執行程式碼檔案,舉個例子

$ gcc main.c	//編譯main.c檔案,生成可執行檔案(預設名a.out)	
$ gcc -o program main.c	  //main.c為原始檔,program為生成的可執行檔案

關於預設生成的a.out,它是臨時性的可執行檔案。如果同一路徑下多個c語言原始檔採用了預設編譯,a.out中輸出的內容為最後一個C語言原始檔所執行的結果(也就是說之前原始檔編譯生成的a.out被覆蓋掉了)

這時候就體現了 gcc -o 的-o的作用 它可以指定生成輸出檔案

以下到第三步之前是附加內容(除此之外

選項 -E 可以將test.c預處理輸出(其中-E的功能是預處理test.c並輸出到終端,不生成檔案)

$ gcc -E test.c -o test.i
$ gcc -E test.c > test.i        //其中>為重定向符

選項 -S 可以將test.c彙編成test.s檔案(也就是從原始檔->彙編程式碼)

$ gcc -S  -o test.s test.c 
$ gcc -S test.c (簡寫 效果一樣)
$ gcc -S test.c > test.s

選項 -c 可將test.c編譯輸出到test.o檔案 (編譯過程中的中間檔案)

$ gcc -c  -o test.o test.c 
$ gcc -c test.c (簡寫 效果一樣)

其中: .i檔案是進行預編譯之後生成的檔案,一般是引用標頭檔案的內容和一些巨集定義

​ .s檔案是組合語言原始檔,一般是 .c 檔案經過彙編器處理後的輸出

​ .o檔案程式編譯中的目標檔案(注意是編譯中,不是最終!)裡面包含了各個函式的入口標記與描述,程式執行還需要連結(link).連結就是把多個.o檔案鏈成一個可執行檔案。)

​ 第三步:執行可執行檔案

$ ./program

以上就是用命令列實現C語言的編譯執行的全過程

對於專案(多檔案),我們無法單個的編譯執行,這時候我們應該怎麼辦呢?

​ 第一步: 分別用-c命令編譯每個.c檔案(包括main函式檔案)

$ gcc -c xxx.c

我們會得到每個xxx.c檔案的目標檔案xxx.o

​ 第二步:將主程式的目的碼與他們連結在一起

​ 例如下面命令是將專案的所有目的碼xxx.o與main.o連結在一起,並輸出了可執行檔案program

$ gcc main.o xxx.o xxx.o xxx.o -o program

這樣一個專案多檔案程式碼就可以執行啦!

如果有寫的不對或者不全面的地方 請指正! 謝謝~