開啟章節選單
C++ 的程式結構
極為常見Hello World
這是一份會在執行後輸出 "Hello World"
文字的程式碼,接下來將以這份程式碼為例探討 C++
的程式結構。
#include <iostream> int main() { std::cout << "Hello World"; }
標頭檔
在上面範例程式的第一行,語法如下:
#include <標頭檔名稱>
標頭檔的作用是引入這一份程式碼用需要用到的「功能」,像是這份程式需要使用「輸入輸出功能」那我們就可以:
#include <iostream>
iostream 的意思其實就是「input output stream」,也就是輸入輸出流,這個標頭檔裡面包含了很多輸入輸出的功能。
如果需要「數學相關功能」就可以:
#include <cmath>
以此類推。
但是,在程式寫得越來越多時,我們通常會需要很多很多的標頭檔,而且新手常常會忘記哪個功能的標頭檔是什麼。
#include <cmath> #include <iostream> #include <stack> #include <queue> #include <vector> #include <time> #include <threads> // 更多標頭檔...
幸運的是 GCC
( GUN Compiler Collection ) 有提供一個好用的標頭檔,可以幫你一次引入所有常用的功能,那就是 bits/stdc++.h
:
#include <bits/stdc++.h>
於是我們可以把我們的程式碼改成這樣:
#include <bits/stdc++.h> int main() { std::cout << "Hello World"; }
在台灣,我們通常稱它為「萬用標頭檔」。
雖然在追求迅速解題檢定中我們建議直接使用 bits/stdc++.h
,但如果是在實際的專案開發上這並不是一個很優雅的作法。
主函式
範例程式碼的第 3 ~ 5 行都算是主函式的範圍,語法如下:
int main() { // 這份程式碼主要要做的事情 }
主函式的功能就是告訴 C++
這份程式碼「主要的部分」在哪裡(所以這東西叫做主函式),以範例程式碼來說,程式要輸出一段 "Hello World"
的文字,就要把輸出 "Hello World" 的部分寫在主函式裡面:
int main() { std::cout << "Hello World"; }
關於括號的作用是什麼、前面的 int
又有什麼作用將會在以後的 函式 章節詳細介紹,目前讀者只需要知道把主要的程式碼片段放在 {}
裡面就行了!而 cout
這個語法的更多使用方式也會在下個單元做更詳細的介紹。
命名空間
命名空間的主要功能就是幫一些函式或物件(可以先把他們當作一個語法)做分類,主要是為了防止名稱衝突,像是範例程式碼使用的:
std::cout
std
就是他的命名空間,而 cout
是本身的名稱,如此一來,C++
就知道我們要使用的是 std
命名空間底下的 cout
功能。
#include <bits/stdc++.h> int main() { std::cout << "Hey!\n"; std::cout << "How are you?\n"; std::cout << "I'm fine, thanks you!\n"; std::cout << ":>\n"; }
\n
的意思就是換行,在 跳脫字元 章節我們會再更詳細的介紹。
面對這種情況,C++
也提供了一個更簡潔的作法:
using namespace std;
上面這段程式碼的功能是讓 C++
省略所有 std
的命名空間,於是程式碼可以改成這樣:
#include <bits/stdc++.h> using namespace std; int main() { cout << "Hey!\n"; cout << "How are you?\n"; cout << "I'm fine, thanks you!\n"; cout << ":>\n"; }
這樣就可以省略所有 std
的命名空間了!
分號
每行 C++
程式碼中,用來「直接執行」的都需要加上分號,因為 C++
其實不是用換行來判斷每段程式碼,也就是說,只要加上分號就算把大部分的程式碼都縮成一行也可以!
#include <bits/stdc++.h> using namespace std; int main () {cout << "Hello "; cout << " World";}
不過,為了讓程式碼更好閱讀,通常不會選擇這麼做。
執行順序
C++
會以由上而下的方式執行程式碼,也就是說,如果交換每行的順序,執行結果將會不同。
cout << "I"; cout << " love "; cout << "APCS Guide"; // 輸出:I love APCS Guide
cout << "APCS Guide"; cout << " love "; cout << "I"; // 輸出:APCS Guide love I
雖然應該要用 APCS Guide love me 文法才正確。
縮排
在程式碼中,常常會看到這種,看起來像是一個「很大的空白」的部分,像下面程式碼 cout
前面的那段:
int main() { cout << "Hey"; }
這個很大的空白,實際上就叫做「縮排」,縮排的用途就是表達「層級關係」,進而讓程式更容易閱讀,通常可以使用鍵盤上的 tab
鍵打出來。而上面的例子中,縮排表達的就是 cout
是在 main()
函式裡面的。
但有些新手還是喜歡寫沒有縮排的程式碼:
#include <bits/stdc++.h> using namespace std; int main() { cout << "Hello World\n"; cout << "Hello World\n"; cout << "Hello World\n"; }
雖然縮排在現在看來可能微不足道,但當你的程式越來越複雜時,有沒有使用縮排程式碼可讀性看起來就會差非常多,因此建議讀者在一開始就可以養成這樣的習慣。
小測驗
下列哪個選項是正確的?