---
# System prepended metadata

title: C++ Example

---

```cpp
// 未含錯誤
#include <iostream>
using namespace std;

int main(){
    cout << " Hello world!" << endl;
}

```

```cpp
// Syntax error
#include <iostream>
using namespace std;

int main(){
    cout << " Hello world!" << endl
}
```

```cpp
// Runtime error
#include <iostream>
using namespace std;

int main(){
    int a = 0;
    cout << a/0 << endl;
}
```

```cpp
// Segmentation fault
#include <iostream>
using namespace std;

int main(){
    char a[10];
    cout << a[1000];
}
```


```shell
// -o 用來指定輸出至哪
g++ program_name.cpp -o exe
```


```cpp
// Main function
int main(){
    
}
```

```cpp
// Variable type
// 整數
int so_handsome = 0;
// 浮點數
float so_nice = 0;
double so_pretty = 0;
// 字元
char rock = 'R';
char paper[100];
char Scissors = "I win!!" 
                                
```

```cpp
#include <iostream>
```

```cpp
int a = 0;
char b = "R";
float d = 20.04;

scanf("%d", &a); //輸入整數 (int)
scanf("%c", &b); //輸入字元（char）
scanf("%d", &d); //輸入浮點數（float）

printf("%d\n", a); //輸出整數（int）
printf("%c\n", b); //輸出字元（char）
printf("%f\n", d); //輸出浮點數(float)
```

```cpp
using namespace std;
```

```cpp
// 由右至左
int i = 1000;
int temp = i;

```

```cpp
// example program
#include <iostream>
using namespace std;

int main(){
    int i, j;
    // 假設輸入4 和 5
    cin >> i >> j;

    int rock = i;
    i = j;
    cout << i << "\n" << j << "\n" << rock << endl;
    return 0;
}

```

```cpp
// example program
#include <iostream>
using namespace std;

int main(){
    int i = 0;
    char j = "R";
    i = j;
    cout << i << endl;
    return 0;
}
```



```cpp
using namespace std;
```

```shell
git clone ...
```

```shell
node app.js
```



| 意義       | 數學表示法          |  C++ 表示法 |
| ---------- | ------------------- | --- |
| 加    | +  |+|
| 減        | -              |-|
| 乘        | X             |* |
| 除        | /              |/|
| 求餘數        | mod              |%|
| 求負數     | -             |-|
| 平方     | \begin{aligned} \ 2^2 \end{aligned} |pow()|
| 根號     | \begin{aligned} \sqrt2 \end{aligned}              |sqrt()|


```cpp
#include <iostream>
using namespace std;

int main(){
    int a = 3, b = 4;
    printf("%d\n", a + b);
    printf("%d\n", a - b);
    printf("%d\n", a * b);
    // 為何是0?
    printf("%d\n", a / b); 
   
    float c = 3, d = 4;
    // 小數點後2位
    printf("%.2f\n", c/4);
    printf("%f\n", pow(a, 2));    
    printf("%f\n", sqrt(d));
 
    cout << pow(a, 2) << endl;
    cout << sqrt(b) << endl;
    return 0;
}
```


```cpp
// local/ global variable
#include <iostream>
using namespace std;

// a global variable, which can be used everywhere
int b = 10;
int main(){
    // a local variable, which can only be used in main 
    int a = 1;     
    printf("%d\n", a);
    rock();
}

void rock(){
    printf("%d\n", a);
    printf("%d\n", b);
}

```

```cpp
// function(2)
#include <iostream>
using namespace std;

int gcd(int a, int b);
int main(){
    gcd(123, 3);
}

int gcd(int a, int b){
    int r = 0;
    while (a % b != 0){
        r = a % b;
        a = b;
        b = r;
    }
    return b;
}
```

```cpp
// function(1)
#include <iostream>
using namespace std;

void rock();

int main(){
    cout << pow(2, 2) << endl;
    rock();
    return 0;
}

void rock(){
    cout << "I like scissors" << endl;
}
```
```cpp
// Return Type
void rock(){
    cout << "I like scissors" << endl;
}

int rock(){
    return 0;
}

float rock(){
    return 0.0 ;
}

char rock(){
    return 'R';
}

string rock(){
    return "I like paper too";    
}

```


```cpp
// functions.h

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

void printMessage();
int addNumbers(int a, int b);

#endif
```

```cpp
// functions.cpp

#include "myFunctions.h"  // 包含相應的 header 檔案
#include <iostream>

// 未包含 using namespace std;

void printMessage() {
    // Function implementation
    std::cout << "Hello world!" << std::endl;
}

int addNumbers(int a, int b) {
    // Function implementation
    return a + b;
}

```

```cmake
# 定義編譯器
CXX = g++

# 可以在此列出編譯的需求，並指定編譯器版本
CXXFLAGS = -std=c++14 -Wall 

# 執行檔名
TARGET = exec

# 以 SRCS 代表所有 .cpp 檔案
SRCS = $(wildcard *.cpp)

# 將 .cpp 替換成 .o 
OBJS = $(SRCS:.cpp=.o)

all: $(TARGET)

# 連結檔案（link）
# 白話文：g++ -wall -o exec *.cpp
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)

# 編譯檔案（compile）
# 代表所有 .o depend on 對應的 .cpp
# $@ = 目標文件, $< = 第一個依賴的檔案（應該可以用$^）
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

```

```cmake
 # 定義編譯器
CXX = g++

# 可以在此列出編譯的需求，並指定編譯器版本
CXXFLAGS = -std=c++14 -Wall 

# 執行檔名
TARGET = exec

# 以 SRCS 代表所有 .cpp 檔案
SRCS = $(wildcard *.cpp)

# 不同檔案夾的代表方式
# SERVER_SRCS = $(wildcard server/*.cpp)
# CLIENT_SRCS = $(wildcard clinet/*.cpp)
# SRCS = $(SERVER_SRCS) $(CLIENT_SRCS)

# 將 .cpp 替換成 .o 
OBJS = $(SRCS:.cpp=.o)

# 編譯檔案
# 白話文：g++ -wall -o exec *.cpp
$(TARGET): $(OBJS)
    $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)

# 編譯檔案的另一種寫法
# 代表所有 .o depend on 對應的 .cpp
# $@ = 目標文件, $< = 第一個依賴的檔案（應該可以用$^）
# %.o: %.cpp
#    $(CXX) $(CXXFLAGS) -c $< -o $@

clean:
    rm -f $(OBJS) $(TARGET)
```