Code::Blocks 完全上手
1. 簡略教程
如果你只想趕快能跑程式,記住三件事:
一、到 codeblocks.org 的下載頁 下載 codeblocks-25.03mingw-setup.exe。檔名中間一定要有 mingw。
二、打開後按 Ctrl+Shift+N 開新檔,先存檔,檔名結尾打 .cpp,再開始寫。
三、按 F9,會跳出一個黑色視窗,那就是你的程式在跑。
卡住的話,直接跳到你卡住的那一章。
2. 下載與安裝
① 在網址列輸入 codeblocks.org ② 點左邊的 Downloads
網站的主選單在左邊那一直排,不是在上面。由上往下是 News、Features、Downloads、User manual、Forums、Wiki、License、Donations。要下載就點 Downloads,其他先不用管。
③ 點 Download the binary release
這一頁列了幾種下載方式。只點第一個 Download the binary release,那是裝好就能用的安裝檔。
底下的 Download a nightly build 是每日測試版;Download the source code 和 Retrieve source code from SVN 是原始碼,點下去你會拿到一堆程式碼檔案,還要自己把整套軟體編譯出來,不是你要的。
④ 點 mingw-setup 那一列的下載連結
往下捲到 Microsoft Windows (64 bit, default) 那張表。左欄 File 是檔名,右欄 Download from 有兩個下載點——dAppCDN.com 和 Sourceforge.net,檔案一模一樣,哪個能下就用哪個(圖上點的是 Sourceforge.net)。dAppCDN 那條只認得從官網頁面點進去,從別的地方點會失敗,所以上面那個連結是帶你回官網下載頁。
點下去會先跳到另一個網站才開始下載,那是正常的,不是你點錯。
再往下還有一張「32 bit」的表,檔名幾乎一模一樣,很容易看錯。現在的電腦幾乎都是 64 位元,用上面這張就好。
走到最後一步就是關鍵。那張表列出五個檔案,名字長得非常像。
五個裡面只有兩個附帶編譯器,就是檔名中間有 mingw 的那兩個。編譯器是把你寫的程式翻譯成電腦看得懂的東西的工具,沒有它,Code::Blocks 就只是一個很厲害的記事本,按 F9 只會跳出「找不到編譯器」。
官網自己也在下載頁寫了一句:If unsure, please use codeblocks-25.03mingw-setup.exe!(不確定的話請用這個)。
✕ 這個沒有編譯器。Code::Blocks 本身會裝好,但你按 F9 會跳「找不到編譯器」。
✕ 一樣沒有編譯器。nonadmin 只是給沒有系統管理員權限的人用的版本。
✕ 沒有編譯器,而且是免安裝壓縮檔,要自己解壓縮、自己建捷徑。新手不要碰。
✓ 就是這個。mingw 代表裡面附了 GCC 編譯器和 GDB 除錯器(WinLibs 版本 14.2.0)。官網也建議不確定就選它。
△ 有編譯器,但是免安裝壓縮檔,要自己處理。除非你有特殊需求,不然還是選上面那個。
很多人手快點到第一個 codeblocks-25.03-setup.exe,它排在最上面、名字最短。裝完當下毫無異狀,要等你寫完第一支程式按 F9 才會發現編譯不了,然後開始懷疑是程式寫錯。
分辨方法只有一個:檔名中間有沒有 mingw。
下載完之後
檔案大約 400 MB,載完雙擊它就開始安裝。安裝精靈會問你幾件事,全部按 Next 到底就好:授權條款按同意、安裝元件維持預設不要動、安裝路徑也不用改。最後按 Finish。
裝完桌面或開始功能表會出現 Code::Blocks 的捷徑,打開它,接著看下一章。
3. 首次啟動:選擇編譯器
安裝快跑完的時候,會自己跳出一個叫 Compilers auto-detection 的視窗(有時候是你第一次打開 Code::Blocks 才跳)。它在掃描你的電腦,看看裝了哪些編譯器。
中間那張表,左欄是編譯器名稱,右欄是狀態。大部分都會寫 Not found,那是正常的,那些是給 Fortran、D 之類其他語言用的。
你只要看 GNU GCC Compiler 那一行,右邊寫著 Detected 就對了。視窗下面也會顯示 Current default compiler: GNU GCC Compiler。
通常它已經幫你選好了,直接按 OK 就行。如果沒被選起來,點它一下,再按 Set as default,然後按 OK。這是在告訴 Code::Blocks 以後預設就用 GCC,按過一次就不會再問。
如果 GNU GCC Compiler 那一行也是 Not found,代表你下載到沒有 mingw 的版本,編譯器根本沒裝進來。回第 2 章重新下載。
4. 建立並執行第一支程式
① 開一個新的空白檔
選單走 File → New → Empty file,或直接按 Ctrl+Shift+N。中間會多出一個空白的分頁,標題大概叫 Untitled1。
② 先存檔,而且副檔名要打 .cpp
按 Ctrl+S,跳出存檔視窗。找一個你自己記得住的資料夾(桌面就可以),檔名打 Untitled1.cpp。名字可以自己取,重點是結尾要有 .cpp。
.cpp 這三個字要自己打出來,存檔視窗不會幫你加。
③ 打上這段程式
打完你會發現字有顏色了:#include 一種色、字串又一種色。有顏色就代表存對了。
這支程式會先讀兩個數字、印出相加的結果,再印一行字。
④ 按 F9
工具列上這一顆就是 Build and run,快捷鍵 F9。
Code::Blocks 會先編譯(把你的程式翻譯成執行檔),成功的話馬上執行。畫面會另外彈出一個黑色視窗,。這支程式要讀兩個數字,所以它會先停在那裡等你輸入。打上 3 14 再按 Enter,就會印出 17 和那行字。
#include <iostream>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
int c = 0;
c = a + b;
cout << c << endl;
cout << "Hello,AACPSCHOOL!"<<endl;
}
沒存成 .cpp 之前,Code::Blocks 不知道你在寫 C++。程式碼會是一片灰白沒有顏色,而且 F9 按下去不會有反應,或是跳出奇怪的錯誤。
所以順序是:開新檔 → 立刻存成 .cpp → 才開始打字。不是打完再存。
同一段字,差別只在副檔名。
5. 主控台視窗說明
那個黑視窗叫主控台(console),是程式跟你溝通的地方。你的 cout 印出來的東西會出現在這裡,你要餵給程式的資料也是打在這裡。
程式跑完,最下面會多出兩行:
| 那一行 | 意思 |
|---|---|
| Process returned 0 | 程式正常結束。0 就是「沒事」。如果這裡是別的數字,代表程式中途出狀況了(例如陣列開太小、除以零)。比賽裡這種情況叫 RE(Runtime Error)。 |
| execution time | 跑了多久,單位是秒。比賽有時間限制,這個數字你之後會很常看。 |
| Press any key | 隨便按一個鍵就會關掉視窗。 |
執行時間每次跑都會有點不一樣,這很正常,不用在意小數點後面。
6. 測試資料輸入與 EOF
競賽題目的程式幾乎都要讀輸入。你在主控台把測資打進去(或用滑鼠貼上去),程式才有東西可以算。
麻煩的是,很多程式寫成「一直讀到沒東西為止」,像這樣:
#include <iostream>
using namespace std;
int main() {
int x, sum = 0;
while (cin >> x) sum += x;
cout << sum << '\n';
}
你把測資打完、按了 Enter,程式還是停在那裡不動。因為它不知道你打完了。
這時候要送出一個叫 EOF 的訊號,意思是「輸入到此為止」。在 Windows 的做法是:
按 Ctrl+Z,再按 Enter。
按下去畫面上會出現 ^Z,再按 Enter,程式就會繼續跑完並印出答案。這不是程式壞掉,是每個人都要做的動作。
7. 常用快捷鍵
8. 編譯參數與其他設定
第一項一定要做,它決定你的程式用哪一套規則編譯。後面兩項是個人習慣,不改也能跑。
路徑:Settings → Compiler → Compiler settings 頁籤 → Compiler Flags 頁籤
裡面是一棵分類樹。照下面四步勾,每一步都有畫面對照。
① 展開 General,勾 C++17 那一行
清單裡有好幾行長得很像,看每一行最後面方括號裡的參數,要勾的是 [-std=c++17] 那一行。
② 展開 Optimization,勾選 for speed 的 -O2
那一行寫的是 Optimize even more (for speed) [-O2],勾起來程式會跑得比較快。
補充:清單上面還有一行 Linker output optimization (level 2) 也標著 -O2,但它沒有 for speed,不是這一個。認「for speed」加「-O2」兩個條件都符合的那一行。
③ 展開 Warnings,勾兩行
對應的參數是 -Wall 和 -Wextra。
補充:這兩行中間隔了一行 Enable Effective-C++ warnings,那一行不用勾,別數錯。
④ 切到 Other compiler options,打上 -Wconversion
-Wconversion
它不在勾選清單裡,只能手打。打完按 OK,五個參數就齊了。
補充:這一格不要再打 -std=,第一步已經勾過,重複填會打架。
| 參數 | 做什麼 |
|---|---|
| -std=c++17 | 用 C++17 的規則。APCS 與資訊學科能力競賽公告的環境都是這個版本。 |
| -O2 | 開啟編譯最佳化,程式跑得比較快。 |
| -Wall、-Wextra | 把常見的可疑寫法念出來,例如變數宣告了沒給初始值。 |
| -Wconversion | 數字型別偷偷被轉換時提醒你。這類問題最容易讓答案默默算錯。 |
警告不會讓編譯失敗,程式照樣跑得起來。但它們常常就是答案算錯的原因,別直接無視。
-O2 會讓編譯器重排你的程式碼。哪天你要用除錯器單步追蹤、卻發現行號跳來跳去,把它取消勾選就好。
路徑:Settings → Editor,打開的視窗叫 Configure editor,切到最右邊的 Encoding settings 頁籤
把 Use encoding when opening files 設成 UTF-8,按 OK。
沒設的話,程式裡的中文(例如 cout << “答案是”;)跑出來會變成一堆亂碼。
補充:設完之後新開的檔才會用 UTF-8。已經存成亂碼的舊檔救不回來,重打比較快。
路徑:Settings → Editor → 左側清單選 General settings → 右上角的 Choose 按鈕
會跳出 Windows 的字型選擇視窗,可以挑等寬字型(例如 Consolas)並把字級調大。
覺得字太小再調就好,不改也不影響任何功能。這一項純粹看個人。
競程建議編譯環境:GCC + C++17。不管你用 Code::Blocks、VS Code,還是自己開命令提示字元打指令,參數都是這一組:
-std=c++17 -O2 -Wall -Wextra -Wconversion
這組參數是照哪裡定的
不是我們自己挑的。APCS 官網把檢測當天實際用的編譯指令公告在 檢測資訊 → 系統環境 這一頁:
③ 那一行寫的是 g++ -g -O2 -std=c++17 -static -lm:C++ 標準是 C++17,最佳化開 -O2。這頁教的參數就是照它定的。
APCS 之後換環境,這裡的參數也要跟著換。自己去官網那一頁看最準。
資料來源:APCS 官網「系統環境」,2026-09-04 查證。
9. 編譯訊息判讀
按 F9 之後,如果沒跳出黑視窗,代表編譯沒過。下方 Build 面板會有訊息,先看清楚兩個分頁的差別:
- Build log:完整流水帳,包含它下了什麼指令。訊息很多,新手先不用看。
- Build messages:整理過的清單,只留下有問題的地方。你要看的是這個。
| 意思 | 會不會擋你 | |
|---|---|---|
| error | 錯誤。編譯器看不懂,翻譯不下去。 | 會。有 error 就產不出執行檔,程式跑不了。 |
| warning | 警告。看得懂,但覺得你可能寫錯了。 | 不會。程式照樣跑得起來。 |
有 error 就一定要修。warning 不修程式也會動,但第 8 章講過,它常常在指出真正的問題。
兩個操作習慣
一、雙擊那一列,游標會直接跳到程式碼的那一行。不要自己一行一行數。
二、只看第一個 error。編譯器是從上往下讀的,第一個地方看不懂之後,它就整個亂掉了,後面那一串 error 常常都是第一個引起的連鎖反應。修好第一個再重編一次,你會看到十幾個錯誤一次消掉八個。
10. 常見編譯錯誤
下面四種最常撞到。每一種都給你最小的例子,看編譯器會說什麼。
錯誤訊息的文字會隨 GCC 版本略有不同,抓關鍵字看就好。
#include <iostream>
using namespace std;
int main() {
int a = 3
cout << a << '\n';
}
main.cpp: In function 'int main()':
main.cpp:5:14: error: expected ';' before 'cout'
5 | int a = 3
| ^
| ;
6 | cout << a << '\n';
| ~~~~
它說第 5 行少了分號,可是第 5 行看起來明明沒問題。那是因為編譯器一路讀到第 6 行的 cout,才發現前面沒收尾。
所以看到 expected ‘;’,往上看一行,分號幾乎都是漏在那裡。這裡補成 int a = 3; 就好。
#include <iostream>
using namespace std;
int main() {
cin >> n;
cout << n << '\n';
}
main.cpp: In function 'int main()':
main.cpp:5:12: error: 'n' was not declared in this scope
5 | cin >> n;
| ^
not declared in this scope 直翻就是「這裡沒有一個叫 n 的東西」。編譯器不會自己猜 n 該是什麼型別,你得先講。
可能是真的忘了宣告,也可能是宣告寫在使用的後面。C++ 從上往下讀,用之前一定要先宣告。把 int n; 補在 cin >> n; 前面。
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 3; i++) {
cout << i << '\n';
}
main.cpp: In function 'int main()':
main.cpp:7:2: error: expected '}' at end of input
7 | }
| ^
at end of input 是「我讀到檔案最後了,還缺一個右大括號」。
這種錯的行號特別不可靠,它只會指到最後一行,真正少的地方可能在中間。把游標點在某個 { 上,Code::Blocks 會幫你標出配對的 },從最外層一個一個往裡對。
以後打完 { 就先把 } 補上,再回頭填中間,就不會漏。
#include <iostream>
using namespace std;
int main() {
int a = 3;
cout << a << '\n';
}
看出來哪裡不一樣了嗎?第 5 行結尾那個分號是全形的 ;,不是半形的 ;。
main.cpp:5:14: error: extended character ; is not valid in an identifier
main.cpp:5:15: error: expected ';' before ';'
訊息裡只要出現 extended character,幾乎都是全形符號害的。原因通常是打程式時中文輸入法還開著,最容易中招的是這幾個:
| 全形(錯) | 半形(對) |
|---|---|
| ; | ; |
| , | , |
| ( ) | ( ) |
| “ ” | ” “ |
| 全形空白(看不見) | 一般空白 |
最陰險的是全形空白,肉眼看不出來,程式碼看起來完全正常,但編譯就是不過。
打程式前先按 Shift 把輸入法切回英文。真的中了,那一行整行刪掉重打最快,用眼睛找很花時間。
11. 執行正常但結果錯誤
到這裡,Code::Blocks 這個軟體你已經會用了,這頁的任務結束。
不過你很快會遇到另一種狀況:程式編譯過了,跑得動也不會當,但答案就是不對。這種問題 Code::Blocks 幫不上忙——軟體沒壞,是你的想法哪裡漏掉了。那是另一門功夫,跟你用哪個編輯器無關。
想往下練的話,AA 競程網站的〈免費學習資源〉裡有三份,夠你看很久:
AA 競程演算法競賽 Debug 手冊 dreamoon 老師編寫。從語法班的常見錯誤,一路到二分搜、線段樹的陷阱。答案錯了不知道從哪找起,就把它當檢查清單一條一條過。中文,先看這份。 Catching silly mistakes with GCC 英文。講怎麼用編譯參數讓編譯器多幫你抓錯,是第 8 章那組參數的延伸。 USACO Guide: Debugging C++ 英文。C++ 找 bug 的系統化整理,也包含對拍這類進階做法。12. 重點回顧
13. 隨堂測驗
第 1 題 你要在官網下載哪一個檔案?
第 2 題 開好一個空白檔之後,第一件事應該做什麼?
第 3 題 「編譯並執行」是哪一個快捷鍵?
第 4 題 你跑的是下面這支程式,在黑視窗貼完測資、按了 Enter,畫面卻停著不動,為什麼?
int x, sum = 0;
while (cin >> x) sum += x;
cout << sum << '\n';
第 5 題 Build messages 出現 1 個 error 和 5 個 warning,你應該先做什麼?
第 6 題 編譯錯誤訊息裡出現 extended character,最可能是什麼問題?
安裝過程卡住了?到 Discord 的 AA 競程 伺服器私訊 Anna 老師。
選單路徑與介面文字依 Code::Blocks 25.03 撰寫,不同版本位置可能略有不同