C++ cơ bản | 4. Công cụ cần thiết để lập trình C++

MỤC LỤC:


C++ là một loại ngôn ngữ, mà ngôn ngữ là dùng để trao đổi, ghi chú thông tin. 
Thông tin này ai đọc? Câu trả lời là trình biên dịch, ( hoặc chính các developer đọc với nhau, để hiểu code, hoặc hiểu nhau hơn 😄 ).
Vậy chúng ta viết nó vào đâu? Câu trả lời là viết vào file. 
Mà file thì chả nhẽ file nào cũng được à? Không phải, file phải có tên mở rộng riêng của nó, để trình biên dịch biết đây là thứ nó cần tìm. ( mình cũng vậy thôi, viết thư tình, thì ngoài phong bì cũng phải thêm vài biểu tượng yêu thương nồng thắm, thì người kia mới biết đây ko phải là một phong bì bình thường chứ.. : ]] ).

1. Text editor: 

Vâng, và để tạo được một file chứa thông tin dạng text, thì ta có vô vàn cách, vô vàn công cụ: 
toàn những công cụ free chẳng mất tiền mua ( notepad, notepad++, sublime text, Atom, Bracket, gedit, VScode...v.v. ). Miễn sao ta lưu trữ nó dưới các tên mở rộng .h và .cpp.
  • .h cho file tiêu đề.
  • .cpp cho file định nghĩa cụ thể.
Sau đó chúng ta gom nó vào một thư mục. Và vậy đó, về cơ bản bạn đã có một thư mục chứa source code của dự án. Nhưng việc cấu trúc thư mục đó sao cho thật khoa học thì chúng ta sẽ nói ở bài khác nhé. 

2. Trình biên dịch: 

Để biên dịch một dự án C++, chúng ta cần trình biên dịch. 
Điều này sẽ chi tiết hơn trong bài ví dụ về trình biên dịch. 
Nhưng điều cần nói đến ở đây:

2.1. Trình biên dịch bao gồm 4 giai đoạn

  • Tiền xử lý
  • Dịch ngôn ngữ bậc cao sang Asembly
  • Dịch Asembly sang ngôn ngữ máy
  • Liên kết

2.2. Lời gọi trình biên dịch

Mỗi giai đoạn biên dịch cần có được gọi đến bởi một lời gọi khác nhau đến trình biên dịch.
Và rộng hơn một chút là việc sử khai báo biên dịch, liên kết cùng các thư viện tĩnh và thư viện động.  

Quá trình này vô cùng nhàm chán, phức tạp và tốn nhiều công sức. 
Vậy nên ý tưởng về Makefile ra đời. 

2.3. Makefiles

make và makefiles cung cấp một hệ thống build mà chúng ta có thể sử dụng để quản lý việc compile và re-compilation của một chương trình được viết bằng ngôn ngữ bất kỳ.

Vậy Makefiles: 
  • + Là một dạng script chứa các thông tin.
  • + Cấu trúc Project ( file, và sự phụ thuộc với các tài nguyên khác, ví dụ như thư viện tĩnh, thư  viện động ta cần dùng đến )
  • + Các lệnh để tạo file ( bao gồm các lệnh tạo file của hệ điều hành, và các lệnh để gọi tới trình biên dịch mà chúng ta cần sử dụng ).
  • + Lệnh make sẽ đọc nội dung của Makefile, hiểu kiến trúc project và thực thi các lệnh.
Giả sử để biên dịch một project Hello World bằng ngôn ngữ C++, chúng ta cần triển khai makefiles như sau: 
Mã nguồn: 
#include<iostream>

int main(int argc, char *argv[]){
   std::cout << "Hello World!" << std::endl;
   return 0;
}
Ngoài file projectHW.cpp ra thì chúng ta cần đến một file khác ở cùng thư mục là CMakeLists.txt có nội dung như sau: 
cmake_minimum_required(VERSION 2.8.9)
project (hello)
add_executable(hello projectHW.cpp)
Vào thư mục chứa CmakeLists.txt, chúng ta chạy lệnh sau để gọi đến cmake để build project thành file thực thi. ( với "." chính là để trỏ đến thư mục hiện tại - chứa mã nguồn và CmakeLists.txt )
cmake .

