[Tiếng Việt] Lập trình với C++ - Phần 1: Đi từ điểm bắt đầu
Cài đặt chương trình để lập trình C++
Bạn nên có một hệ thống càng mới càng tốt vì sau khi đi từ C++98 chúng ta sẽ đi tiếp các C++ hiện đại hơn như C++11/14/17/20.
Đối với Windows, chương trình dễ sử dụng và miễn phí thì các bạn có thể cài Visual Studio tùy vào phiên bản hệ điều hành mà bạn có, phiên bản hiện tại mới nhất từ Microsoft Store. Với các phiên bản cũ, các bạn có thể download từ trang Visual Studio older version. Sau khi cài xong, một menu xuất hiện yêu cầu cài những tính năng mà bạn muốn, lúc này bạn chọn Desktop Development C++. Lưu ý các dòng sản phẩm Professional/Enterprise/Ultimate/Developer/... đều tính phí, chỉ có các dòng sản phẩm như Community/Express thì miễn phí.
Đối với Mac hoặc gọi là OS X, chương trình dễ sử dụng và miễn phí thì các bạn có thể cài XCode tùy vào phiên bản hệ điều hành mà bạn đang có, phiên bản hiện tại mới nhất từ App Store. Với các phiên bản cũ, các bạn có thể download từ trang Apple Developer. Sau khi cài sản phẩm sẽ bao gồm các ngôn ngữ khác kèm theo, tuy nhiên chúng ta chỉ tập trung vào C++. Lưu ý: Visual Studio cũng có bản Mac tuy nhiên bản này không có C++.
Đối với Linux thì không có chương trình cụ thể, các bạn có thể cài bất kỳ IDE nào hoặc compiler nào các bạn thích. Tuy nhiên mình sẽ khuyến khích các bạn xài Oracle Developer Studio vì nó đơn giản, dễ cài đặt (tuy nhiên nó khá cũ chỉ hỗ trợ tối đa C++14).
Ngoài ra còn nhiều chương trình khác như IDE: RAD Studio, QT Creator, KDevelop, CodeBlocks, Eclipse,... hoặc compiler: Intel ICC, IBM XLC, Watcom C++, ... hoặc các text editor như VS Code, VIM, ... tuy nhiên mình không khuyến khích dùng ngay, bạn chỉ nên dùng khi có nhu cầu thực sự cần thiết như khi đi làm hoặc bạn đã đủ kinh nghiệm để thiết lập hệ thống code dành riêng cho bản thân bạn.
Lưu ý: Một vài chương trình Visual Studio C++ sẽ không chạy trên các nền tảng khác, tương tự XCode, Oracle Developer Studio, ... Một vài chương trình khác sẽ chạy cross-platform (tức chạy đa nền tảng).
Tiến trình biên dịch của C++
Lưu ý: Phần này khá quan trọng, nếu không hiểu bước này bạn sẽ không hiểu được cách C++ xử lý code.
Tiến trình biên dịch code của C++ (nguồn: C++ Fundamentals - Tác giả: Antonio Mallia, Francesco Zoffoli - Nhà xuất bản: Packt)
Các bước xử lý của tiến trình biên dịch code:
- Tiền xử lý xử lý các vấn đề trước khi biên dịch code. Phần này sẽ có một bài riêng về nó. Nhưng hiện tại chúng ta chỉ cần biết về tiền xử lý #include sẽ dùng để thay thế các nội dung trong file lập trình của chúng ta với nội dung trong file đã được định nghĩa từ trước.
- Chuyển đổi code C++ thành các file Assembly (hợp ngữ - ngôn ngữ gồm chỉ thị của ngôn ngữ và chỉ thị của phần cứng kết hợp nhau). Lưu ý là giai đoạn này có thể code Assembly trực tiếp mà không cần viết code C++, tuy nhiên việc viết code này tốn rất nhiều công sức và cũng không hiệu quả nếu lập trình viên không có đủ giỏi và kinh nghiệm để viết, các compiler C++ về sau này như Clang làm còn tốt hơn rất nhiều lần so với con người viết.
- Biên dịch Assembly thành các file object code trung gian cho giai đoạn tiếp theo.
- Ghép nối các file object nếu có gọi các chỉ thị hệ thống cũng sẽ được ghép với file .lib (Windows) hoặc .a (POSIX - Mac/Linux) đã được định nghĩa. Sau đó các file object cũng được ghép nối với nhau trở thành file thực thi.
Viết chương trình đơn giản bằng C++
Ta xem xét ví dụ sau:
Như vậy, chương trình sẽ gồm có một hàm main là nơi chương trình bắt đầu. Một chương trình có thể có rất nhiều hàm, nhưng sẽ luôn phải có hàm main. Các hàm sẽ có các tên khác nhau, và không nên đặt tên hàm là main nếu nó không phải là nơi chương trình bắt đầu. Lưu ý: mặc dù có thể tạo ra nhiều hàm main với compiler đặc biệt nhưng tốt nhất hàm này phải được định nghĩa là duy nhất (A Tour of C++ - Tác giả: Bjarne Stroustrup - Chương 1.3: Hello, World).
Một giá trị trả về cho biết chương trình hoạt động đúng hay không. Chương trình trả về 0 nếu đúng.
Giá trị định nghĩa cho giá trị trả về của 0 là int. int là giá trị được định nghĩa sẵn trong ngôn ngữ C++
Một hàm được định nghĩa bắt đầu và kết thúc bằng cặp dấu mở ngoặc nhọn.
Đuôi file quy ước
Trên thực tế C++ là ngôn ngữ chỉ quan tâm đến nội dung lập trình. Tuy nhiên, nó tương thích ngược với các file header của C. Do đó các file source hầu như không phụ thuộc vào thành phần mở rộng đuôi file. Còn header thì đa phần các IDE sẽ giữ nguyên mở rộng ".h" - việc này cho phép trộn lẫn sử dụng các file header như math.h thay vì chuẩn C++ là cmath.
Khá nhiều các lập trình viên C++ ngày nay ít khi trộn lẫn hàm C vào như trước đây do đó hiện nay hầu hết sẽ thiết lập đuôi "pp" (cách đặt tên của thư viện Boost) hoặc "xx" (cách đặt tên của Google) để thể hiện rõ là ngôn ngữ C++. Nếu muốn sử dụng hàm C trong header C++, đặt đuôi file .h (cách đặt tên ở hầu hết IDE, phổ biến nhất là Microsoft Visual Studio)
- File source: *.cpp, *.cxx, *.cc
- File heade: *.hxx, *.hpp, *.hh
- File inline (dùng để cho các hàm inline, hàm template): *.inl, *.ixx
Một vài cách đặt tên đuôi file phổ biến trong các dự án lập trình C++
(nguồn Twitter @glowcoil Micah Johnston)
Một vài quyển sách đáng tham khảo cho các phần đầu liên quan đến C++98
- Sách C++ Primer (4th edition) - Tác giả: Stanley B. Lippman, Josee Lajoie, Barbara E. Moo
- Sách Effective C++ - Tác giả Scott Meyers
- Sách Modern C++ Design - Tác giả: Andrei Alexandrescu
- Sách Exceptional C++ - Tác giả: Herb Sutter
Comments
Comments are closed