ACM-ICPC 現場賽不同的賽站可能比賽環境不同,不過一般都是 Ubuntu 系統。附帶的軟件可能略有不同,可能會有使用習慣的差異導致效率下降或者無法運行代碼,但是在終端下編譯運行代碼都是相同的。本篇博客介紹的是在終端下如何編輯代碼、編譯代碼、運行代碼以及調試代碼。
編輯代碼
當然是 vim 神器了。vim 的學習曲線挺大的,不過掌握基本的使用還是沒有問題的,可能一開始離開鼠標效率會不高,但是一旦熟悉了以后效率可能會比使用鼠標高。
這里介紹 vim 最基本的用法。
首先新建文件:
vim test.cpp
文件保存在當前目錄下。
后綴名是你想要的語言:.c .cpp .java .py
vim 有三種模式:普通模式 (normal)、插入模式 (insert)、可視模式 (visual)。
一開始進入的就是普通模式,或者按下 Esc
鍵進入普通模式。普通模式就是替代其他編輯器日常使用鼠標的部分。
普通模式下一般輸入命令,所以不能亂按鍵盤(基本每個鍵都是命令)。
普通模式下可以用 hjkl
代替方向鍵,分別代表左下上右 (當然還是直接用方向鍵最舒服)。
普通模式下按 u
可以撤銷,撤銷上一次對文本的更改。按 x
可以刪除光標后的一個字符,按 dd
可以刪除整行。
普通模式下輸入 :
最下方就會輸出命令框,可以輸入命令。最常用的當然是保存和退出。保存是 :w
,退出是 :q
,強制退出是 q!
(也就是修改后未保存直接退出))。可以疊加命令,也就是保存退出是 :wq
。還可以增加一些配置,比如顯示行號::set number
。但是這樣配置退出 vim 后就沒了。配置信息可以寫在名為 .vimrc 的文件中保存下來。一般保存在 ~/ 目錄下 (用戶目錄),只對某個用戶有效。全局配置一般在 /etc/vim/vimrc 或者 /etc/vimrc,對所有用戶有效。
這里推薦這篇 模板 的 vim 配置。
普通模式按下 i
鍵進入插入模式,插入模式下可以正常編輯代碼。
普通模式按下 v
鍵進入可視模式,可以批量選擇代碼,最常用的就是批量選擇代碼,然后按 d
刪除。
編譯代碼與運行代碼
C
C語言直接使用 gcc 編譯就行。
假設要編譯的文件名為 test.c
最常用的語句就是:
gcc test.c -o test
最后 test 為可執行程序的文件名,如果不加默認生成 a.out。
加個 -g
可以調試。
gcc test.c -o test -g
加 -Wall
輸出所有警告信息。
加 -O2
開 O2 優化
gcc 其他參數挺多的,不過比賽中不常用。
運行的話直接 ./test
就可以了。
假設同一目錄下有 test.in。
可以使用如下命令對輸入重定向:
./test < ./test.in
也可以對輸出重定向:
./test > ./test.out
輸出內容存入文件 test.out。
可以一起使用:
./test < ./test.in > ./test.out
這樣就不用加什么 freopen
之類的文件操作函數了,有時候提交時忘了刪除就直接 WA 了。
C++
C++ 使用 g++ 編譯。與 gcc 很相似。
假設要編譯的文件名為 test.cpp
g++ test.cpp -o test
-g
、-Wall
、-O2
參數作用與 gcc 一樣。
運行的話與 C語言部分一樣。
Java
假設要編譯的文件為 test.java (注意主類的名字要和文件名一致)
javac test.java
在同一目錄下會生成 test.class。
然后用以下命令運行:
java test
注意不要加 .class
Python
Python 是解釋型語言,直接運行就可以了。
假設要運行的文件為 test.py
用 Python2 運行:
python test.py
用 Python3 運行:
python3 test.py
當然目前很多賽站不支持 Python
。
如果想要更方便的編譯運行,可以寫一些 Shell 腳本。
調試代碼
這里只講用 gdb 調試 C++ 程序。
前提是編譯時加了 -g
參數。
假設要調試的代碼為 test.cpp
先編譯:
g++ test.cpp -o test -g
運行一下命令進入調試:
gdb test
輸入 l
顯示主函數所在的代碼部分。
l
后面可以加數字,表示顯示的行號。
也可以加函數名。
輸入 b 10
在第 10 行設置斷點。
輸入 delete 10
刪除第 10 行的斷點。
輸入 r
運行。
輸入 n
單步跟蹤。
輸入 c
執行到下一個斷點處。
輸入 print x
輸出 x 變量的值。
輸入 display x
每次單步執行都輸出 x 變量的值。
輸入 q
退出 gdb。
還可以用 gdb -tui
進入更好看的 gdb。