---
title: CPP基礎.Lesson 1
description:
tags: 1th,講義
---
# CPP基礎.Lesson 1
## 建立開發環境
### 常用的IDE (整合開發環境)
- Code::Blocks
[下載連結](https://www.codeblocks.org/downloads/binaries/)
推薦下載 -setup.exe 的那個版本比較不用設定一些東西
- dev cpp (已停止更新)
但是他有中文版,使用起來也很簡單,適合初學者使用。
## 基本程式架構&`cout`
下面是一個最簡單的C++程式範例
```cpp=
#include <iostream>
using namespace std;
int main() {
cout << "Hello! World!";
}
```
猜的出他在做什麼嗎?
他可以在螢幕上印出```Hello! World!```
讓我們一行一行看看他在做什麼吧!
### `#include <iostream> `
`#include`顧名思義就是引入某個東西的意思
以這行來說,他引入了`<iostream>`這個函式庫
這個函式庫包含了可以把輸入輸出程式碼變成組合語言的文件。
> 組合語言是一種機器看的懂的程式碼
> p.s. 有興趣可以參考 https://godbolt.org/
:::info
語法教室 :mega:
其他常見的標頭檔
```cpp
//懶人專用 一次引入所有常用的(g++專用,clang會編譯不過)
<bits/stdc++.h>
//STL 函式
<algorithm>
//資料結構
<list>
<map>
<queue>
<set>
<stack>
<vector>
//輸入輸出
<iostream>
<cstdio>
//數學
<cmath>
```
:::
### `using namespace std;`
使用`std`這個命名空間
> 命名空間是避免大家使用同樣的名稱為類別、物件(簡單來說就是程式裡的變數那些的,以後會學?)命名的一種機制
>
> 我們可做這樣的比喻:在現實生活中,我們可能會在同一班就遇到同名同姓的人, 但 C++ 程式 (同一班) 卻不允許有同名同姓的情況發生,因為當有同名同姓的人出現時,電腦會無法判斷到底現在是在叫哪個人而產生程式的錯誤。
### `int main() { ... }`
程式的進入點,在`{ }`裡面放你的程式碼
### `cout << "Hello! World!";`
cout中的c是字元(character)的意思
[(如果你想知道更多)](https://www.stroustrup.com/bs_faq2.html#cout)
cout就是"character output"
可以在螢幕上印出`Hello! World!`
`<<`用來對cout這個"輸出流"重載
關於資料流可以花一整堂課解釋
這裡就先知道cout的用法就行
:::info
語法教室 :mega:
```cpp
//example 1
cout << "在雙引號裡打你想要的字";
//example 2
int a = 1; //int 是整數的意思,這個之後會說到
cout << a; //印出變數a的內容
//換行方法1
cout << "在雙引號裡打你想要的字\n"; //加入 \n 來換行
cout << a << "\n";
//換行方法2
cout << "在雙引號裡打你想要的字" << endl; //加入 endl 來換行
cout << a << endl;
```
還有其他很多輸出語法等著你去發掘喔!
關於endl操縱符可以參考一下 [這篇](/8EDkg4_8TwOylvPek8fwRw)
:::
## 變數
用來儲存一個會變的數值(可以是整數,小數,文字....)
### 常見的變數型態
| 型態 | 中文 | 英文 | 可儲存的資料 |
| -------- |:-------------------- |:------------------------------- |:------------------------------ |
| `int` | 整數 | Integer | -2,147,483,648 至2,147,483,647 |
| `long long` | 長整數 | Long long integer | $-2^{63}$ 至 $2^{63}-1$ |
| `float` | 浮點數(小數)(單精度) | floating point | $10^{-38}$ ~ $10^{38}$ |
| `double` | 浮點數(小數)(雙精度) | Double-precision floating-point | $10^{-308}$~$10^{308}$ |
| `char` | 字元 | Character | 各種字母和符號 |
| `string` | 字串 | String | 各種句子 |
| `bool` | 布林(是非) | boolean | `true`,`false` |
### 定義一個變數
:::info
語法教室 :mega:
```cpp
int a; //定義一個整數變數名字叫 a
int a = 0; //可以直接給他值
char b = 'a'; //給值的時候字元要使用單引號
string c = "hi, how are you?"; //字串用雙引號
```
除此之外還有各種修飾子,以後會說。有興趣的人可以先去研究!
:::
## `cin`
### 範例
```cpp=
#include <iostream>
using namespace std;
int main() {
int a = 0;
cin >> a; //輸入a
cout << a; //印出a
}
```
:::info
語法教室 :mega:
`cin >>` + `變數名` + `;`
```cpp
int a;
cin >> a;
```
:::
## Coding Style
**Overall Goal**
- 易讀
- 易改
- 一致
- 看起來舒服
寫程式的風格~~
除了讓自己看的懂,也要讓別人看的懂才是好的程式!
:::danger
永遠不要相信未來的自己會懂你
:::
### 變數命名方式
- 小駝峰 (lower camel case) 第一個單字的首字母小寫,其餘單字首字母大寫
> camelCase
- 大駝峰 (upper camel case,Pascal Case) 首字母也大寫
> PascalCase
- snake case 用 _ 來分隔單字
> snake_case
- [匈牙利命名法(Hungarian notation)](https://zh.wikipedia.org/wiki/匈牙利命名法)
### 縮排的重要
除非你立志參加[C語言混亂代碼大賽](http://www.ioccc.org/)否則縮排很重要!
- 沒縮排
```cpp=
#include <iostream>
using namespace std;
int main() {
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
cout << "Hello! World!";
}
}
}
```
- 有縮排
```cpp=
#include <iostream>
using namespace std;
int main() {
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
cout << "Hello! World!";
}
}
}
```
> 別問這程式的意義是什麼 他沒有意義
### 換行
恩恩恩 對就是適當時機要記得換行
### 寫註解
給別人或給自己看
- 適時加上註解有助於理解
- 避免非ASCII的文字
> 注意程式檔案的編碼,最好存utf-8比較不會出錯
> 如果下次打開程式發現是亂碼可以嘗試以big-5編碼開啟
### 有名的Coding Style們
- [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)
- [Google C++ Style Guide 中文](http://www.slmt.tw/google-cpp-style-guide-zh-tw/index.html#%E9%80%A3%E7%B5%90)
- [C++ Core Guideline](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#main)
- [C/C++ Programming Style Guidelines](http://squall.cs.ntou.edu.tw/cpp/102spring/C%20&%20C%2B%2B%20Programming%20Style%20Guidlines.pdf)