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";
}
雖然縮排在現在看來可能微不足道,但當你的程式越來越複雜時,有沒有使用縮排程式碼可讀性看起來就會差非常多,因此建議讀者在一開始就可以養成這樣的習慣。
