C語言學習(六)GCC

2022-03-30 09:07:43 字數 1463 閱讀 3672

gcc對程式的編譯過程

解釋:目標檔案:指經過編譯器編譯生成的cpu可識別的二進位制**,一般不能執行

編譯過程:

預編譯:將源程式.c中引用的標頭檔案包含進原始碼中,並對一些巨集進行替換

編譯過程:將使用者可識別的語言翻譯成處理器可識別的操作碼,生成目標檔案.o,通常會翻譯成彙編

【目標檔案通常僅解析了檔案內部的變數和函式,對於引用的變數和函式沒有解析,這需要將其他已經編好的目標檔案引進來將沒有解析的變數和函式進行解析,通常引用的目標是庫】

2.1單個檔案編譯成可執行檔案  

1.不指定可執行檔名

gcc hello.c #gcc預設生成可執行檔案為a.out

./a.out #執行

2.指定可執行檔名

gcc -o test hello.c #生成可執行檔案test

./test #執行

2.2 編譯生成目標檔案 

1.不指定生成目標檔名,則生成與源檔名相同
gcc -c hello.c

2.指定生成目標檔名
gcc -c -o test.o hello.c

3.一條命令編譯多個原始檔,生成多個目標檔案
gcc -c file1.c file2.c

2.3 多檔案編譯

string.c
#define tt '\0'

int strlen(char *string

)

main.c
#include extern

int strlen(char*str);

int main(void

)

1.直接生成可執行檔案
gcc -o test main.c string

.c./test

2.先生成目標檔案,再鏈結
gcc -c main.c string

.cgcc -o test main.o string.o

3.預處理
gcc -e string.c  #將string.c檔案預處理結果顯示在螢幕上(將巨集定義已經替換)

# 1

"string.c"#

1""#

1"/usr/include/stdc-predef.h"1

34# 1

""2#

1"string.c

"int strlen(char *string

)

4.生成預處理檔案
gcc -o string.i -e string.c  #string.i檔案內容如上

C語言學習 六 迴圈

while迴圈 for迴圈 do while迴圈 在迴圈主體結尾測試條件,和while很類似 巢狀迴圈 break語句 終止迴圈或switch語句,程式流將繼續執行緊接著迴圈或switch的下一條語句 continue語句 告訴乙個迴圈體立刻停止本次迴圈迭代,重新開始下次迴圈迭代 include i...

C語言學習(六) 記憶體分配

1.儲存器 常用的儲存器型別如下 2.記憶體分配 參考鏈結 2.1 記憶體分配機制 1 棧 stack 位於函式內的區域性變數 包括函式實參 由編譯器負責分配釋放,函式結束,棧變數失效。2 堆 heap 由程式設計師用malloc calloc realloc分配,free釋放。如果程式設計師忘記f...

iOS開發學習筆記 C語言學習(六)

在現實生活中,總有些固定的值是不會變的。例 固定的值 再比如 在計算圓的面積的時候,很多時候圓的半徑是不知道的,圓的面積也是隨著圓的半徑的變化而不斷變化的。然而,計算過程中卻有唯一的乙個永遠不變的值,那就是圓周率,也稱之為 其值為3.1415926 在生活中我們有這種永遠固定的值,他們在程式中,就叫...