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...