Linux下的C語言入門(以ubuntu為例)
- 一、編輯器vi(vim)
- 二、編譯命令
- 三、使用gdb除錯代碼
- 四、多檔案編譯及makefile的使用
- 五、拓展知識
- 1.main()的真實寫法應為:
- 2.main函式中的return值代表該運行的成功與否
- 3.兩條命令之間可以用``&&``來連接
- 4.linux將所有的資源或設備均看作一個檔案
- 5.重定向
- 6.管道
- 7.作業系統對記憶體的管理
一、編輯器vi(vim)
vi是最常用的文本編輯器,我們可以使用它來撰寫C語言代碼,
vi hello.c //編輯一個名為hello.c的檔案
進入vi編輯器后,有兩種模式:命令模式、插入模式,
一進來就時命令模式,輸入i在當前游標處開始插入字符,可以用上下左右箭頭控制輸入,摁esc鍵可回到命令模式,下面介紹命令模式下幾種常用的命令:
3 dd //將游標所在行往下共3行代碼剪切
3 yy //將游標所在行往下共3行代碼復制
p //粘貼
:set nu //顯示行號
:sp filename //新建一個檔案并打開編輯視窗
:wq //保存并退出
:q //退出
:q! //強制退出
二、編譯命令
//將hello.c編譯,編譯輸出檔案名為hello.out
gcc hello.c -o hello.out
編譯完成后,就可以運行hello.out檔案:
./hello.out

三、使用gdb除錯代碼
注意要使用gdb來除錯代碼,在我們編譯的時候,編譯命令要多加一個引數-g,格式如下:
gcc hello.c -o hello.out -g
然后就可以對程式除錯了:
gdb hello.out
然后進入到除錯環境(gdb),我們下面介紹一些基本的除錯命令:
l //顯示源代碼
start //開始除錯,可以運行到下一個斷點
break 6 //在第六行添加一個斷點
break max //在函式max的起始位置添加斷點
info break //顯示所有斷點
delete numofBreak //洗掉編號為numofBreak的斷點
n //執行一行陳述句,注意不進入函式內部
s //執行一行陳述句,遇到函式會進入函式內部
finish //執行完當前函式
p a //查看變數a的值
p &a //查看變數a的地址
bt //查看函式堆疊,可以看到函式序號
f 1 //切換到序號為的1的函式
q //退出gdb除錯
四、多檔案編譯及makefile的使用
命令格式:
gcc hello1.c hello2.c hello12.c -o hello.out -g
在hello1.c,hello2.c,hello12.c里的函式可以相互呼叫,當我們的源檔案有很多很多時,每次都手動輸入這些命令麻煩且容易出錯,因此我們要使用make工具來管理這些編譯命令,以達到快捷編譯的效果,
使用方式:新建一個makefile檔案,然后在里面撰寫內容:
/*格式:
* outputfilename:file1 file2 file3
* |<- tab->| gcc file1 file2 file3 -o outputfilename -g
*解釋:
* 第一行是代表編譯生成outputfilename檔案所需要那些檔案
* 第二行是編譯命令,注意其前面一定要有一個tab
*注意:
* 在第一行中如果存在非.c的檔案,
* 需要下面按著格式寫明該檔案的編譯
*/
hello.out:hello1.o hello2.o hello12.c
gcc hello1.o hello2.o hello12.c -o hello.out -g
hello1.o:hello1.c
gcc hello1.c -o hello1.o -g
hello2.0:hello2.c
gcc hello2.c -o hello2.o -g
當makefile檔案撰寫保存好之后,只需輸入make命令就可快捷地進行編譯,
五、拓展知識
linux下的命令也是一個個C語言的小程式,執行命令時會呼叫相應的程式
1.main()的真實寫法應為:
/*
* argv代表argc陣列的長度,argc里面存盤的是終端輸入的命令,
* 每一個空格即增加一個長度,比如命令ls -l,該命令就會
* 存入argc陣列中,而argv為2
*/
int main(int argv,char* argc[])
2.main函式中的return值代表該運行的成功與否
return 0;//運行正常
return 110;//回傳110號錯誤
3.兩條命令之間可以用&&來連接
第二條命令則僅在第一條命令執行成功的情況下執行,
4.linux將所有的資源或設備均看作一個檔案
比如標準輸出輸入流、錯誤流分別對應stdout、stdin、stderr三個檔案,C語言中一旦引入stdio庫就引入這三個檔案,
//printf("please input");
fprintf(stdout,"please input");
fscanf(stdin,"%d",&a);
fprintf(stderr,"errormessage");
/*
* 注意上面的代碼中的stdout,stdin,stderr
* 可以用任何其他檔案替代
*/
5.重定向
./a.out 1>> a.txt
上面的命令可以將a.out的正確的輸出流stdout里的內容輸出到a.txt中,>>是追加形式,>是覆寫的形式
./a.out < input.txt
從input.txt中讀取輸入流
./a.out 1> a.txt 2> b.txt <input.txt
表示正確的輸出流輸出到a.txt,錯誤的輸出流輸出到b.txt,并從input.txt中讀取輸入流
6.管道
ls /etc/ |grep ab
命令的意思是將ls /etc/命令的輸出當作grep ab命令的輸入,這樣就可以列出/etc/目錄下所有包含ab的檔案或目錄
ps -e | grep ssh
ps是列出當前運行的行程,上述命令即為列出包含ssh的內容
7.作業系統對記憶體的管理

注意:其中堆疊底是高地址,堆疊頂是低地址,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236684.html
標籤:其他
