強行轉Linux,開始以為會很不適應,其實還好,換湯不換葯
本文只講基本操作,足夠讓你愉快的打代碼,想飛上天的自行百度,或找其他大神(友鏈)
Update 6/20:由於寫得太爛被學長爆踩了一頓
直接復制粘貼學長的評論(TAT我太菜啊啊啊)
1. 文本編輯器(GEdit)並不是唯一編輯代碼的工具, Linux下兩個神仙編輯器vim/emacs的coding效率都極高
2. 寫代碼一般要用等寬字體.
3. ls 列出的並不是所有文件和文件夾. 隱藏文件並不會列出, 要列出需要加參數.
4. 不帶參數調用 cd 是返回主目錄 ~ 而不是返回上一級. 返回上一級用 "cd ..", 返回上一次訪問的目錄用 "cd -".
5. Ctrl+Z根本沒有結束這個進程, 只是暫停了而已. (不信您試試打個fg上去看看能不能恢復運行) 想結束應該用 Ctrl+C. Ctrl+Z按多了后果您可以自己想象一下(逃----By rvalue
但是我還是要補(扯)兩句,一是神仙編輯器找不到也不會用,個人感覺文本編輯器比guide好用
我不會隱藏文件夾所以ls對我來說就是全部文件(人菜煩惱少)
平常我就是在主目錄或一層目錄下活動所以cd我一直是那么認為嗒不要被我誤導
gdb是某教練告訴我最好不要用的(以及某本書)
我我我我我錯錯錯錯錯了了了了了-----
【多圖預警】
首先沒有了Dev C++,曾經被嘲笑的Windows下的筆記本改個名叫文本編輯器,就成為了唯一的工具
這基本上是最終形態了。在左下角菜單里找到文本編輯器,打開它。點擊左上角“文本編輯器”的三角號。選擇首選項。
各項設定根據喜好自己調整。但是最關鍵的是插件那一項。
先把這兩項都打開,再關閉Python那一個,這時候你的文本編輯器下面可能就會出現了終端。
Terminal,或者就是中文“終端”二字。
這會方便很多。然而有的系統下文本編輯器並沒有“終端”這個插件,那么你只好從全部應用中找到終端了,所有操作都一樣。
打代碼的時候文字都是沒有顏色的,可以在右下角“純文本”那里改為選擇“C++”,關鍵字就會出現不同顏色了。
另一個處理辦法是在你打完第一行include之后就保存一下,擴展名為".cpp",然后就會自動進入C++模式了。
接下來假如你已經打完一個代碼。現在需要編譯運行。
首先,Ctrl+S保存文件,注意:起名是結尾要帶“.cpp”,否則無法編譯。以abc.cpp為例。
在終端輸入“g++ abc.cpp”即可編譯。如果沒有任何其他信息出現,則編譯成功,否則會彈出錯誤信息,和Windows下一樣。
注意:每次修改代碼都要重新(Ctrl+S)保存,重新編譯。
編譯之后你的代碼會被轉化為"a.out"的程序。在終端輸入"./a.out"即可運行。其中“./”表示當前目錄。(后文有解釋)
注意:與Windows不同,程序運行時仍然可以繼續輸入,所以一個死循環代碼會表現出Windows下讀入未完畢的性狀。
在終端下,按↑↓鍵可以瀏覽歷史指令,這樣就不用每次都輸入完整指令了。
如多數情況下我們都是編譯->運行->改代碼->編譯->運行->...,所以編譯和運行的指令按兩下↑就出來了(多調,你會熟練的)
在終端下,按Tab可以自動補全單詞,如你需要"g++ abc.cpp",那么你只需要輸入"g++ ab",然后按Tab,整條指令就會自動補全。
然而當你取了太多相同的文件名,Tab補全不知道該幫你補成那一個,那你就。。。。。。(及時刪文件,或自己手動補全)
其他可能用到的終端指令:
ls 列出當前目錄下所有文件。
其中藍色的是文件夾。
cd 文件夾名 :進入文件夾目錄。因為你的所有操作都只能在當前目錄下進行所以你得先進入文件夾再動里面的文件。
cd:返回上一級目錄。
rm 文件名:刪除指定文件
mkdir 文件夾名:建立一個文件夾
kill -9 -1:結束所有進程,相當於保存文件的重啟。用於結束崩潰的程序。(我才不會試一遍再給你截圖)
然而如果你的文本編輯器沒有死掉而你想結束目前程序,按(Ctrl+Z)即可,對!這個東西不是結束讀入,而是結束程序!
在編譯時也有些可以一用的操作。
g++ abc.cpp -o b.out --------編譯abc.cpp並且將編譯出的程序更名為b.out(默認為a.out)
g++ abc.cpp -g --------編譯並為gdb調試做准備。(最好不要用,在文末講解)
重頭戲:接下來再說一說Linux下的對拍
數據生成器,標程,錯誤代碼和它們的freopen完全不變,而對拍器有一點點變化。

1 #include<cstdio> 2 #include<cstdlib> 3 using namespace std; 4 5 int main() 6 { 7 int i; 8 for (i=1;i<=1000;i++) 9 { 10 system("./make"); 11 system("./ab1"); 12 system("./ab2"); 13 printf("%d : ",i); 14 if (system("diff ab1.out ab2.out")) 15 { 16 printf("WA\n"); 17 return 0; 18 } 19 else printf("AC\n"); 20 } 21 return 0; 22 }
只不過是運行時system函數調用時多了個“./”表示當前目錄,而文件比較的cd改成了diff而已。
diff和Windows下的fc一樣,相同為false不同為true,沒區別。
然后運行對拍器就可以了。
更棒的是不像Windows隨便輸出“正在比較”什么的一堆,Linux下除非文件不同,diff什么也不會輸出。
它只會乖乖地輸出你代碼里寫的“AC”什么的,看着奇爽。
對拍到此結束。
接下來內容,閱讀需謹慎:變態的gdb調試
為什么說最好不要看它呢?因為它太好用了,可能會讓你產生依賴,削弱你的直覺,降低你調代碼的能力。
各類比賽都支持使用,當你實在調不出來時再用。反正現在我是不敢總用它了。
該提醒的提醒完了,接下來自己珍重,我要開始講了。
gdb調試的程序編譯時需要在后面加上-g,如g++ abc.cpp -g
運行時在程序名前加上gdb 如gdb ./a.out
然后它會彈出一大堆版權之類的玩意
接下來是常用指令:
r:開始運行程序,區別於c。
b sth:設置斷點,當程序每次運行到斷點時會暫停。sth可以是數字表示第幾行,也可以是一個函數名,相當於函數聲明的第一行。
cl sth:清除斷點,和b完全相同。當只輸入cl而沒有參數時會清除第一個。
c:使暫停的程序繼續運行(到結尾或者下一個斷點),不能用於開始程序所以你仍然需要記住r。
p sth:輸出相應內容。sth可以是變量,數組(不能太大),結構體,以及vector,priority_queue,map等系統自帶的數據結構。
disp sth:和p一樣,但是disp會在程序每次暫停時輸出相應內容。我不會清楚disp,會的大神教教我。
wa sth:和disp一樣,但是wa會在每次相應變量發生變化時暫停程序,無需斷點。
cond sth (條件):cond是針對斷點的,sth是斷點的編號,條件是C++語句,cond會使程序運行到斷點時判斷,滿足條件則暫停,否則繼續。如cond 1 i==5
按(Ctrl+Z)可以退出gdb模式。而修改完代碼仍需要帶-g的再次編譯。
用-g編譯出的也默認是a.out,也仍然可以用./a.out正常執行而不進入gdb模式。
還有一些也很神奇的指令,不再講了,本身就不建議用。我也不會,會的大神可以補充。
換系統時的我什么也不會,花了一天多上網搜+自己探索,我現在所列舉的肯定也不全,等待你們的補充。
嘗試,探索,不正是個其樂無窮的過程么?