### Quá trình biên dịch trong C++
Quá trình biên dịch trong C++ là quá trình chuyển đổi mã nguồn (source code) thành mã máy (machine code) để tạo ra tệp thực thi (executable file). Dưới đây là các bước chính trong quá trình này:
1. **Viết mã nguồn**:
- Người lập trình viết mã nguồn bằng ngôn ngữ C++ và lưu vào tệp với phần mở rộng `.cpp`.
2. **Tiền xử lý (Preprocessing)**:
- Trình biên dịch thực hiện tiền xử lý, nơi nó xử lý các chỉ thị tiền xử lý như `#include`, `#define`, và `#ifdef`.
- Kết quả của bước này là một mã nguồn đã được mở rộng, không còn chứa các chỉ thị tiền xử lý.
3. **Biên dịch (Compilation)**:
- Mã nguồn đã qua tiền xử lý được chuyển đổi thành mã trung gian, thường là mã hợp ngữ (assembly code).
- Trình biên dịch kiểm tra cú pháp và ngữ nghĩa của mã, phát hiện lỗi cú pháp nếu có.
4. **Lắp ráp (Assembly)**:
- Mã hợp ngữ được chuyển đổi thành mã máy thông qua trình lắp ráp (assembler).
- Kết quả của bước này là một tệp đối tượng (`.o` hoặc `.obj`), chứa mã máy nhưng chưa thể thực thi độc lập.
5. **Liên kết (Linking)**:
- Tệp đối tượng được liên kết với các thư viện cần thiết để tạo ra tệp thực thi cuối cùng.
- Liên kết có thể bao gồm cả việc kết nối nhiều tệp đối tượng và thư viện bên ngoài.
- Kết quả cuối cùng là một tệp thực thi (`.exe` trên Windows hoặc không có phần mở rộng trên Unix/Linux).