Tổng quan
Quá trình biên dịch là biến đổi mã mà con người hiểu thành định dạng máy tính hiểu được. Đối với ngôn ngữ lập trình C/C++, quá trình biên dịch bao gồm bốn bước: Preprocessor, Compiler, Assembler và Linker.
![]() |
| Compilation process in C/C++ |
Quá trình Biên dịch là gì?
Trước khi bắt đầu, chúng ta cùng xét một ví dụ sau:
anh Hay chỉ biết nói tiếng Việt, chị Code lại chỉ biết nói tiếng Anh, mà bây giờ hai người đang muốn nói chuyện với nhau thì cần phải làm thế nào. Một cách đơn giản, một trong hai người có thể nhờ một người nào biết cả tiếng Việt và tiếng Anh để dịch lại những gì hai người nói. Quá trình này được gọi là "quá trình dịch thuật"
Trong lập trình cũng tương tự, sẽ có một quá trình để chuyển đổi mã mà con người hiểu được sang mã mà máy tính hiểu được, gọi là quá trình biên dịch.
Trong ngôn ngữ lập trình C và lập trình C++, có bốn giai đoạn để biên dịch chương trình C/C++ sang file thực thi.
- Preprocessor (Tiền xử lý)
- Compiler
- Assembler
- Linker
Chuẩn bị Code
- hello.c
#include "sum.h"
#define THIS_YEAR 2023
int main() {
// This is a comment
#if 1
int last_year = THIS_YEAR - 1;
#else
int next_year = THIS_YEAR + 1;
#endif
int a = 0, b = 0;
int c = sum(a, b);
return 0;
}
- sum.c
#include "sum.h"
int sum(int a, int b) {
return a + b;
}
- sum.h
int sum(int a, int b);
1. Preprocessor
- Xóa Comment
- Mở rộng Macro
- Mở rộng các file include
- Biên dịch câu lệnh điều kiện (kiểu #if ...)
gcc -E hello.c -o hello.i# 0 "hello.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "hello.c"
# 1 "sum.h" 1
int sum(int a, int b);
# 2 "hello.c" 2
int main() {
int last_year = 2023 - 1;
int a = 0, b = 0;
int c = sum(a, b);
return 0;
}
2. Compiler
gcc -S hello.i -o hello.s
3. Assembler
gcc -c hello.s -o hello.o
4.Linker
gcc -o hello.o
gcc -o hello.o sum.o
