Third Week :Linux下的C语言
Linux下的C語言
- 1. 搭建C語言開發環境/運行環境
- 1. 文本編輯
- 2. 編譯器
- 3. 頭文件和系統預裝文件
- 4. make 工具
- 5. echo
- 2. 標準輸入流/輸出流/錯誤流
- 1. 重定向機制
- 2. 管道
- 3.GDB調試工具的使用以及內存
- 1. GDB 調試工具的使用
- 2. 內存
- 4. 指針
1. 搭建C語言開發環境/運行環境
1. 文本編輯
Linux下文本編輯器常用emacs和vim,由于本人常用vim,因此暫時只講述vim的用法,vim需要自行安裝。
#安裝命令 sudo apt-get update #將系統內所有資源更新為最新版本 sudo apt-get install vimvim的使用是一門深奧的學問,將vim使用好是現階段的目標,讓我們一起來看一下吧!
#vim編輯器的使用 vim **.c #進入某個文件 #進入后為命令模式,需要按英文輸入模式下的i進入插入模式,才能夠編輯文檔 #如果想要退出編輯模式,按esc鍵回到命令模式,shift+:進入輸入命令模式,w表示保存,q表示退出,通常情況下wq一起使用 #一些小快捷鍵 I 當前光標前 a 當前光標后面插入 shift + a / A 行位插入 shift +i / I 行首插入 o 下一行插入 shift + o / O 上一行插入 x 刪除光標所在位置的 dd 整行刪除 number + dd 剪切當前光標下面的number行,放到粘貼板上 p 粘貼 set nu 顯示行號當我們想要編輯多個文件的時候怎么辦呢?— 多個源文件分而治之
命令模式下: sp 文件名.c ctrl + w + 上箭頭 進入上面的代碼塊 ctrl + w + 下箭頭 進入下面的代碼塊 wqa 所有文件都保存并退出2. 編譯器
Linux下C語言編譯器常使用cc或者gcc,一般的Linux系統已經為我們安裝好了,可以通過命令進行查看。
#查看cc和gcc版本信息cc -vgcc -v#編譯命令cc / gcc **.c參數:-c **.c -o ***.out 編譯后的文件名#執行命令./***.out3. 頭文件和系統預裝文件
<> 這樣文件導入,表示為系統預裝文件
“” 這樣導入的文件表示是在當前路徑下的文件
頭文件的作用:不會在修改的函數 公共框架/公共類 打包做成一個靜態庫,提前編譯好,因為編譯后就無法看到源代碼了,可以寫成頭文件,便于其他人使用
例如:max的頭文件max.h
int max(int a , int b);
4. make 工具
make工具可以將大型的開發項目分成若干個模塊,可以清晰和快捷的整理源文件,內部使用gcc
#檢查make版本信息 make -vmakefile 文件 每次只需要修改該文件即可
結構:
5. echo
gcc main.c -o main.out && ./main.out
&& 符號表示前面表達式返回0后面語句才能夠執行
echo $? 輸出0表示程序運行成功,其他表示失敗
2. 標準輸入流/輸出流/錯誤流
printf,scanf底層源碼:
fprintf(stdout,"please input the value a:\n");int a;/*scanf("%d",&a);*/fscanf(stdin,"%d",&a);if(a<0){fprintf(stderr,"the value must > 0\n");return 1;}1. 重定向機制
“>>” 輸出流重定向到某個文件,追加 不是覆蓋
“>” 覆蓋
“<” 輸入重定向
2. 管道
“ | ” 將前部分輸出傳入到后半部分代碼中
3.GDB調試工具的使用以及內存
1. GDB 調試工具的使用
注:gcc -g 編譯的才能夠進行調試
gdb 文件名.out start 開始調試 l 列出源代碼 n 繼續執行 p 變量名 顯示變量值 bt 查看函數堆棧 s 進入函數執行的內部2. 內存
32位的系統最大只支持4g的內存,2^32 只有32條地址總線
64位的系統最大支持2^64的內存
(1) 系統內存分配示意圖
(2) 程序的內存映像
1)堆:用于存放函數參數值,函數返回地址,非靜態局部變量的值。
2)棧:由程序員分配釋放,如果程序員不釋放,程序結束后由os回收
3)全局區(靜態區):全局變量和靜態變量存儲在此處,初始化的放在一塊區域,未初始化的放在相鄰的另一塊區域BSS。
4)數據段:常量字符串放在這個區域。
5)代碼段:存放函數體的二進制代碼。
字節順序是指占內存多于一個字節類型的數據在內存中的存放順序,通常有小端、大端兩種字節順序。小端字節序指低字節數據存放在內存低地址處(由右向左),高字節數據存放在內存高地址處;大端字節序是高字節數據存放在低地址處,低字節數據存放在高地址處(由左向右)。
4. 指針
(1)* 和 & 區別
*是一個特殊符號,表明一個變量是指針變量,定義 p1、p2 時必須帶*。而給 p1、p2 賦值時,因為已經知道了它是一個指針變量,就沒必要多此一舉再帶上*,后邊可以像使用普通變量一樣來使用指針變量。也就是說,定義指針變量時必須帶*,給指針變量賦值時不能帶。
(2)* 不同場景下的使用
*在不同的場景下有不同的作用:可以用在指針變量的定義中,表明這是一個指針變量,以和普通變量區分開;使用指針變量時在前面加表示獲取指針指向的數據,或者說表示的是指針指向的數據本身。
(3) 數組指針
http://c.biancheng.net/view/1993.html
(4) 函數指針:(*函數名)(參數的類型 參數)
int (*pquadrate) (int a) = &quadrate;
Array數組其實是一種指針常量,而p則是一種指針變量(數組和指針有一定的通用性,又有一定的差別,指針可以表達數組,而數組不可以表達指針);
p++:指針偏移,運行效率比數組高;
(5) 指針運算,遍歷
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Third Week :Linux下的C语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Second Week: Git与Git
- 下一篇: Forth Week :快速上手一门编程