Một câu hỏi rất quan trọng trong lập trình C++ chúng ta không nên bỏ qua, chính là
Chương trình C++ được biên dịch như thế nào?
Hiểu điều này, chúng ta sẽ dễ dàng hơn trong việc có tư duy code mạch lạc hơn, tối ưu hơn, tránh được những lỗi không mong muốn trong quá trình biên dịch.
Vậy trước tiên chúng ta cần biết Trình biên dịch là gì.
Đổ mồ hôi trên thao trường để không phải đổ máu trên chiến trường. 😏
1. Biên dịch chương trình là gì?
Máy tính về cơ bản chỉ là những cỗ máy, nó không hiểu và tư duy được theo ngôn
ngữ con người. Vậy nên để nó hoạt động được, trái đất mang đến những lập trình
viên 😎 . Nhưng sẽ là rất cực, nếu con người giao tiếp với máy tính bằng
ngôn ngữ thuần túy của máy tính.
Sẽ dễ dàng hơn, nếu lập trình viên dùng một thứ ngôn ngữ thân thiện với ngôn ngữ con người sử dụng với nhau hơn, loại ngôn ngữ có cấu trúc, có quy luật. (ngôn ngữ bậc cao) Cấu trúc và quy luật của nó tuân theo trình biên dịch đưa ra. Và trình biên dịch sẽ giúp lập trình viên biên dịch nó thành ngôn ngữ máy, nói cách khác, sản phẩm của quá trình biên dịch là file thực thi.
Tuy ngôn ngữ bậc cao, càng hiện đại, càng bổ sung nhiều tính năng, nhưng cái gì cũng có hai mặt của nó, đôi khi chúng thừa thãi, và khó quản lý sâu để tạo ra một chương trình đòi hỏi sự chính xác đến từng byte nhớ.
C++ là một ngôn ngữ bậc trung ( có cả tính chất của ngôn ngữ bậc cao và ngôn ngữ bậc thấp ).
2. Các trình biên dịch C++: phổ biến hiện nay.
- Microsoft Visual C++ compiler
- The GNU compiler collection
- Clang/LLVM
- Intel C++ compiler
- IBM XLC++
- Keil C++ compiler
- Texas Instruments code generation tools for C/C++
- MPLAB XC++ Compiler
3. Tìm hiểu The GNU compiler collection
Bộ sưu tập trình biên dịch GNU, GCC, là một trong những công cụ mã nguồn mở nổi tiếng nhất đang tồn tại. Nó là một công cụ có thể được sử dụng để biên dịch nhiều ngôn ngữ chứ không chỉ C hoặc C ++. Phiên bản hiện tại của GCC, GCC 11, hỗ trợ đầy đủ các tính năng ngôn ngữ cốt lõi C ++ 17 cũng như các tính năng thư viện C ++ 17. Nó cũng có hỗ trợ thử nghiệm cho hầu hết tất cả các tính năng của ngôn ngữ và thư viện C ++ 20, ngoại trừ một số tính năng nhỏ trong Mô-đun. Đáng chú ý, GCC 11 cũng bao gồm một số tính năng của dự thảo tiêu chuẩn C ++ 23, là bản sửa đổi tiếp theo của tiêu chuẩn C ++ sau C ++ 20.
Gần như tất cả các bản phân phối Linux đều được cài đặt sẵn GCC hoặc có nó trong kho lưu trữ chính của chúng, giúp dễ dàng cài đặt. Trên các bản phân phối dựa trên Debian như Debian, Ubuntu và Linux Mint, hãy chạy “apt install build-Essentials”.
Trên window, chúng ta sẽ biết đến MinGW,
MinGW bao gồm một
cổng của GNU Compiler Collection (GCC), GNU binutils cho Windows ( lắp ráp ,
mối liên kết , quản lý lưu trữ ), một tập hợp cụ thể tự do thể chia của
Windows tập tin tiêu đề và thư viện import tĩnh cho phép việc sử dụng các
Windows API , Windows bản dựng gốc của Trình gỡ lỗi GNU của Dự án GNU và các
tiện ích khác.
3.1. GNU C ++ Compiler (g++):
GNU C ++ Compiler (g ++) là một trình biên dịch trong Linux được sử dụng để biên dịch các chương trình C ++. Nó biên dịch cả hai tệp có phần mở rộng .c và .cpp dưới dạng tệp C ++.
Sau đây là lệnh để biên dịch một chương trình C++ đơn giản.
g++ simpleApp.cpp -o simpleAppName
Ở đây,
simpleApp.cpp là file source code, đuôi mở
rộng .cpp.
simpleAppName là tên file thực thi ta muốn
output ra sau cùng của quá trình biên dịch.
Source code đầu vào:
#include <iostream>
using namespace std;
int main() {
int b = 50;
cout << "The value of b : " << b;
return 0;
}
Kết quả như sau:
$g++ simpleApp.cpp -o simpleAppName
$./simpleAppName
The value of b : 50
3.2. GNU C Compiler ( gcc )
GNU C Compiler (gcc) là một trình biên dịch trong Linux được sử dụng để biên dịch các chương trình C. Nó biên dịch các tệp có phần mở rộng là “.c”.
Sau đây là lệnh để biên dịch một chương trình C++ đơn giản.
gcc simpleApp.c -o simpleAppName
Ở đây,
simpleApp.c là file source code, đuôi mở rộng .c.
simpleAppName là tên file thực thi ta muốn output ra sau cùng của quá trình biên
dịch.
Source code đầu vào:
#include <stdio.h>
int main() {
int b = 50;
printf("The value of a : %d", b);
return 0;
}
Kết quả như sau:
$gcc simpleApp.c -o simpleAppName
$./simpleAppName
The value of b : 50
Bài viết tiếp theo sẽ chi tiết hơn về các giai đoạn của trình biên dịch, và ví
dụ cụ thể.
tuanTiTien