11 10週六筆記

2021-08-31 11:54:20 字數 2725 閱讀 1350

linux開發工具

1.編譯器gcc(查語法錯誤)

2.偵錯程式gdb(查功能錯誤)

3.工程管理器make(效率高、智慧型)

4.指令碼shell(指令碼檔案不用編譯可直接執行)

linux是不區分拓展名的,但vim和gcc區分

原始檔.c–>預處理–>編譯–>鏈結–>可執行

gcc是乙個交叉平台編譯器,它能夠在當前cpu平台上為多種不同體系結構的硬體平台開發軟體工程。

c語言(高階語言)–>組合語言(為c語言提供環境是低階語言)

組合語言–>c語言

書寫格式:

1.所有int定義的都必須有返回值return (int最好不要省略)

2.定義變數最好一行乙個,見名思意。

3.運算子和變數最好有1個間隔 如:a = b;但單運算子不要加 如:i++;

4.檔案的開頭要以單詞開頭,別用數字有隱患。

單行注釋// 多行注釋/* */

gcc [-wall] [-o 1 2 3] [-g] [-o name] file

-wall:開啟所有警告項

-o :設定優先級別 o0表示關閉優化功能

-o1 ,-o2,-o3,-o4表示優化, -o就是-o1。

-g: 將除錯資訊編譯到目標檔案中

-o name:指定輸出檔案的名稱是name

file:被編譯的檔案

-s:生成彙編檔案 gcc -s hello.c -o hello.asm

-o: output file name 確定生成執行檔名稱,否則自動生成a.out

-e:預處理 gcc -e hello.c (不生成檔案,直接在終端上顯示)

gcc -e hello.c -o hello.i(生成檔案)

-c 只編譯生成目標檔案 以.o為字尾的檔案

在gcc編譯中 ,-dmarco:定義marco巨集 =define

如gcc hello.c -o hello -dpi=3.1415926

-idirname:將dirname所指定的目錄加入到程式的頭檔案目錄列表中(增加乙個搜尋標頭檔案的方式)

-i- 取消搜尋方式

-ldirname:將dirname所指的目錄加入到庫檔案中的目錄列表中

-lname:指定庫名 libname.a

-lm表示名為libm.a的數學函式庫

靜態庫建立的三步驟

1.編寫源**

2.gcc -c 編譯生成目標檔案.o

3.ar+rcs+靜態庫名+目標檔案1+…+目標檔案n

rc:靜態庫不存在,就建立該庫檔案

s:實時更新庫檔案

靜態庫的使用:

gcc file.c -o file -l.(路徑) name(庫名)

動態庫的建立:

gcc -shared -fpic -o 庫名.so 原始檔.c

動態庫的使用:

gcc 原始檔.c ./庫名.so -o 可執行檔名

ar -t libname.a 顯示庫里的檔案

ar -d(有錯誤不提示) libname.a add.o 刪除

ar -dv 有錯誤會提示 ) libname.a add.o

ar -xv(複製並提醒)libname.a add.o

偵錯程式-gdb(當語法正確時,功能錯誤時進行的除錯)

三個功能:

1.啟動被除錯程式

2.讓被除錯的程式在指定的位置停住(設定斷點)

3.當程式被停住時,可以檢查程式狀態-變數值

執行下面兩步驟後便進入除錯模式(gdb)

$ gcc -g test.c -o test

$ gdb test

(gdb)除錯模式中要用除錯命令

1.編譯生成可執行檔案 gcc -g test.c -o test

2.啟動gdb gdb test

3.在main函式中設定斷點 break main

4.執行程式 run

5.單步執行 next

6.繼續執行 continue

break(b)+行號:在指定行新增斷點

break(b)+函式名:在某函式入口處新增斷點

break(b)行號 if 條件 當條件為真時,指定斷點生效

例如 b 5 if i=10 表示當i=10時 第5行斷點生效

注意的是 這裡判斷兩者相等不能用== !

delete+斷點編號 刪除斷點

break+檔名:+函式名/行號 表示在某個檔案的函式或具體某行可以設定斷點

clear 清除全部斷點 clear+行號/函式名 清楚具體的某個斷點

display+表示式(顯示表示式的結果)

printf(p) 檢視指定的變數值

c語言裡函式都是平行的 無主,子關係

next(n)單步執行程式 不進入函式入口 直接當函式當作乙個整體進行執行

step(n)單步執行程式 進入函式入口 並跟蹤執行

watch變數名對指定變數進行監控

工程管理器make(核心makefile)

makefile編寫規則:

a.需要有make工具建立的目標體(target),通常是目標檔案.o或可執行檔案(終極目標)。

b.要建立的目標所依賴的檔案;建立每個目標體時所需要執行的命令,這一行必須以製表鍵tab開頭。

例如:hello:hello.c

gcc hello.o -o hello

hello.o:hello.c

gcc -c hello.c -o hello.o

2013第48週六記

2013第48週六記 今天是11月的最後一天,早上起床去西湖繞一圈,感覺這個季節西湖確實沒有太多可看的東西,然後回來加班寫了這個季度的經驗案例,雖然知道結果可能不會太好,但還是花費了兩個多小時才寫完。我總算實現了之前的想法,寫給開發相關比較緊密的東西,類似於乙個模組粗略的詳細設計,在寫時我居然又看到...

2018 12 8 週六作業

int a int t for int i 0 ia j 1 for int x a scanner input new scanner system.in system.out.print 請輸入數字 int n input.nextint if b n else static boolean b...

第五周筆記

函式中包含yield語句的函式就是生成器函式,呼叫返回生成器物件.yield 是個表示式,可以返回值.生成器表示式 m i for i in range 10 生成器的應用 1,無限迴圈 2,計數器 3,斐波那契數列 4,生成器互動 5,協程coroutine lambda構建匿名函式 定義 lam...