3. Debug:

Có 1 chân lý: Code là phải có lỗi, muốn không có lỗi thì đừng code. 
Ai mà chẳng có lúc sai lầm, nhất là với một công việc đòi hởi sự tỉ mỉ, kèm sáng tạo như coding. 
Bạn có thể gõ nhầm tên 1 hàm, sai cú pháp 1 câu lệnh, hoặc sai logic dẫn đến lỗi truy cập trái phép bộ nhớ, vân vân và mây mây...

Vậy giải pháp nào cho các coder đồng đạo?

Debug là quá trình tìm kiếm lỗi hay nguyên nhân gây ra lỗi (bug ở đâu mà ra), để có hướng mà xử đẹp nó (sửa lỗi, cho chương trình còn chạy theo ý muốn một cách mượt mà, hoặc ít ra là chạy được 💪 ).

3.1. Printlining: 

Đơn giản là thêm vào source code những lệnh để xuất ra màn hình những thông tin mà bạn muốn theo dõi, giá trị của các biến trong lúc chương trình chạy (runtime).

3.2. Debugger: 

Ta có thể dùng các công cụ để Debug, kể đến như là Microsoft Visual Studio Debugger , GNU Debugger, ngoài ra còn có các debugger được thiết kế chuyên biệt cho các hệ thống nhúng. 

4. IDE là gì?  

Với tất cả sự dài dòng chúng ta nói ở trên, cái chúng ta cần tiếp theo là một môi trường để gom tất cả các công cụ kia lại. 
4.1. Quản lý thư mục source code, 
4.2. Tự tạo ra makefiles.txt để biên dịch chương trình (hơn cả 1 trợ lý xinh đẹp giúp anh em đỡ phải lo công việc tay chân này, giúp anh em coder tập trung hơn vào xử lý các bài toán logic liên quan đến project). 
4.3. Gọi tới trình biên dịch đã khai báo trước đó, và thực hiện biên dịch theo script được khai báo trong makefiles bằng trình make tương ứng.  
4.4. Nâng cấp công cụ kiểm tra lỗi, với giao diện người dùng thân thiện hơn. ( Vẫn là công cụ Debugger người dùng khai báo, nhưng IDE sẽ hiển thị lại trực quan và dễ thao tác hơn cho lập trình viên )
4.5. Các tiện ích khác giúp anh em coder dễ chịu hơn trong cuộc sống, kể đến như: highlight code (phân biệt các thành phần trong code bởi các màu khác nhau) , tổ chức code, tìm kiếm code (cái này siêu siêu cần thiết khi anh em quản lý mã nguồn lớn, hàng triệu dòng code..), định vị code theo dòng và theo cột. 

5. Cách loại IDE phổ biến cho lập trình C++

  • 1. Qt Creater
  • 2. Visual Studio Code
  • 3. Visual studio
  • 4. XCode
  • 5. Eclipse
  • 6. Netbean IDE
  • 7. Code::Block
  • 8. Clion
  • 9. Geany
  • 10. CodeLite


Vậy đấy, cơ bản là vậy, chúng ta sẽ bàn luận sâu và rộng hơn ở các bài viết khác, cảm ơn anh em đã quan tâm và theo dõi. 
TuanTiTien

Author:

Tôi là Tuấn Anh, một lập trình viên C++, hiện tại đang làm việc với Qt Framework. Giờ đã là bố của một thanh niên nhỏ, gần đây tôi thấy mình cần sống có trách nhiệm hơn nữa. : ]] Tôi cảm thấy nếu tôi không có nơi nào đó để ghi lại, tôi sẽ quên mất nhiều thứ. Dấu chân trên cát cũng vậy, nếu ta không chụp ảnh nó lại, rồi nó cũng sẽ bị gió làm mờ đi dần rồi mất hút hẳn. Cảm ơn anh em đã ghé qua và đọc những gì tôi viết. Hữu duyên thiên lý Ngô tương nặng, à nhầm Năng tương ngộ. : ]] Thân ái 3000!
© Giao diện website thiết kế bởi TuanTiTien.com