<一>.vim
一.vim有主要有三種模式:命令模式、插入模式、底行模式
1.命令模式(command mode)
控制光標的移動、字符、字或行的刪除,移動複製某段進入Insert mode下,或者lastline mode。
2.插入模式(Insert mode)
只有在Insert mode下,纔可以做文字輸入,按【Esc】鍵可回到命令行模式
3.底行模式(lastline mode)
將文件保存(:w)或者退出(:q),也可以設計編輯環境,如尋找字符串,列出行號等等
二、基本操作
1.vim test.c
若直接touch一個test.c則vim打開即可以編輯,若test.c不存在執行此命令則會創建並
打開。進入vim後,是處於[命令號模式],需要切換到[插入模式]纔可以輸入程序。
在[命令模式]下按字符 i 或者 a 即可以進入[插入模式]。插入模式下可以輸入文字或
者刪除需要刪除的內容.
【Esc】可以切換至[命令行模式]
要退出vim或者保存文件,在[命令行模式]下按 : 冒號進入[底行模式]
:w (保存當前文件)
:wq (保存並退出)
:q! (強制退出vim)
2.命令功能鍵
a.插入模式
按 i 進入插入模式,此時是從光標當前位置開始輸入文件
按 a 進入插入模式,從光標所在的位置的下一個位置開始輸入文字
按 o 進入插入模式,是插入新的一行,並從首行開始輸入文字
b.命令行模式
按 gg 光標移動到文章的最開始
按 GG 光標移動到文章的最末
按 ^ 光標移動到所在行的行首
按 w 光標跳到下個單詞的開頭
按 e 光標跳到下個字的字尾
按 b 光標回到上個字的開頭
按 x 每按一次,刪除光標所在位置的一個字符
按 #x 6x表示刪除光標所在位置的後面(包括自己在內)的6個字符
按 X 每按一次,刪除光標所在位置的前面的一個字符
按 dd 刪除光標所在行
按 #dd 例如6dd表示從光標所在行開始刪除#行
yw 將光標所在之處到字尾的字符複製到緩衝區
#yw 複製#個字到緩衝區
yy 複製光標所在行到緩衝區
#yy 複製從光標所在行往下數#行
p 粘貼到光標所在位置
R 替換光標所在處的字符,直到按【Esc】退出replace模式
u 撤銷上一次操作,可以執行多次回覆
cw 更改光標所處的字到字尾處
ctrl g列出光標所在行行號
#G 15G表示移動光標到文章的第15行行首
h(左)j(下)k(上)l(右)
^(光標移至行首)
G 光標移至文章最後
$ 光標移至行尾
c.底行模式
:set nu 在文件的每一行前面列出行號
:# 輸入一個數字再按回車跳到改行
:/關鍵字 先按 / 再輸入您想尋找的字符,如果第一次找的關鍵字不是想要的,就按
n 即可以找到
:?關鍵字 同上
<二>.gcc/g++
一、編譯過程
1.預處理:(gcc -E 預處理結束後停止)
gcc -E test.c -o test.i
預處理包括宏替換、刪除註釋、條件編譯、頭文件展開
2.編譯:生成彙編
gcc -S test.i -o test.s
gcc首先要檢查代碼的規範性,是否有語法錯誤等,檢查無誤後,gcc把代碼翻譯成彙編語言
3.彙編:生成機器可識別代碼
gcc -c test.s -o test.o
-c將彙編代碼轉化爲.o的二進制目標代碼
4.連接:生成可執行文件或庫文件
鏈接全局變量和函數。
gcc test.o -o test
函數庫一般分爲靜態庫和動態庫,靜態庫是編譯連接時,把文件的代碼全加入到可執行
文件中,因此生成的文件比較大,但運行時就不需要庫文件了;動態庫與靜態相反,編譯連
接時沒有把代碼加入,而是在運行時運行連接文件加載庫,這樣就可以節省系統開銷
5.gcc也可以直接由test.c成爲可執行文件
gcc -o test tes.c
二、編譯選項分析
-E 只激活預處理,不生成文件,我們需要把它重新定向到一個輸出文件裏面
-S 編譯到彙編語言不進行彙編和連接
-c 編譯到目標文件
-o 輸出到文件
-static 禁止使用動態庫,所以編譯出來的東西一般比較大
-share 儘量使用動態庫,所以生成的文件比較小,需要系統調用動態庫
-w 不生成任何警告
-Wall 生成所有警告信息
-g 生成調試信息
<三>.gdb(Linux調試器)
gdb是Linux下的代碼調試工具,在使用時需要在源代碼生成時加上-g選項。退出調試ctrl+d或者quit
一、調試過程
r/run 運行程序
s/step 進入函數調用
b/breaktrace 查看各級函數調用及參數
info break 查看斷點信息
finish 執行到當前函數返回,然後停下來等待命令
break行號 在某一行設置斷點
break函數名 在某函數開頭設置斷點
continue/c 從當前位置開始連續而非單步執行程序
run/r 從開始連續而非單步執行程序
delete breakpoints 刪除所有斷點
delete breakpoints n 刪除行號爲n的斷點
disable breakpoints 警用斷點
enable breakpoints 啓用斷點
p 變量 打印變量值
display 變量名 動態顯示每次停下來變量的值
undisplay 取消先前設置的那些變量的跟蹤
until行號 跳至行號
n/next 單步執行
<四>.ctags(Linux代碼查看)
ctags -R 在當前目錄下建立索引
ctrl+] 跳轉到函數或變量定義處
ctrl+T 跳轉至上級
<五>.Makefile
一個工程中的源文件很多,按其類型、功能、模塊分別放在若干個目錄中,Makefile定義了一系列的規則來指哪些文件需要先編譯,哪些文件後編譯,哪些文件需要重新編譯,或者一些複雜的操作。Makefile帶來的好處就是——實現自動化編譯,一旦寫好,只需要一個make命令,整個工程自動化編譯,極大的提高了軟件開發的效率。
make是一個命令工具,是一個解釋makefile中指令的工具,make執行命令時,需要一個makefile文件,告訴make怎麼去編譯與鏈接程序
makefile 是一個文件(描述了一個工程如何編譯等)
依賴關係&依賴方法
依賴方法(緊挨依賴關係 以tab開頭)
1.make一個文件
touch Makefile//建立一個文件
vim Makefile//進入makefile
{//進入vim
test:test.o(依賴關係)(若發現test.o不存在,繼續向下尋找test.o的依賴關係)
gcc -o test test.o(依賴方法)
test.o:test.s
gcc -c test,s -o test.o
test.c:test.i
gcc -S test.i test.s
test.o:test.c
gcc -E test.c -o test.i(依次生成)
}
或者可以直接
test:test.c
gcc -o test test.c
退出makefile文件後
make (執行makefile裏的命令)
./test (運行可執行命令)
在makefile文件裏可以寫清理工程(一般放到最後)
{
.PHONY:clean(PHONY指明僞目標)(目標文件有具體依賴列表,僞目沒有具體依賴列表,
標期待使用依賴方法)
clean:
rm -f test,o test.c test.i(在前面加@就可以屏蔽相關細節)
}
保存並退出makefile後執行clean就可以了刪除相關文件
make clean
<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
void proc()
{
<span style="white-space:pre"> </span>int count=0;
<span style="white-space:pre"> </span>char buf[102];
<span style="white-space:pre"> </span>memset(buf,'\0',sizeof(buf));
<span style="white-space:pre"> </span>const char*lable="|\-\\";
<span style="white-space:pre"> </span>while(count<=100)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>buf[count]='#';
<span style="white-space:pre"> </span>printf("[%-100s][%d%%][%c]\r",buf,count++,lable[count%4]);
<span style="white-space:pre"> </span>fflush(stdout);
<span style="white-space:pre"> </span>usleep(10000);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>printf("\n");
}</span>