Download as pdf or txt
Download as pdf or txt
You are on page 1of 99

TRƯỜNG ĐẠI HỌC BÁCH KHOA, ĐHQG TP.

HCM
KHOA KHOA HỌC VÀ KĨ THUẬT MÁY TÍNH

KĨ THUẬT LẬP TRÌNH

Hướng dẫn làm quen với lập trình


Đồng tác giả

Hồ Chí Minh, 09/2020


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Mục lục
Lời mở đầu 3

1 Giới thiệu ngôn ngữ lập trình 4


1.1 Tại sao cần có ngôn ngữ lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Sự phát triển của ngôn ngữ lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Phân loại ngôn ngữ lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.1 Ngôn ngữ bậc thấp - Ngôn ngữ bậc cao: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.2 Ngôn ngữ biên dịch - Ngôn ngữ thông dịch: . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.3 Một số cách chia khác: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Đặc điểm chung của ngôn ngữ lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Hướng dẫn lập trình cơ bản 14


2.1 Các bước xây dựng chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2 Các công cụ phục vụ việc lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Hướng dẫn lập trình trên các IDE/Editor thông dụng . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1 Cài đặt trình dịch (optional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.2 Cài đặt IDE/Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3.3 Cấu trúc cơ bản của một chương trình C++ . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.4 Một số lỗi thường gặp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Phụ lục 28

A Hướng dẫn sử dụng cơ bản Visual Studio Code 28


A.1 Cài đặt Visual Studio Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
A.2 Chạy chương trình cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
A.3 Biên dịch và chạy chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
A.3.1 Biên dịch và chạy chương trình bằng dòng lệnh . . . . . . . . . . . . . . . . . . . . . . . . 34
A.3.2 Biên dịch và chạy chương trình bằng extension Code Runner . . . . . . . . . . . . . . . . 38
A.3.3 Biên dịch bằng Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
A.4 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

B Hướng dẫn sử dụng cơ bản Code::Blocks 53


B.1 Code::Blocks là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
B.2 Cài đặt Code::Blocks và chạy chương trình in ra "Hello World!" . . . . . . . . . . . . . . . . . . . 53
B.3 Hướng dẫn biên dịch và chạy chương trình trong Code::Blocks . . . . . . . . . . . . . . . . . . . . 60
B.4 Hướng dẫn Debug trong Code::Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

C Hướng dẫn sử dụng cơ bản Visual Studio 64


C.1 Giới thiệu chung về Visual Studio 2019 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
C.1.1 Một số ưu điểm nổi bật của Visual Studio 2019 . . . . . . . . . . . . . . . . . . . . . . . . 64
C.1.2 Hạn chế của Visual Studio 2019 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
C.2 Cài đặt Visual Studio 2019 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
C.2.1 Yêu cầu thiết bị . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
C.2.2 Các bước cài đặt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
C.3 Làm quen với môi trường trên Visual Studio 2019 . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
C.3.1 Tạo Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
C.3.2 Giao diện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
C.3.3 Hướng dẫn biên dịch và chạy chương trình cơ bản . . . . . . . . . . . . . . . . . . . . . . 72
C.3.4 Lỗi cú pháp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
C.4 Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
C.4.1 Mục đích của Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
C.4.2 Các thành phần của Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
C.4.3 Cách Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
C.4.4 Một số lưu ý trong quá trình debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

D Hướng dẫn sử dụng cơ bản XCode 89


D.1 Giới thiệu chung về XCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
D.2 Cài đặt Xcode trên hệ điều hành macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
D.3 Hướng dẫn biên dịch và chạy chương trình trong macOS . . . . . . . . . . . . . . . . . . . . . . . 93

MỤC LỤC Trang 1/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

D.4 Debugging bằng breakpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

MỤC LỤC Trang 2/98


zTrường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Lời mở đầu
Nhằm để hỗ trợ cho việc học tập môn Kĩ thuật lập trình nói riêng và các môn Nhập môn lập trình nói chung,
tài liệu này được biên soạn để hướng tới bạn đọc lần đầu tìm hiểu tới lập trình.

Tài liệu cung cấp một số kiến thức cơ bản về lập trình và ngôn ngữ lập trình đồng thời hướng dẫn sử dụng các
công cụ lập trình thông dụng hiện nay. Qua đó, bạn đọc sẽ có được một cái nhìn tổng quan hơn về lập trình,
xây dựng cho bản thân một nền tảng tốt hơn cho việc học tập ở trên lớp cũng như là tự học ngoài giờ. Thời
gian ước tính để bạn đọc hoàn thành việc nghiên cứu và nắm rõ được các nội dung tài liệu truyền tải là khoảng
....

Đội ngũ tác giả hi vọng tài liệu sẽ trở thành người bạn đắc lực của bạn đọc trong giai đoạn đầu mới tiếp xúc
với lập trình. Đồng thời, dù đã rất cố gắng nhưng những sai sót trong quá trình biên soạn là không thể tránh
khỏi. Chúng tôi rất mong muốn sẽ nhận được những ý kiến, đóng góp từ bạn đọc để tài liệu có thể ngày một
hoàn thiện hơn.

Đội ngũ tác giả cũng xin gửi lời cảm ơn tới các thầy . . . trong khoa Khoa học và Kỹ thuật Máy tính – Trường
Đại học Bách Khoa – Đại học Quốc Gia Thành phố Hồ Chí Minh. Nếu không có sự góp ý và giúp đỡ của các
thầy, đội ngũ tác giả đã không thể hoàn thành được tài liệu này.

Trân trọng cảm ơn.

Đội ngũ tác giả.

Lời mở đầu Trang 3/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

1 Giới thiệu ngôn ngữ lập trình


Ngày nay, lập trình đã và đang đóng một vai trò ngày càng quan trọng trong cuộc sống của chúng ta. Thử
đặt câu hỏi rằng những thứ mà chúng ta tiếp xúc nhiều nhất mỗi ngày là gì? Dễ dàng có được câu trả lời là
smartphone, laptop, tablet hay các thiết bị điện tử khác. Chúng chính là những ứng dụng của lập trình trong
cuộc sống. Lập trình và ứng dụng của nó đã và đang len lỏi vào dường như tất cả mọi ngóc ngách, khía cạnh
của đời sống. Điều đó khiến việc học lập trình nói chung hay các ngành liên quan đến lập trình nói riêng ngày
càng được coi trọng và có thể trong tương lai, lập trình sẽ trở thành một kĩ năng cơ bản và thiết yếu. Hiểu
được tầm quan trọng của lập trình, để xây dựng cho bạn đọc một nền tảng vững chắc trước khi bước vào con
đường đầy chông gai nhưng cũng đầy thú vị này, ở chương đầu tiên, chúng tôi sẽ trang bị những kiến thức cơ
bản nhất về lập trình và ngôn ngữ lập trình đồng thời đưa ra một số chỉ dẫn giúp bạn đọc bước đầu làm quen
với lập trình dễ dàng hơn.

1.1 Tại sao cần có ngôn ngữ lập trình


Trước hết, để trả lời câu hỏi này, hãy cùng tìm hiểu về máy tính và nguồn gốc ra đời của nó. Máy tính được
phát minh để giải quyết những vấn đề thực tế của cuộc sống một cách dễ dàng hơn. Chiếc máy tính điện tử
đầu tiên - ENIAC - được sử dụng để hỗ trợ công việc tính toán của các pháo binh trong thế chiến II. Ngày nay,
máy tính được sử dụng để hỗ trợ giải quyết công việc trong hầu như mọi lĩnh vực của đời sống từ giáo dục,
kinh tế, giải trí đến y tế, quân sự, công nghệ,... Máy tính hoạt động bằng cách thực thi các phần mềm được con
người viết ra để phục vụ một nhu cầu nhất định. Tuy nhiên, những phần mềm này không thể viết bằng ngôn
ngữ thường ngày của chúng ta, vì khi đó máy tính rõ ràng không thể hiểu được. Do đó, ngôn ngữ lập trình ra
đời để giải quyết vấn đề này.

Hình 1: ENIAC - 1947


Nguồn: U.S. Army Photo

Về bản chất, máy tính hoạt động bằng cách thực thi các chỉ dẫn của con người và bất cứ chương trình hay
phần mềm đều là tập hợp những chỉ dẫn để thực hiện những công việc nhất định. Tập hợp những chỉ dẫn được
ràng buộc bởi những nguyên tắc nhất định được gọi là ngôn ngữ lập trình.

1 Giới thiệu ngôn ngữ lập trình Trang 4/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Hình 2: Một số ngôn ngữ lập trình hiện nay


Nguồn: Simplilearn.com

Câu hỏi:
1. Tại sao cần có ngôn ngữ lập trình?
2. Tìm một số ứng dụng của lập trình trong cuộc sống xung quanh.

1.2 Sự phát triển của ngôn ngữ lập trình


Ngôn ngữ lập trình đầu tiên là ngôn ngữ máy (mã máy), ra đời vào thập niên 40 của thế kỉ XX. Đây là ngôn
ngữ duy nhất mà máy tính có thể hiểu và thực thi trực tiếp được. Ngôn ngữ máy sử dụng các số trong hệ nhị
phân và hệ thập lục phân. Tuy tốc độ xử lí nhanh, nhưng có thể dễ dàng nhận thấy là ngôn ngữ này không hề
thân thiện với con người chút nào.

Hình 3: Chương trình in ra "Hello World" viết bằng mã máy


Nguồn: Excelwithbusiness.com

Nhận thức được vấn đề này, trong suốt lịch sử phát triển, các ngôn ngữ lập trình mới luôn hướng đến sự thân
thiện tối đa với người dùng.
Vào thập niên 50, các ngôn ngữ lập trình phi cấu trúc (Non-structured Programming) ra đời. Điển hình nhất là
Assembly (Hợp ngữ). Assembly sử dụng các lệnh đơn giản với cú pháp như tiếng anh như "add", "sub", "goto"
và thao tác trực tiếp trên bộ nhớ máy tính.

1 Giới thiệu ngôn ngữ lập trình Trang 5/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Hình 4: Một đoạn code viết bằng Assembly


Nguồn: atom.io

Tuy nhiên, để có thể thực hiện một chức năng đơn giản, cần tốn rất nhiều thời gian cũng như số lượng lệnh là
tương đối lớn. Dưới đây là một đoạn code dùng để tạo ra hàm tính bình phương của một số nguyên viết bằng
Assembly và C++ - ngôn ngữ lập trình phổ biến hiện nay.

(a) Assembly (b) C++

Hình 5: Một ví dụ về độ phức tạp của chương trình Assembly

Vào thập niên 60, nhằm cải thiện những bất cập của ngôn ngữ phi cấu trúc như sự phức tạp khi lập trình hay
thiết hụt khả năng tái sử dụng code, ngôn ngữ lập trình cấu trúc (Structure Programming) ra đời. Một số ngôn
ngữ điển hình vào thời điểm đó là Algol, Fortran,... Thời điểm này cũng là thời điểm xuất hiện của các cấu
trúc điều khiển với các lệnh như if, else, loop,... Với việc chương trình tổ chức thành các blocks và subroutines,
ý tưởng về việc tái sử dụng code lần đầu tiên xuất hiện và được áp dụng vào thực tế.

1 Giới thiệu ngôn ngữ lập trình Trang 6/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Hình 6: Một đoạn code viết bằng Algol


Nguồn: Craftofcoding.wordpress.com

Vào thập niên 70, các ngôn ngữ lập trình thủ tục (Procedural Programming) và lập trình hàm (Functional
Programming) được ra mắt, điển hình là Pascal và C. Một số khái niệm quen thuộc bây giờ cũng lần đầu được
giới thiệu vào thời điểm đó như procedures, functions, data structures, modules,... Thời điểm này không chỉ
đánh dấu sự hoàn thiện dần của việc tái sử dụng code bằng functions hay procdures mà còn cho phép gom
nhóm các dữ liệu tương đồng thành các cấu trúc dữ liệu. Một số ý tưởng về lập trình hướng đối tượng cũng đã
bắt đầu xuất hiện vào những năm cuối của thập niên này. Dưới đây là một chương trình Pascal tìm giá trị lớn
nhất giữa 2 số nguyên và hoán đổi giá trị của 2 số nguyên trên.

Hình 7: Ví dụ về một chương trình Pascal

Thập niên 80 đánh dấu sự xuất hiện rộng rãi của lập trình hướng đối tượng (Object Oriented Programming -

1 Giới thiệu ngôn ngữ lập trình Trang 7/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

OOP) với các ngôn ngữ như C++, Perl,... Đây chính là một trong những mô hình lập trình linh hoạt và phổ
biến nhất hiện nay. Các ngôn ngữ này phân tích bài toán thành những đối tượng và xây dựng chương trình với
nền tảng là những đối tượng này.

Hình 8: Một số đặc điểm của OOP

Trong thập niên 90, với sự phát triển vũ bão của Internet, các ngôn ngữ tương thích với trình duyệt web ra đời
và nắm giữ vị thế ngày càng quan trọng, trong đó có thể kể đến Javascript hay PHP. Đây cũng là thời điểm ra
đời của một số ngôn ngữ phố biển hiện nay như Ruby, Python, Java,... Hầu hết những ngôn ngữ thời gian này
đều kế thừa và phát triển tư duy lập trình hướng đối tượng của thập kỉ trước.

(a) Javascript (b) PHP


Nguồn: Metacept.com Nguồn: Aptechvietnam.com.vn

Hình 9: 2 ngôn ngữ hỗ trợ lập trình web thông dụng ngày nay

Từ những năm 2000 đến nay, với sự phát triển không ngừng của công nghệ và tầm ảnh hưởng ngày một sâu
rộng trong đời sống, có rất nhiều ngôn ngữ lập trình mới ra đời. Có thể kể đến một vài cái tên khả nổi bật hiện
nay ra đời trong khoảng thời gian này như C# hay Swift.

1 Giới thiệu ngôn ngữ lập trình Trang 8/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

(a) C# (b) Swift

Hình 10: 2 ngôn ngữ nổi bật trong giai đoạn này

Trong tương lai, các ngôn ngữ lập trình phổ biến hiện tại sẽ không ngừng được cải thiện và phát triển bên cạnh
sự xuất hiện ngày càng nhiều ngôn ngữ lập trình mới. Điều này đòi hỏi bản thân những người lập trình viên
phải nhận thức được tầm quan trọng của việc liên tục cập nhật và học hỏi thêm các kiến thức mới để có thể
tiếp tục tồn tại và phát tiển trong lĩnh vực này.
Tổng hợp sự phát triển và độ phổ biến của ngôn ngữ lập trình trong 55 năm qua, bạn đọc có thể xem thêm tại:
https://youtu.be/Og847HVwRSI

Câu hỏi:
1. Hãy tìm hiểu những ngôn ngữ lập trình thông dụng nhất hiện nay và lí giải tại sao có chúng lại thông
dụng như vậy.
2. Mặc dù các ngôn ngữ lập trình hiện tại đã và đang giải quyết rất tốt những vấn đề trong cuộc sống, nhưng
ngày càng có nhiều ngôn ngữ lập trình mới được tạo ra, nghiên cứu và phát triển. Hãy tìm hiểu và nêu
nhận định về vấn đề này.

1.3 Phân loại ngôn ngữ lập trình


Có rất nhiều cách chia ngôn ngữ lập trình thành từng loại khác nhau. Dưới đây chúng tôi sẽ trình bày một số
cách chia phổ biến hiện nay:

1.3.1 Ngôn ngữ bậc thấp - Ngôn ngữ bậc cao:


• Ngôn ngữ bậc thấp:
Ngôn ngữ bậc thấp liên quan chặt chẽ với phần cứng máy tính. Chương trình viết bằng ngôn ngữ bậc
thấp truy cập trực tiếp thanh ghi và bộ nhớ máy tính. Các lệnh trong loại ngôn ngữ này rất gần với ngôn
ngữ máy.
Ví dụ: ngôn ngữ máy, Assembly,...
• Ngôn ngữ bậc cao:
So với ngôn ngữ bậc thấp, ngôn ngữ bậc cao gần hơn với ngôn ngữ tự nhiên của con người. Các lệnh trong
loại ngôn ngữ này ít phụ thuộc vào vi xử lí hay trình dịch, có tính độc lập cao. Ngày nay, đa số các ngôn
ngữ mới ra mắt đều là ngôn ngữ bậc cao. Ví dụ: C, C++, Python,...
Khi so sánh 2 loại ngôn ngữ trên, có thể nhận thấy rằng chương trình viết bằng ngôn ngữ bậc thấp có tốc độ
thực thi nhanh và việc tối ưu bộ nhớ được xử lí tốt hơn do thao tác trực tiếp trên bộ nhớ máy tính. Tuy nhiên,
các chương trình này thì phụ thuộc vào thiết bị và nền tảng, khó để phát triển, sửa chữa, bảo trì đồng thời đòi
hỏi nhiều kinh nghiệm và kiến thức. Do đó ngôn ngữ này thường được sử dụng trong việc xử lí thao tác trên
bộ nhớ trực tiếp, trong vi xử lí hay giải quyết những vấn đề liên quan đến tối ưu hiệu năng trực tiếp. Ngôn ngữ
bậc cao tuy tốc độ xử lí không nhanh bằng ngôn ngữ bậc thấp nhưng những lợi ích đem lại là vô cùng lớn. Loại
ngôn ngữ này rất thân thiện với người lập trình, việc phát triển, sửa chữa hay bảo trì dễ dàng hơn rất nhiều.
Bên cạnh đó, tính độc lập cao kết hợp sự hiệu quả trong lập trình đã khiến ngôn ngữ bậc cao trở nên cực kì
thông dụng, tạo ra gần như toàn bộ mọi phần mềm ứng dụng trong đời sống.

1 Giới thiệu ngôn ngữ lập trình Trang 9/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

1.3.2 Ngôn ngữ biên dịch - Ngôn ngữ thông dịch:


Chương trình viết bằng ngôn ngữ bậc cao trước khi được thực thi cần phải được dịch sang ngôn ngữ máy. Có
hai cách cơ bản để thực hiện điều này chính là biên dịch và thông dịch.
• Ngôn ngữ biên dịch:
Toàn bộ chương trình sẽ được dịch thành mã máy rồi mới tiến hành thực thi. (Sử dụng Compiler)
Ví dụ: C, C++,...
• Ngôn ngữ thông dịch:
Từng dòng lệnh sẽ được dịch thành mã máy và thực thi. (Sử dụng Intepreter)
Ví dụ: PHP, Ruby, Python...
Lấy một ví dụ đơn giản để phân biệt giữa 2 cách dịch này. Giả sử bạn là một thông dịch viên và bạn là người
trung gian để một người Việt và một người ngoại quốc giao tiếp với nhau. Khi bạn dịch từng câu mà mỗi người
nói thì hành động đó chính là thông dịch. Còn nếu giả sử bạn là một dịch giả và bạn dịch một cuốn sách sang
một ngôn ngữ khác. Khi bạn dịch xong toàn bộ mới đem tới cho độc giả thì hành động đó là biên dịch.
Cả 2 ngôn ngữ biên dịch và thông dịch đều có những ưu nhược điểm riêng. Bạn đọc có thể tìm hiểu thêm
tại: https://stackoverflow.com/questions/38491212/difference-between-compiled-and-interpreted
-languages

1.3.3 Một số cách chia khác:


Bạn đọc tham khảo thêm tại: https://en.wikipedia.org/wiki/List_of_programming_languages_by_type

Câu hỏi:
1. So sánh và phân tích ưu nhược điểm của 2 loại ngôn ngữ: biên dịch và thông dịch.
2. Tìm hiểu quá trình biên dịch của một chương trình C++.

1.4 Đặc điểm chung của ngôn ngữ lập trình


Khi tìm hiểu một ngôn ngữ lập trình mới, bạn đọc nên xem xét tìm hiểu những nội dung sau:

• Ứng dụng thực tế (Application):


Khi tiếp cận một ngôn ngữ mới bắt gặp ở đâu đó trên Internet hay nghe từ bạn bè, việc đầu tiên nên làm
là tìm hiểu xem ngôn ngữ đó đã và đang được ứng dụng như thế nào trong đời sống. Qua việc tìm hiểu
những ứng dụng của nó, bạn đọc có thể bắt gặp những lĩnh vực mà bản thân yêu thích, nó sẽ góp phần
tạo động lực hay giúp phán đoán chính xác việc có nên tìm hiểu ngôn ngữ đó không. Lấy C++ làm ví dụ.
C++ được ứng dụng trong các lĩnh vực như lập trình Games, Application, Animation, Compiler,... C++
cũng cung cấp một nền tảng kiến thức vô cùng tốt trước khi học những ngôn ngữ lập trình khác. Do đó,
nếu là một người mới biết đến lập trình, C++ có thể là một trong những lựa chọn tốt để bắt đầu.
Ngoài ra, bạn đọc có thể xem xét lựa chọn ngôn ngữ lập trình đầu tiên qua sơ đồ dưới đây.

1 Giới thiệu ngôn ngữ lập trình Trang 10/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Hình 11: Lựa chọn ngôn ngữ lập trình đầu tiên
Nguồn: Crossbrowsertesting.com

• Cú pháp (Syntax):
Cú pháp trong một ngôn ngữ lập trình là các quy tắc quy định luật lệ, trật tự và hình thức viết của một
câu lệnh. Mỗi ngôn ngữ đều có những cú pháp khác nhau. Khi tìm hiểu một ngôn ngữ mới, việc tìm hiểu
trước về cú pháp giúp bạn đọc tránh khỏi những sai lầm ngớ ngẩn cũng như để đảm bảo cho code của
bản thân dễ đọc hơn. Bên cạnh đó, bạn đọc có thể sử dụng IDE/Editor có hỗ trợ Syntax Highlighting để
có thể làm quen dễ hơn với cú pháp của ngôn ngữ mới.

Hình 12: Syntax Highlighting trong Visual Studio Code

• Kiểu dữ liệu (Data Types):


Bên cạnh cú pháp, tìm hiểu các kiểu dữ liệu mà ngôn ngữ hỗ trợ cũng vô cùng cần thiết. Thông thường,
một ngôn ngữ lập trình thường cung cấp 5 kiểu dữ liệu cơ bản sau: integer (số nguyên), floating-point
number (số thực), character (kí tự), string (chuỗi) và boolean. Tuy nhiên, mỗi ngôn ngữ có cách gọi kiểu
dữ liệu khác nhau và số lượng kiểu dữ liệu cũng thay đổi tùy thuộc vào mỗi ngôn ngữ. Việc tìm hiểu
những kiểu dữ liệu mà ngôn ngữ cung cấp sẽ giúp bạn đọc thao tác tốt trên dữ liệu và xử lí bộ nhớ tốt
hơn. Bên cạnh đó, qua việc so sánh sự khác nhau về kiểu dữ liệu giữa các ngôn ngữ khác nhau, bạn đọc
sẽ có một hình dung rõ hơn về khả năng xử lí dữ liệu của ngôn ngữ đó.

1 Giới thiệu ngôn ngữ lập trình Trang 11/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Hình 13: Các kiểu dữ liệu có trong C/C++


Nguồn: GeeksforGeeks

• Cấu trúc dữ liệu (Data Structure):


Cấu trúc dữ liệu là cách lưu trữ, tổ chức dữ liệu có thứ tự, có hệ thống nhằm mục đích sử dụng hiệu quả
hơn. Tìm hiểu cấu trúc dữ liệu mà ngôn ngữ cung cấp sẽ giúp bạn đọc có khả năng xây dụng giải thuật
tốt hơn, phù hợp và hiệu quả hơn. Bằng việc tìm hiểu cách mà cấu trúc dữ liệu được triển khai trên ngôn
ngữ mới, bạn đọc có thể dễ dàng làm quen và sử dụng chúng một cách có hiệu quả hơn. Tuy nhiên, có
thể khi bạn đọc chuyển sang ngôn ngữ mới thì một vài cấu trúc dữ liệu bị thiếu hụt. Điều này có thể gây
khó khăn trong giai đoạn đầu nhưng nếu bạn đọc là người đã quen thuộc và thành thạo với cấu trúc dữ
liệu thì việc hiện thực lại cấu trúc dữ liệu bị thiếu sót sẽ không quá khó khăn.

Hình 14: Một số cấu trúc dữ liệu có trong C++


Nguồn: Data-flair.training

• Một số nội dung khác:


Bên cạnh những nội dung đề cập phía trên, bạn đọc có thể tìm hiểu thêm một số nội dung khác như toán
tử (Operator), nhập/xuất (Input/Output), cấu trúc chương trình cơ bản,... Qua việc tìm hiểu ý trên, bạn
đọc sẽ có những cái nhìn ngày càng cụ thể hơn về ngôn ngữ lập trình mà mình đang theo đuổi, từ đó tạo
nên một lộ trình học tập tốt hơn.

1 Giới thiệu ngôn ngữ lập trình Trang 12/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Câu hỏi:
1. Hãy tìm hiểu cấu trúc chương trình cơ bản của một chương trình C++.
2. Bằng những kiến thức thu thập được kết hợp với sơ đồ ở hình 11, hãy liệt kê những ngôn ngữ lập
trình mà bạn cảm thấy phù hợp và tìm hiểu những đặc điểm cơ bản của những ngôn ngữ đó.

1 Giới thiệu ngôn ngữ lập trình Trang 13/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

2 Hướng dẫn lập trình cơ bản


2.1 Các bước xây dựng chương trình

Bước 1: Xác định bài toán.


Trước tiên, chúng ta cần xác định chính xác vấn đề - bài toán, làm rõ những yêu cầu mà người sử dụng đòi hỏi.
Từ đó rút ra những ràng buộc và tiêu chí cần thiết cho chương trình.
Bước 2: Thu thập thông tin.
Sau khi đã xác định rõ bài toán thì chúng ta cần đi thu thập thông tin về bài toán, tìm hiểu xem những gì
chúng ta đã biết (dữ kiện) và những gì chúng ta chưa biết (kết quả).
Bước 3: Tìm kiếm lời giải.
Có thể có nhiều cách khác nhau để giải quyết vấn đề - bài toán. Các phương pháp có thể khác nhau về thời
gian thực hiện, chi phí lưu trữ dữ liệu, độ chính xác... Nói chung không có phương pháp tối ưu về mọi phương
diện. Tùy theo nhu cầu cụ thể mà lựa chọn phương pháp thích hợp. Đồng thời ở bước này chúng ta cũng nên
nhìn bài toán theo nhiều góc độ, khía cạnh khác nhau để đưa ra lời giải chính xác nhất.
Bước 4: Lập kế hoạch.
Đối với những bài toán lớn, trước khi bắt đầu hiện thực ngay thì chúng ta cần lập ra kế hoạch, phân chia cồng
việc với nhóm để đảm bảo công việc diễn ra trơn tru, hiệu quả.
Bước 5: Hiện thực chương trình.

Bước 6: Kiểm tra.


Sau khi xây dựng xong chương trình, đê đảm bảo là chương trình chạy đúng thì bước kiểm tra là rất cần thiết.
Ở bước này chúng ta cần phải xem xét kết quả đầu ra của chương trình có phù hợp với dữ kiện đầu vào hay
không, đồng thời cũng phải so sánh chương trình với các tiêu chí và ràng buộc ban đầu. Và đương nhiên cũng
phải đảm bảo rằng chương trình không gặp lỗi trong quá trình thực thi. Nếu phát hiện chương trình có lỗi sai
thì cần phải quay lại bước 3 để xem xét lại và tìm kiếm lời giải phù hợp hơn.
Bước 7: Tổng quát hóa.
Khác với những bài toán ở bậc phổ thông, sau khi tìm được lời giải chúng ta cần tổng quát hóa nó. Tức là
chúng ta thử xem lời giải này có áp dụng được với những bài toán khác không? hay nói cách khác là có mở
rộng ra được hay không?
Bươc 8: Công bố kết quả.

2 Hướng dẫn lập trình cơ bản Trang 14/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

2.2 Các công cụ phục vụ việc lập trình


a) Editor:
• Là trình soạn thảo chỉnh sửa văn bản, không tích hợp sẵn trình biên dịch và trình thông dịch. Vì
vậy nếu muốn chạy được code ta phải cài trình biên dịch hoặc trình thông dịch bên ngoài.
• VD: Notepad, VS Code, Sublime Text, Atom, Bluefish, Brackets, Phpstorm,...
• Tổng hợp sự phát triển và độ phổ biến của các Editor bạn đọc có thể xem tại: https://youtu.be/q
wrgwS-K3Uk
b) IDE (Integrated Development Environment):
• Là một loại phần mềm máy tính có công dụng hỗ trợ lập trình viên trong việc lập trình. Các lập
trình viên dùng IDE chủ yếu để viết mã nguồn.
• IDE là môi trường phát triển tích hợp bao gồm:
– Trình soạn thảo (Source code editor): dùng để viết code
– Trình biên dịch (Compiler) và trình thông dịch (Interpreter)
– Trình gỡ lỗi (Debugger): dùng để hỗ trợ tìm lỗi
– Định dạng hoặc highlight mã nguồn
– ...
• Ví dụ: Visual Studio, NetBeans, Code::blocks, Xcode, NetBeans, IntelliJ IDEA,...
• Tổng hợp sự phát triển và độ phổ biến của các IDE bạn đọc có thể xem tại: https://youtu.be/3C
wJW5_C6R4
c) Phân biệt IDE với Editor:
Có thể viết code trên cả Editor hay IDE. Tuy nhiên với Editor thì code không thể biên dịch trực tiếp
được. Bạn cần phải cài thêm các plugins hay extensions khác hỗ trợ để có thêm các tính năng như biên
dịch, debug,... Còn với IDE, những ông cụ này đã được tích hợp sẳn, nên code có thể chạy được mà không
cài thêm bất cứ công cụ nào khác. Lời khuyên khi mới lập trình là nếu muốn tự tinh chỉnh, thiết lập cụ
thể các chức năng hỗ trợ cho việc viết code thì nên sử dụng Editor. Còn nếu muốn một phần mềm mà
mọi thứ đều đã được thiết lập sẳn, bạn có thể code ngay lập tức mà không cần hiệu chỉnh gì thêm, thì
các bạn nên sử dụng IDE.

2.3 Hướng dẫn lập trình trên các IDE/Editor thông dụng
2.3.1 Cài đặt trình dịch (optional)
Nếu muốn sử dụng Editor thì ta phải cài đặt trình dịch để chạy được chương trình.
Trình dịch bao gồm: Trình biên dịch và trình thông dịch.
• Trình biên dịch là một chương trình máy tính được dùng để dịch một chuỗi các câu lệnh được viết bằng
một ngôn ngữ lập trình thành một chương trình tương đương dưới dạng ngôn ngữ máy tính rồi thực thi
chương trình.
• Trình thông dịch biên dịch chương trình theo từng phân đoạn sau đó thực thi các mã đã được biên dịch.
Vì sử dụng ngôn ngữ C++ trong môn học này nên ta sẽ cài đặt trình biên dịch gcc cho C++ (đối với hệ điều
hanh window và Linux (Ubuntu)) và clang (đối với hệ điều hành MacOS) (vì C++ là ngôn ngữ biên dịch)
• Trước khi cài đặt trình biên dịch cho máy thì ta phải xem thử máy đã cài nó chưa bằng cách:
– Với hệ điều hành Windows ta gõ lệnh gcc –version trong command Promt.

– Với hệ điều hành Linux(Ubuntu) ta gõ lệnh gcc -v trong terminal.

– Với hệ điều hành MacOS ta gõ lệnh clang –version trong MacOS Terminal

Cài đặt trình biên dịch:


• Với hệ điều hành Linux (Ubuntu) ta chỉ cần gõ lệnh sudo apt-get install build-essential gdb trong ter-
minal

2 Hướng dẫn lập trình cơ bản Trang 15/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Với hệ điều hành MacOS ta chỉ cần gõ lệnh xcode-select –install trong MacOS Terminal
• Với hệ điều hành Windows ta sẽ cài đặt MinGW để cài trình biên dịch gcc
• Các bước cài đặt MinGW:
– Vào trang http://www.mingw.org/ vào mục Downloads rồi tải về

– Chạy chương trình vừa tải về


– Tùy chon ổ đĩa lưu trữ

2 Hướng dẫn lập trình cơ bản Trang 16/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

– Ở phần packages, chọn Basic Setup và cài 2 packages mingw32-base-bin và mingw32-gcc-g++-bin


bằng cách click chuột phải vào nó và chọn Mark for Installation

2 Hướng dẫn lập trình cơ bản Trang 17/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

– Nhấp chuột vào Installation chọn Apply Changes

– Chọn Apply để bắt đầu cài đặt

– Sau khi cài đặt xong nhấn Close

– Thêm thư mục vừa cài đặt vào biến môi trường của Windows để có thể chạy lệnh compiler gcc ở bất
kì folder nào.
– Mở This PC , click chuột phải chọn Properties

2 Hướng dẫn lập trình cơ bản Trang 18/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

– Chọn Advanced system setting

– Chọn thẻ Advanced , sau đó chọn Environment Variables

2 Hướng dẫn lập trình cơ bản Trang 19/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

– Click vào phần Path trong System variables , chọn Edit

– Click New , thêm đường dẫn tới thư mục bin của MinGW, sau sau đó click OK ( Bên trên cài
MinGW ở thư mục MinGW nên đường dẫn tới thư mục bin là: C:\MinGW\bin )

2 Hướng dẫn lập trình cơ bản Trang 20/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

– Mở Command Promt , gõ lệnh gcc –version , khi cài đặt thành công sẽ hiện thông báo như hình

2.3.2 Cài đặt IDE/Editor


Dưới đây là các IDE/Editor thông dụng để lập trình C++:

Viual Studio Code tham khảo ở phần phụ lục A


Code::Blocks tham khảo ở phần phụ lục B
Visual Studio tham khảo ở phần phụ lục C
XCode tham khảo ở phần phụ lục D
Lời khuyên:
• Nếu mới học lập trình C++ thì nên sử dụng Code::Blocks vì nó rất gọn nhẹ và dể sử dụng.
• Nếu máy đủ mạnh thì nên sử dụng Visual Studio vì nó có rất nhiều công cụ mạnh mẽ để hỗ trợ lập trình
C++ và nó khá dễ sử dụng.
• Nếu muốn tự thiết lập các các công cụ để hỗ trợ lập trình thì nên sử dụng Visual Studio Code.
• Nếu dùng hệ điều hành MacOS thì nên sử dụng XCode vì nó được Apple phát triển riêng trên hệ điều
hành này và nó hỗ trợ mạnh mẽ để lập trình C++.

2 Hướng dẫn lập trình cơ bản Trang 21/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

2.3.3 Cấu trúc cơ bản của một chương trình C++


• Chương trình mẫu:
1 #i n c l u d e <i o s t r e a m >
2 u s i n g namespace s t d ;
3 i n t main ( ) {
4 c o u t << " H e l l o World" << e n d l ;
5 return 0;
6 }

• cấu trúc:
– Dòng 1: là một chỉ thị tiền xử lý để thông báo cho bộ tiền xử lý đưa nội dung thư viện vào trong
chương trình để cung cấp các tính năng của thư viện đó.
– Dòng 2: một namespace là một nhóm các đối tượng, trong đó các đối tượng này phải có tên khác nhau.
Để chỉ đến một đối tượng trong một namespace ta phải chỉ rõ cả tên của đối tượng và namespace đó.
Trong phạm vi của một chương trình, nếu cần chỉ dẫn đến nhiều đối tượng của cùng 1 namespace,
chẳng hạn như ở chương trình này ta sử dụng lệnh cout và endl của namespace std, để không
phải chỉ rõ tên namespace ở mỗi lần gọi cout hay endl (std::cout hay std::endl), ta dùng lệnh
using namespace std;
– Dòng 3->6 int main(){...} : là hàm chính của chương trình C++ (bắt buộc phải có). Khi chạy chương
trình hệ thống sẽ tìm đến hàm này đầu tiên và chạy thực thi nó từ trên xuống dưới. Các dòng lệnh
trong hàm phải được kết thúc bằng dấu ; .

2.3.4 Một số lỗi thường gặp


Đối với người lập trình, dù là chuyên nghiệp hay nghiệp dư thì đều không thể tránh khỏi những sai sót trong
quá trình viết chương trình hay còn được gọi là lỗi. Tùy vào khả năng mà lập trình viên có thể mắc ít hay nhiều
lỗi, quan trọng là cách giải quyết những lỗi đó như thế nào.
Dưới đây là phân loại và giới thiệu các lỗi thường gặp trong C++.
Lưu ý: Các ví dụ được trình bày trên Visual Studio 2019, đối với các IDE khác tương tự.
Phân loại lỗi
Lỗi được phân thành 3 loại chính:
• Lỗi cú pháp (syntax error) hay còn gọi là lỗi biên dịch (compile error): là lỗi phá vỡ các quy tắc cú pháp
của ngôn ngữ lập trình khiến cho trình biên dịch không thể hiểu được ý của người lập trình, được phát
hiện bởi trình biên dịch khi biên dịch chương trình. Nếu một câu lệnh bị lỗi cú pháp thì nó sẽ không được
biên dịch và chương trình không thể thực thi.
Ví dụ: Thiếu dấu ; khi kết thúc câu lệnh.
Đoạn chương trình sau thiếu ; ở dòng thứ 5.

2 Hướng dẫn lập trình cơ bản Trang 22/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Lỗi thực thi (runtime error): xảy ra khi máy tính được ra lệnh thực hiện một hành động lỗi, thường do
người lập trình chưa lường trước được hết các trường hợp của bài toán, khiến chương trình đang chạy thì
bị dừng.
Ví dụ: Chia một số cho 0.

2 Hướng dẫn lập trình cơ bản Trang 23/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Lỗi luận lý (logic error): là lỗi khó phát hiện và sửa chữa nhất, thường xảy ra do lỗi của thuật toán,
chương trình chạy thành công nhưng kết quả lại không như mong đợi.
Ví dụ: Chương trình tính diện tích hình vuông cạnh x nhưng lại tính là 4*x.

Lỗi cú pháp là lỗi cơ bản nhất nên người lập trình cần tránh lỗi này trước tiên khi học lập trình.
Một số lỗi cú pháp cơ bản (trong C++)

1. Viết nhầm hàm main() thành Main()


Vì C++ có phân biệt chữ hoa với chữ thường nên chương trình sẽ hiểu là thiếu hàm main().

2 Hướng dẫn lập trình cơ bản Trang 24/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

2. Thiếu dấu chấm phẩy ; kêt thúc câu lệnh


Lệnh cout bên dưới bị thiếu mất dấu ; khi kết thúc câu lệnh .

3. Thiếu dấu mở ngoặc { hoặc dấu đóng ngoặc }

2 Hướng dẫn lập trình cơ bản Trang 25/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

4. Thiếu dấu đóng mở nháy của xâu "


Chương trình bên dưới bị thiếu dấu " đóng xâu Hello World.

5. Sử dụng biến chưa khai báo


Biến y trong chương trình dưới đây chưa được khai báo.

2 Hướng dẫn lập trình cơ bản Trang 26/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

6. Khai báo lại biến đã khai báo


Biến x trong chương trình dưới đây được khai báo 2 lần.

Ngay cả khác kiểu dữ liệu nhưng cùng tên biến cũng không được.
Biến x trong chương trình dưới đây được khai báo 2 lần với 2 kiểu dữ liệu khác nhau.

Lưu ý: Phân biệt warning và syntax error


• Warning: là cảnh báo (cho một mối nguy hiểm), chương trình vẫn biên dịch và thực thi bình thường,
nhưng vị trí này có thể bị lỗi trong tương lai.
• Syntax Error: là lỗi cú pháp (lỗi biên dịch), chương trình không thể biên dịch và thực thi.
Cách khắc phục lỗi
• Lỗi cú pháp: nên sử dụng công cụ nhắc lệnh của IDE, rất hiệu quả. Thông thường, lỗi cú pháp sẽ được
thông báo trong quá trình viết chương trình. Luyện tập cũng là một phương pháp vô cùng hữu ích để cải
thiện khả năng tránh lỗi cú pháp khi viết chương trình.
• Lỗi thực thi và lỗi luận lý: đây là các lỗi khó phát hiện tùy vào mức độ của bài toán, cần suy nghĩ thật
kĩ trước khi viết chương trình để tránh các lỗi này. Bên cạnh đó, có một công cụ hỗ trợ việc xử lý các lỗi
này, đó là Debugger. (Được hướng dẫn cụ thể ở phụ lục của từng IDE)

2 Hướng dẫn lập trình cơ bản Trang 27/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Phụ lục
A Hướng dẫn sử dụng cơ bản Visual Studio Code
Visual Studio Code (VSCode) là editor được Microsoft phát triển trên các hệ điều hành Windows, Linux, macOS.
Cũng như các editor khác, VSCode có hỗ trợ làm nổi bật mã nguồn bằng các màu sắc (syntax higlighting),
tự động hoàn thành mã nguồn (intellisense) nhưng để biên dịch, sửa lỗi và chạy chương trình C++ thì người
dùng cần phải cài đặt thêm compiler, debugger. VSCode khá nhẹ (<100MB cho bộ cài, chiếm bộ nhớ khoảng
200MB), tính tùy biến cao do có nhiều phần mở rộng (extensions), nhưng sẽ gây đôi chút khó khăn với người
mới học lập trình. Phần phụ lục này xem như người dùng đã cài đặt compiler, debugger cho ngôn ngữ C++.

A.1 Cài đặt Visual Studio Code


Yêu cầu về phần cứng của VSCode không cao, xem chi tiết tại https://code.visualstudio.com/docs/sup
porting/requirements. Sau đây là hướng dẫn ngắn gọn cách cài đặt VSCode trên các hệ điều hành Windows,
Linux, macOS.
• Đầu tiên tải VSCode tại trang: https://code.visualstudio.com/download rồi cài đặt vào máy.
– Đối với Windows, bản User Installer phù hợp với người dùng không có quyền Administrator, ngược
lại nên chọn bản System Installer.

Lưu ý rằng đối với Windows 7 máy tính cần phải được cài Microsoft .Net Framework 4.5.2 hoặc cao
hơn mới có thể chạy được VSCode, có thể kiểm tra bằng cách vào Control Panel → Program and
Features, nếu chưa có cần phải vào https://www.microsoft.com/en-us/download/details.aspx?
id=42643 để cài đặt trước.
Sau khi cài đặt, khởi động sẽ thấy màn hình chào mừng như ảnh dưới:

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 28/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

– Đối với Linux cần tải về file phù hợp và chạy các lệnh trên Terminal để cài đặt.

Ví dụ với Ubuntu, cần tải về file .deb, mở Terminal (hoặc ấn Ctrl + Alt + T ) rồi chạy lệnh
cd ~/Downloads
sudo apt i n s t a l l ./< f i l e >. deb

với <file>.deb là file vừa tải về vào thư mục ∼/Downloads.

Đối với các bản cũ hơn có thể cần phải chạy lệnh sau mới cài đặt được:
cd ~/Downloads
sudo dpkg − i < f i l e >. deb
sudo apt−g e t i n s t a l l −f

Ngoài ra đối với Ubuntu có thể cài đặt ở ứng dụng Ubuntu Software bằng cách chọn All và nhấn
rồi gõ vào Visual Studio Code

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 29/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Việc cài đặt trên các bản phân phối Linux (Linux distributions) khác có thể tham khảo ở https:
//code.visualstudio.com/docs/setup/linux#_installation
Sau khi cài đặt, khởi động sẽ thấy màn hình chào mừng tương tự như ảnh dưới:

– Đối với macOS

Sau khi tải về VSCode, mở thư mục đã tải về trong Finder và kéo ứng dụng Visual Studio Code.app

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 30/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

vào trong thư mục để có thể mở VSCode trong macOS Launchpad.

Ngoài ra có thể kéo ứng dụng VSCode vào trong Dock để dễ mở hơn.
Sau khi khởi động VSCode sẽ thấy màn hình chào mừng như ảnh dưới:

Người dùng cũng có thể mở VSCode bằng lệnh code trong macOS Terminal bằng cách cài đặt như
sau: Trong VSCode vào Command Pallete bằng cách ấn + + P , nhập shell command và chọn
Shell Command: Install ‘code’ command in PATH

Sau đó ấn OK và nhập mật khẩu người dùng để cài đặt lệnh code.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 31/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Thông báo sẽ xuất hiện ở góc dưới bên


phải VSCode khi cài đặt lệnh code hoàn tất.
• Từ giờ mỗi lần bật VSCode lên màn hình chào mừng sẽ hiện ra. Người dùng có thể bỏ tích ở Show welcome
page on startup cuối góc màn hình bên trái để màn hình chào mừng này không hiển thị nữa.
VSCode là editor hỗ trợ lập trình nhiều ngôn ngữ, vì vậy đối với từng ngôn ngữ lập trình, có các phần
mở rộng (extension) để hỗ trợ lập trình trên ngôn ngữ đó.

• Cài đặt môi trường làm việc cho C++ cho VSCode: chọn vào Extensions hoặc bấm tổ hợp phím Ctrl
+ Shift + X ( + + X trên macOS). Tiếp theo gõ trên thanh tìm kiếm từ khóa C++, sau đó chọn

extension C/C++ do Microsoft phát hành và ấn Install để cài đặt.

Extension này hỗ trợ lập trình C và C++ trên VSCode, gồm các chức năng như hỗ trợ biên dịch, sửa lỗi,
intellisense. Ngoài ra người dùng cũng nên cài extension Code Runner để chạy chương trình dễ dàng hơn.
• Cài đặt Code Runner tương tự như cài đặt extension C/C++

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 32/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

A.2 Chạy chương trình cơ bản


• Chọn Explorer

• Chọn Open Folder để mở một thư mục, các file trong thư mục xuất hiện bên phần Explorer.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 33/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Tạo 1 file helloworld.cpp bằng cách bấm vào File New File , lưu với tên helloworld.cpp và nhập vào đoạn
code sau:

Giải thích đoạn code:


– Dòng 1: là một chỉ thị tiền xử lý để thông báo cho bộ tiền xử lý đưa nội dung thư viện iostream
vào trong chương trình để cung cấp các tính năng xuất/nhập dữ liệu.
– Dòng 2: Một namespace là một nhóm các đối tượng, trong đó các đối tượng này phải có tên khác nhau.
Để chỉ đến một đối tượng trong một namespace ta phải chỉ rõ cả tên của đối tượng và namespace đó.
Trong phạm vi của một chương trình, nếu cần chỉ dẫn đến nhiều đối tượng của cùng 1 namespace,
chẳng hạn như ở chương trình này ta sử dụng lệnh cout và endl của namespace std, để không
phải chỉ rõ tên namespace ở mỗi lần gọi cout hay endl (std::cout hay std::endl), ta dùng lệnh
using namespace std;
– Dòng 3, 6: int main() {...} là hàm ghi các câu lệnh của chương trình chính, được thực hiện khi
bắt đầu chương trình. Khái niệm hàm sẽ được trình bày ở các tài liệu sau.
– Dòng 4: Lệnh này xuất ra màn hình dòng chữ “hello world".
– Dòng 5: 0 là giá trị trả về của hàm main(), sẽ được trình bày chi tiết ở các tài liệu sau.
• Nếu đã cài đặt extension Code Runner thì ấn chuột phải và chọn Run Code (hoặc ấn Ctrl + Alt + N )
được kết quả như hình dưới:

Chi tiết các cách biên dịch và chạy chương trình được trình bày ở phần sau đây.

A.3 Biên dịch và chạy chương trình


A.3.1 Biên dịch và chạy chương trình bằng dòng lệnh
Trong VSCode có Terminal dùng để giao tiếp với máy tính bằng dòng lệnh. Để mở Terminal, chọn View
Terminal hoặc ấn tổ hợp phím Ctrl + `

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 34/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Giao diện Terminal tương tự như sau

Người dùng có thể biên dịch và chạy chương trình C++ bằng cách nhập các lệnh vào Terminal. Các lệnh biên
dịch và chạy chương trình sẽ khác nhau tùy theo compiler, hệ điều hành. Dưới đây sẽ minh họa việc biên dịch
và chạy chương trình cơ bản như hình sau

1. Sử dụng g++ (thông qua MinGW trên Windows, tương tự trên Linux)
(a) Biên dịch
Để biên dịch file bằng GNU C++ Compiler (g++) nhập lệnh sau vào Terminal và ấn Enter:
g++ main . cpp

Nếu hiện như hình trên, không báo lỗi tức là đã biên dịch thành công. Trong cửa sổ Explorer xuất
hiện file a.exe, chính là file vừa được biên dịch.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 35/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Trong trường hợp muốn biên dịch thành file thực thi có tên khác, người dùng cần thêm tên đó vào
câu lệnh biên dịch trên với tùy chọn -o:
g++ main . cpp −o newprog

Lệnh trên tạo ra file newprog.exe

(b) Chạy chương trình


Để chạy chương trình có file thực thi là a.exe, cần nhập lệnh sau vào Terminal :
./ a

Chương trình thực hiện và in ra màn hình dòng chữ “Hello world".
2. Sử dụng clang++ (trên macOS)
(a) Biên dịch
Nhập lệnh sau vào Terminal
c l a n g++ main . cpp

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 36/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Nếu hiện như hình trên, không báo lỗi tức là đã biên dịch thành công. Trong cửa sổ Explorer xuất
hiện file a.out chính là file vừa được biên dịch.

Trong trường hợp muốn biên dịch thành file thực thi có tên khác, người dùng cần thêm tên đó vào
câu lệnh biên dịch trên với tùy chọn -o:
c l a n g++ main . cpp −o newprog

Lệnh trên tạo ra file newprog

(b) Chạy chương trình


Để chạy chương trình có file thực thi là a.out, cần nhập lệnh sau vào Terminal :
. / a . out

Chương trình thực hiện và in ra màn hình dòng chữ “Hello world".
Ngoài tùy chọn -o, còn nhiều tùy chọn khác hữu ích trong quá trình biên dịch (các tuỳ chọn này đều sử dụng
được trên g++ lẫn clang++):

-std=standard : standard là các phiên bản C++ như c++11, c++14, c++17,. . .
-c : Dùng để compile nhưng không link file (có thể compile nhiều files).
-g : Dùng để thêm thông tin debugging.
-w : Không thông báo tất cả các cảnh báo (warnings).
-Wall : Cảnh báo mức độ cao (nhiều cảnh báo hơn).
-Wextra : Thêm một số cảnh báo mà -Wall chưa có.
-Werror : Chuyển tất cả các cảnh báo (warnings) thành lỗi (errors).
-Wfatal-errors : Khi gặp lỗi đầu tiên thì lập tức ngừng quá trình biên dịch.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 37/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

A.3.2 Biên dịch và chạy chương trình bằng extension Code Runner
Code Runner là extension giúp biên dịch và chạy chương trình của nhiều ngôn ngữ (trong đó có C++) chỉ bằng
một click hoặc một tổ hợp phím.
1. Cài đặt extension Code Runner
Để cài đặt extension Code Runner chọn Extensions , gõ Code Runner vào ô tìm kiếm và ấn nút Install
ở mục Code Runner

2. Biên dịch và chạy chương trình bằng extension Code Runner


Sau khi cài đặt extension trên, mở file mã nguồn rồi ấn nút Run Code ở góc trên bên phải cửa sổ soạn
thảo để biên dịch và chạy chương trình.

Hoặc sử dụng tổ hợp phím Ctrl + Alt + N để biên dịch và chạy chương trình.

Kết quả chương trình được thể hiện ở cửa sổ Output. Output chỉ có thể hiển thị kết quả chứ không thể
dùng để nhập lệnh. Khi cố nhập gì đó vào cửa sổ Output, xuất hiện thông báo như hình dưới:

Do đó các chương trình có dữ liệu được nhập vào từ bàn phím sẽ không thể chạy được. Để giải quyết vấn
đề này, người dùng cần cài đặt Code Runner chạy chương trình trên Terminal.
3. Cài đặt chạy chương trình trên Terminal
Chọn Extensions , chọn ở Code Runner rồi chọn Extension Settings

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 38/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Sau đó nhập vào run in terminal rồi chọn tùy chọn Code-runner: Run in terminal

Thử mở lại file main.cpp lúc nãy và ấn tổ hợp phím Ctrl + Alt + N

Từ câu lệnh được thực thi trong Terminal, có thể nhận thấy rằng bản chất của extension Code Runner
cũng là chạy các câu lệnh được nêu ra ở mục A.3.1.

A.3.3 Biên dịch bằng Task


Task trong VSCode dùng để chạy các lệnh và script tự động mà không cần phải viết thêm code hoặc nhập các
lệnh vào Terminal. Task sẽ được thiết lập trong file task.json trong thư mục .vscode trong thư mục hiện tại.
Qua 2 cách biên dịch vừa nêu trên, có thể thấy bản chất của việc này là chạy các câu lệnh, vì vậy có thể thiết
lập task để làm việc đó. Để đơn giản, người dùng nên sử dụng các task đã được thiết lập sẵn bởi extension
C/C++. Việc cài đặt extension này tương tự như cài đặt extension Code Runner.
1. Thiết lập task.json
Để tạo task biên dịch chương trình, chọn Terminal Configure Default Build Task... :

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 39/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Sau đó chọn compiler đã cài đặt và muốn sử dụng để biên dịch, chẳng hạn ở đây dùng g++ trên Windows
thì chọn g++.exe build active file

Thì file task.json được tạo ra trong thư mục .vscode

Hoặc người dùng có thể tự tạo ra file task.json với nội dung tương tự dưới đây:
• Sử dụng g++ thông qua MinGW trên Windows:
{
" version ": "2.0.0" ,
" tasks ": [
{
" type " : " s h e l l " ,
" l a b e l " : "C/C++: g++.exe b u i l d a c t i v e f i l e " ,
"command " : "C: \ \MinGW\\ b i n \\ g++.exe " ,
" args ": [
"−g " ,
"${ f i l e }" ,
"−o " ,
" $ { f i l e D i r n a m e }\\ $ { f i l e B a s e n a m e N o E x t e n s i o n } . exe "
],

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 40/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

" options ": {


"cwd " : " $ { w o r k s p a c e F o l d e r }"
},
" problemMatcher " : [
" $gcc "
],
" group " : {
" kind " : " b u i l d " ,
" isDefault ": true
}
}
]
}

• Sử dụng g++ trên Linux:


{
" version ": "2.0.0" ,
" tasks ": [
{
" type " : " s h e l l " ,
" l a b e l " : "C/C++: g++ b u i l d a c t i v e f i l e " ,
"command " : "/ u s r / b i n / g++",
" args ": [
"−g " ,
"${ f i l e }" ,
"−o " ,
" $ { f i l e D i r n a m e }/ $ { f i l e B a s e n a m e N o E x t e n s i o n }"
],
" options ": {
"cwd " : " $ { w o r k s p a c e F o l d e r }"
},
" problemMatcher " : [
" $gcc "
],
" group " : {
" kind " : " b u i l d " ,
" isDefault ": true
}
}
]
}

• Sử dụng clang++ trên macOS:


{
" version ": "2.0.0" ,
" tasks ": [
{
" type " : " s h e l l " ,
" l a b e l " : "C/C++: c l a n g++ b u i l d a c t i v e f i l e " ,
"command " : "/ u s r / b i n / c l a n g ++",
" args ": [
"−g " ,
"${ f i l e }" ,
"−o " ,
" $ { f i l e D i r n a m e }/ $ { f i l e B a s e n a m e N o E x t e n s i o n }"
],
" options ": {
"cwd " : " $ { w o r k s p a c e F o l d e r }"

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 41/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

},
" problemMatcher " : [
" $gcc "
],
" group " : {
" kind " : " b u i l d " ,
" isDefault ": true
}
}
]
}

Trong đó một số tùy chọn của 1 task là:


• command: lệnh cần chạy, ở đây là đường dẫn tới compiler.
• args: Các tham số của lệnh cần chạy, ở đây là file cần biên dịch và các tùy chọn cho compiler, chẳng
hạn như các tùy chọn đã được nêu ở mục A.3.1.
• isDefault trong group: Nếu có giá trị true thì task này sẽ là task mặc định, được khởi chạy khi vào
Terminal Run Build Task hoặc ấn Ctrl + Shift + B ( + + B trên macOS). Nếu có giá trị false
(và có nhiều tasks) thì có thể chạy task này ở Terminal Run Task .
2. Biên dịch chương trình
Để biên dịch chương trình, người dùng cần mở file main.cpp rồi chọn Terminal Run Build Task hoặc ấn tổ
hợp phím Ctrl + Shift + B ( + + B trên macOS).

Nếu không xuất hiện lỗi thì biên dịch thành công. Nếu như để tùy chọn args như trên thì file thực thi có
tên giống như file mã nguồn. Chọn Terminal rồi ấn phím bất kì để thoát terminal hiện tại. Mở terminal
nếu chưa có ( Ctrl + ` ), sau đó nhập ./main để chạy chương trình.

A.4 Debugging
Đối với GNU debugger (gdb) hoặc lldb, quá trình debugging phải thực hiện thông qua dòng lệnh. VSCode hỗ
trợ debug một cách trực quan hơn khi có các cửa sổ để theo dõi sự thay đổi của các biến, biểu thức,. . . Người
dùng nên cài đặt extension C/C++, việc cài đặt tương tự như ở các phần trên.
Vào Run để debug.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 42/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

1. Thiết lập file launch.json


Người dùng cần thiết lập file launch.json để debug (tương tự như khi biên dịch chương trình bằng task,
cần chỉ ra một số thiết lập cho VSCode) bằng cách chọn create a launch.json file trong cửa sổ Run.

Nếu đã cài đặt extension C/C++ thì sẽ có các tùy chọn trên, chọn C++ (GDB/LLDB)

Sau đó chọn compiler đã dùng để biên dịch file, ở đây là g++ (trên Windows) nên chọn g++.exe build and
debug active file, VSCode sẽ tạo một file launch.json trong thư mục .vscode, mở trong editor, biên dịch
và chạy chương trình.

Phần Run đã được chia ra làm nhiều cửa sổ khác nhau (Variable, Watch,. . . ), các cửa sổ này sẽ giúp
người dùng theo dõi các chương trình khi debug. Vì chưa có chỉ dẫn gì cho việc debug nên chương trình
chỉ được biên dịch và chạy như bình thường.
Ngoài ra, người dùng có thể tự tạo ra file launch.json trong thư mục .vscode với nội dung tương tự như
sau:
• Sử dụng gdb thông qua MinGW trên Windows:

{
// Use I n t e l l i S e n s e t o l e a r n about p o s s i b l e a t t r i b u t e s .

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 43/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

// Hover t o view d e s c r i p t i o n s o f e x i s t i n g a t t r i b u t e s .
// For more i n f o r m a t i o n , v i s i t : h t t p s : / / go . m i c r o s o f t . com/ f w l i n k /?
l i n k i d =830387
" version ": "0.2.0" ,
" configurations ": [
{
"name " : " g++.exe − B u i l d and debug a c t i v e f i l e " ,
" type " : " cppdbg " ,
" re qu es t " : " launch " ,
" program " : " $ { f i l e D i r n a m e }\\ $ { f i l e B a s e n a m e N o E x t e n s i o n } . exe " ,
" args ": [ ] ,
" stopAtEntry " : f a l s e ,
"cwd " : " $ { w o r k s p a c e F o l d e r } " ,
" environment " : [ ] ,
" externalConsole ": false ,
"MIMode " : "gdb " ,
" miDebuggerPath " : "C: \ \MinGW\\ b i n \\ gdb . exe " ,
"setupCommands " : [
{
" d e s c r i p t i o n " : " Enable p r e t t y −p r i n t i n g f o r gdb " ,
" t e x t " : "−e n a b l e −p r e t t y −p r i n t i n g " ,
" ignoreFailures ": true
}
],
" preLaunchTask " : "C/C++: g++.exe b u i l d a c t i v e f i l e "
}
]
}

• Sử dụng gdb trên Linux:


{
// Use I n t e l l i S e n s e t o l e a r n about p o s s i b l e a t t r i b u t e s .
// Hover t o view d e s c r i p t i o n s o f e x i s t i n g a t t r i b u t e s .
// For more i n f o r m a t i o n , v i s i t : h t t p s : / / go . m i c r o s o f t . com/ f w l i n k /?
l i n k i d =830387
" version ": "0.2.0" ,
" configurations ": [
{
"name " : " g++ − B u i l d and debug a c t i v e f i l e " ,
" type " : " cppdbg " ,
" re qu es t " : " launch " ,
" program " : " $ { f i l e D i r n a m e }/ $ { f i l e B a s e n a m e N o E x t e n s i o n } " ,
" args ": [ ] ,
" stopAtEntry " : f a l s e ,
"cwd " : " $ { w o r k s p a c e F o l d e r } " ,
" environment " : [ ] ,
" externalConsole ": false ,
"MIMode " : "gdb " ,
"setupCommands " : [
{
" d e s c r i p t i o n " : " Enable p r e t t y −p r i n t i n g f o r gdb " ,
" t e x t " : "−e n a b l e −p r e t t y −p r i n t i n g " ,
" ignoreFailures ": true
}
],
" preLaunchTask " : "C/C++: g++ b u i l d a c t i v e f i l e " ,
" miDebuggerPath " : "/ u s r / b i n /gdb"
}
]

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 44/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Sử dụng lldb trên macOS:


{
// Use I n t e l l i S e n s e t o l e a r n about p o s s i b l e a t t r i b u t e s .
// Hover t o view d e s c r i p t i o n s o f e x i s t i n g a t t r i b u t e s .
// For more i n f o r m a t i o n , v i s i t : h t t p s : / / go . m i c r o s o f t . com/ f w l i n k /?
l i n k i d =830387
" version ": "0.2.0" ,
" configurations ": [
{
"name " : " c l a n g++ − B u i l d and debug a c t i v e f i l e " ,
" type " : " cppdbg " ,
" re qu es t " : " launch " ,
" program " : " $ { f i l e D i r n a m e }/ $ { f i l e B a s e n a m e N o E x t e n s i o n } " ,
" args ": [ ] ,
" stopAtEntry " : f a l s e ,
"cwd " : " $ { w o r k s p a c e F o l d e r } " ,
" environment " : [ ] ,
" externalConsole ": false ,
"MIMode " : " l l d b " ,
" preLaunchTask " : "C/C++: c l a n g++ b u i l d a c t i v e f i l e "
}
]
}

Một số tùy chọn trong file launch.json:

program : Đường dẫn tới file thực thi của chương trình
externalConsole : Giá trị true sẽ bật console mở rộng. Chi tiết ở phần sau.
args : Các tham số truyền vào cho chương trình.
MIMode : Chỉ định loại debugger sẽ sử dụng. Giá trị có thể là gdb hoặc lldb.
miDebuggerPath : Đường dẫn tới file thực thi của debugger. Khi không chỉ định thì VSCode sẽ
tìm debugger trong các biến môi trường của hệ điều hành (operating system’s
PATH variable).
preLaunchTask : tên của task mà sẽ được chạy trước khi debug. Ở đây là label của task biên
dịch chương trình đã thiết đặt ở phần trên.

Quá trình debug và kết quả chương trình được hiển thị ở cửa sổ Debug Console (nếu chưa xuất hiện cửa
sổ này thì vào View Debug Console hoặc ấn tổ hợp phím Ctrl + Shift + Y hoặc + + Y với macOS).

Đôi khi, cửa sổ Debug Console chỉ hiển thị quá trình debug

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 45/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Còn kết quả chương trình hiển thị ở Terminal

Trong quá trình debug, người dùng có thể nhập các biểu thức vào khung nhập liệu phía dưới cửa sổ Debug
Console để biết giá trị của biểu thức đó trong lúc chương trình đang thực hiện.
2. Breakpoint
Để đặt hoặc xóa breakpoint tại một dòng lệnh, có thể sử dùng phím F9 khi đang ở trên dòng lệnh đó.
Biểu tượng hình tròn đỏ xuất hiện trước số thứ tự dòng chỉ dòng đó có breakpoint.

Hoặc cũng có thể click vào trước số thứ tự của dòng để tạo/xóa breakpoint. Breakpoint có thể được
tạo/xóa cả khi lập trình và trong lúc debug.
Ngoài ra còn có break point điều kiện, sẽ đánh dấu chương trình dừng lại khi điều kiện được thỏa (điều
kiện có thể là một biểu thức) và logpoint thay vì dừng chương trình thì sẽ xuất thông tin ra Debug Console
có thể được tạo bằng cách chuột phải vào trước số thứ tự của dòng. (Hoặc vào Run New Breakpoint )

3. Tiến hành debug


Dưới đây minh họa việc debug file main.cpp bằng gdb đã đặt breakpoint và có nội dung như hình sau:

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 46/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Tiến hành debug bằng cách ấn F5 .

Chương trình dừng lại ở lệnh được đặt breakpoint. Lúc này bên cửa sổ variable có các biến a và b do đã
được khởi tạo trước đó, cùng với giá trị của chúng. Mở cửa sổ Debug Console (hoặc Terminal nếu kết quả
chương trình hiển thị ở Terminal ), chưa có gì ngoài các lệnh của VSCode và gdb.

Chọn Step over trên thanh công cụ debugging hoặc ấn F10 để chạy lệnh tiếp theo trong chương trình.

Lệnh xuất ra màn hình được chạy và kết quả hiển thị ở cửa sổ Debug console.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 47/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Người dùng có thể theo dõi giá trị của các biến và biểu thức ở cửa sổ Variable và cửa sổ Watch. Di chuột
vào Watch, nhấn vào trên , sau đó nhập biểu thức rồi ấn enter.

Nhấn F10 , lệnh tiếp theo thực hiện, giá trị của a và biểu thức a+b thay đổi:

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 48/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Như đã đề cập ở trên, cũng có thể kiểm tra giá trị của một biểu thức nào đó vào bất kì thời điểm nào
bằng cách nhập vào Debug Console. Chẳng hạn nhập để kiểm tra giá trị của a.

Nhấp vào trên thanh công cụ debug hoặc nhấn F5 , chương trình tiếp tục chạy đến khi gặp một
breakpoint khác thì tạm dừng, trong trường hợp này thì không còn breakpoint nào khác nên chương trình
chạy đến khi kết thúc.

4. Thiết lập console mở rộng để nhập input từ bàn phím


(Người dùng chỉ nên thực hiện bước này khi cả quá trình debugging và kết quả chương trình đều hiển thị
ở Debug Console, không giao tiếp được với chương trình đang được debug qua Terminal )
Debug Console giúp vừa xem được output của chương trình đến thời điểm hiện tại, vừa có thể theo dõi
giá trị của các biểu thức (và thực hiện các lệnh của debugger,. . . ) nhưng không thể nhập được input từ
bàn phím khi chương trình yêu cầu. Chẳng hạn, khi đổi nội dung file main.cpp thành như sau:

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 49/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Giải thích đoạn code:


• Dòng 7: Nhập giá trị vào biến a
• Dòng 9, 10: Hai dòng này có tác dụng dừng chương trình lại đợi người dùng ấn phím Enter rồi mới
tiếp tục thực hiện. Trên Windows sau khi thực hiện xong chương trình thì console mở rộng tự động
tắt nên cần phải có các lệnh này ở cuối chương trình để dừng chương trình để xem kết quả.
Rồi ấn F5 để chạy chương trình. Mở Debug Console ta thấy chương trình dừng lại ở đoạn nhập liệu.
Nhưng khi ta nhập một giá trị vào thì không được.

Để ép buộc thoát chương trình, ta chọn biểu tượng Stop (hoặc ấn Shift + F5 ).
Do đó, chương trình cần phải đọc dữ liệu theo cách khác, hoặc người dùng có thể thiết lập sử dụng console
mở rộng để chạy chương trình trong lúc debug. Bằng cách này, input và output của chương trình đều
sẽ được giao tiếp ở console này, Debug Console chỉ dùng để nhập lệnh. Thiết lập console mở rộng bằng
cách sửa đổi file launch.json, thay đổi giá trị của "externalConsole" thành true (hoặc thêm thiết lập
"externalConsole": true nếu chưa có) rồi lưu lại.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 50/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Sau đó mở lại main.cpp và ấn F5 . Chương trình được chạy trên một console mở rộng và có thể nhập
được input vào từ bàn phím.

• Sửa lỗi console mở rộng trên macOS xuất hiện nhưng không debug được
Triệu chứng: Trên macOS sau khi thêm tuỳ chọn "externalConsole": true trong file launch.json
và bắt đầu debug, thì console mở rộng (là terminal) có xuất hiện nhưng không hiện gì liên quan tới
chương trình, giống như một terminal bình thường.
Nguyên nhân: Do VSCode mở terminal gián tiếp qua lldb-mi, việc mở terminal cần được hệ điều
hành cho phép nhưng VSCode không nhận được sự cho phép này.
Giải pháp: Thiết lập 1 task để VSCode mở terminal để lấy quyền mở terminal.
{
" l a b e l " : "Open Terminal " ,
" type " : " s h e l l " ,
"command " : " o s a s c r i p t −e ’ t e l l a p p l i c a t i o n \" Terminal \"\ ndo s c r i p t
\" echo h e l l o \"\ nend t e l l ’ " ,
" problemMatcher " : [ ]
}

Lúc này file task.json sẽ có nội dung tương tự như sau:


{
" version ": "2.0.0" ,
" tasks ": [
{
" type " : " s h e l l " ,
" l a b e l " : "C/C++: c l a n g++ b u i l d a c t i v e f i l e " ,
"command " : "/ u s r / b i n / c l a n g ++",
" args ": [
"−g " ,
"${ f i l e }" ,
"−o " ,
" $ { f i l e D i r n a m e }/ $ { f i l e B a s e n a m e N o E x t e n s i o n }"
],
" options ": {
"cwd " : " $ { w o r k s p a c e F o l d e r }"
},
" problemMatcher " : [
" $gcc "
],
" group " : {
" kind " : " b u i l d " ,
" isDefault ": true
}
},
{
" l a b e l " : "Open Terminal " ,
" type " : " s h e l l " ,
"command " : " o s a s c r i p t −e ’ t e l l a p p l i c a t i o n \" Terminal \"\ ndo
s c r i p t \" echo h e l l o \"\ nend t e l l ’ " ,
" problemMatcher " : [ ]
}
]
}

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 51/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Chạy task này bằng cách vào Terminal Run Task... rồi chọn Open Terminal

Một thông báo xin quyền mở terminal của VSCode xuất hiện, chọn OK

Như vậy VSCode đã được cấp quyền mở terminal. Mở lại file main.cpp rồi ấn F5 , chương trình thực
hiện được trên console mở rộng là terminal.

A Hướng dẫn sử dụng cơ bản Visual Studio Code Trang 52/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

B Hướng dẫn sử dụng cơ bản Code::Blocks


B.1 Code::Blocks là gì?
Code::Blocks là IDE khá phổ biến, hướng đến ngôn ngữ C, C++ và Fortran. Code::Blocks hoàn toàn miễn phí,
có giao diện đơn giản nhưng bắt mắt, tính hiệu quả cao, đặc biệt là đối với những lập trình viên mới vào nghề.

B.2 Cài đặt Code::Blocks và chạy chương trình in ra "Hello World!"


Đối với hệ điều hành Windows chúng ta cài đặt như sau:
Bước 1: Vào trang chủ http://www.codeblocks.org/ chọn Download

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 53/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Bước 2: Chọn Download the binary release

Bước 3: Chọn đường dẫn để bắt đầu tải xuống, khuyên dùng đường dẫn có cài sẵn MinGW.

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 54/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Bước 4: Chạy chương trình vừa cài đặt. Tại bước này chúng ta chọn như hình:

Bước 5: Chọn ổ đĩa lưu trữ.

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 55/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Đối với hệ điều hành Ubuntu sẽ đơn giản hơn. Sau khi tải file .deb từ trang chủ của Code::Blocks về, chúng ta
sẽ cài đặt theo 2 cách:
1/ Cài đặt bằng giao diện dòng lệnh:
Chúng ta mở Terminal lên và gõ các dòng lệnh sau:
sudo add-apt-repository ppa:damien-moore/codeblocks-stable
sudo apt-get update
sudo apt-get install codeblocks codeblocks-contrib
2/ Cài đặt không qua giao diện terminal:
Bước 1: Mở Ubuntu Software Center

Bước 2: Tìm kiếm từ khóa Code Blocks

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 56/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Bước 3: Nhấn Install để cài đặt

Sau khi cài đặt xong chúng ta tiến hành tạo project mới:
Bước 1: Chạy chương trình vừa cài đặt, chọn Create a new project để tạo project mới và chạy chương trình
in ra "Hello World!"

Bước 2: Chọn Console Application

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 57/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Bước 3: Chọn C++

Bước 4: Trong cửa sổ tiếp theo điền tên cho project của bạn và chọn nơi lưu trữ cho project

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 58/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Bước 5: Trong mục Compiler, chọn GNN GCC Compiler. Chọn Finish để hoàn tất việc tạo project

Bước 6: Sau khi hoàn tất, cửa sổ làm việc của bạn sẽ như hình bên dưới

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 59/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Bước 7: Trong cửa sổ làm việc, chúng ta sẽ có sẵn chương trình in ra "Hello Worrld!". Để chạy chương trình,
chúng ta chỉ cần F9 để Build and Run.
Kết quả in ra màn hình:

B.3 Hướng dẫn biên dịch và chạy chương trình trong Code::Blocks
Sau khi viết xong chương trình chúng ta tiến hành biên dịch và chạy chương trình.

• Để biên dịch, chọn Build → Build hoặc Ctrl + F9 hoặc chọn trên thanh công cụ. Sau khi biên dịch,
chương trình sẽ tạo ra 1 file có đuôi .exe

• Để chạy chương trình đã biên dịch chọn Build → Run hoặc Ctrl + F10 hoặc chọn trên thanh công
cụ.

• Để vừa biên dịch và chạy chương trình cùng lúc chọn Build → Build and Run hoặc F9 hoặc chọn
trên thanh công cụ. Đây cũng là cách được thường sử dụng để biên dịch và chạy chương trình trong
Code::Blocks.

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 60/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

B.4 Hướng dẫn Debug trong Code::Blocks


a. Mở chế độ debug:
Để mở chế độ debug, ta có 2 lựa chọn:

• Sử dụng tùy chọn Debug trên thanh công cụ chính

• Sử dụng thanh công cụ dành riêng cho debug. Nếu chưa có, vào View → Perspectives → GDB/CDB debugger: D
để hiển thị.

b. Các chức năng chính trong chế độ debug:


Breakpoint: có chức năng dừng chương trình ngay trước dòng dặt breakpoint. Để đặt breakpoint, các
bạn có thể click chuột trái ngay lề của dòng cần đặt, hoặc click chuột phải, chọn Toggle breakpoint .

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 61/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Watches: có chức năng cho phép người dùng biết được chương trình đang được thực thi như thế
nào. Để mở cửa sổ watches, vào Debug → Debugging windows → Watches hoặc chọn phím tắt
Debugginf windows → Watches trên thanh công cụ dành riêng cho debug.

Start/continue: để bắt đầu debug chúng ta chọn Debug → Start/continue hoặc F8 hoặc chọn phím

tắt .
Next line: để chạy dòng tiếp theo trong chương trình chúng ta chọn Debug → Next line hoặc F7
hoặc chọn phím tắt .
Stop debugger: để thoát khỏi chế độ debug chúng ta chọn Debug → Stop debugger hoặc Shift + F8
hoặc chọn phím tắt .

Sau khi bắt đầu debug, dấu mũi tên màu vàng hiển thị dòng đang được thực thi.

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 62/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Nếu xảy ra lỗi, lỗi sẽ được hiển thị ở trong 2 khung Build log và Build messages, trong đó:
Build log: lỗi, số lỗi, vị trí của dòng liên quan đến lỗi và chính xác nội dung của dòng đó.

Build messages: lỗi, số lỗi và vị trí của dòng liên quan đến lỗi

. Trên đây là một số hướng dẫn sơ lược sử dụng IDE Code::Blocks, ngoài ra vẫn còn nhiều tính năng tùy
vào nhu cầu của người dùng, mong các bạn tham khảo thêm.
Dưới đây là 1 trang youtube có hướng dẫn lập trình C++ trên IDE Code::Blocks cũng như một số ngôn
ngữ khác: https://www.youtube.com/channel/UCs6nmQViDpUw0nuIx9c_WvA

B Hướng dẫn sử dụng cơ bản Code::Blocks Trang 63/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

C Hướng dẫn sử dụng cơ bản Visual Studio


C.1 Giới thiệu chung về Visual Studio 2019
Microsoft Visual Studio là một môi trường phát triển tích hợp (IDE) từ Microsoft. Nó được sử dụng để phát
triển chương trình máy tính cho Microsoft Windows, cũng như các trang web, các ứng dụng web và các dịch vụ
web. Visual Studio sử dụng nền tảng phát triển phần mềm của Microsoft như Windows API, Windows Forms,
Windows Presentation Foundation, Windows Store và Microsoft Silverlight. Nó có thể sản xuất cả hai ngôn ngữ
máy và mã số quản lý.
Visual Studio hỗ trợ nhiều ngôn ngữ lập trình khác nhau và cho phép trình biên tập mã và gỡ lỗi để hỗ trợ
(mức độ khác nhau) hầu như mọi ngôn ngữ lập trình. Các ngôn ngữ tích hợp gồm có C, C++ và C++/CLI
(thông qua Visual C++), VB.NET (thông qua Visual Basic.NET), C# (thông qua Visual C#) và F# (như của
Visual Studio 2010). Hỗ trợ cho các ngôn ngữ khác như J++/J#, Python và Ruby thông qua dịch vụ cài đặt
riêng rẽ. Nó cũng hỗ trợ XML/XSLT, HTML/XHTML, JavaScript và CSS.

Trích: Wikipedia, tham khảo thêm: https://vi.wikipedia.org/wiki/Microsoft_Visual_Studio#cite_not


e-1
Trang chủ Visual Studio: https://visualstudio.microsoft.com/

C.1.1 Một số ưu điểm nổi bật của Visual Studio 2019


• Hỗ trợ lập trình trên nhiều ngôn ngữ nên có tính ứng dụng cao.
• Cung cấp gợi ý mã theo ngữ cảnh, phù hợp với người mới bắt đầu.
• Hỗ trợ việc debug mạnh mẽ, dễ dàng.
• Giao diện thích hợp, dễ sử dụng.
Vì vậy, Visual Studio là một trong những môi trường lập trình được đông đảo lập trình viên trên thế giới lựa
chọn.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 64/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Theo khảo sát gần 90.000 lập trình viên trên thế giới của Stack Overflow năm 2019 thì Visual Studio chiếm
31.5% lượng người dùng và đứng thứ 2 trong bảng xếp hạng những môi trường phát triển được yêu thích nhất.
Khảo sát lập trình viên hằng năm của Stack Overflow là cuộc khảo sát lớn nhất và toàn diện nhất về lập trình
viên trên thế giới.
Nguồn tham khảo: https://insights.stackoverflow.com/survey/2019

C.1.2 Hạn chế của Visual Studio 2019


Microsoft Visual Studio là một IDE nặng, cần nhiều tài nguyên để khởi động và vận hành, nên để đảm bảo
hiệu quả cần yêu cầu chất lượng phần cứng cao hơn các IDE khác, một số thao tác chỉnh sửa có thể tốn thời
gian hơn trên một số thiết bị.

C.2 Cài đặt Visual Studio 2019


C.2.1 Yêu cầu thiết bị
• Hệ điều hành:
– Windows 10 version 1703 or higher: Home, Professional, Education, and Enterprise (LTSC and S are
not supported)
– Windows Server 2019: Standard and Datacenter
– Windows Server 2016: Standard and Datacenter
– Windows 8.1 (with Update 2919355): Core, Professional, and Enterprise
– Windows Server 2012 R2 (with Update 2919355): Essentials, Standard, Datacenter
– Windows 7 SP1 (with latest Windows Updates): Home Premium, Professional, Enterprise, Ultimate
• Bộ xử lý 1,8 GHz hoặc nhanh hơn, đề nghị lõi tứ hoặc tốt hơn.
• RAM 2 GB; Khuyến nghị RAM 8 GB (tối thiểu 2,5 GB nếu chạy trên máy ảo).
• Dung lượng ổ cứng: Tối thiểu 800 MB đến 210 GB dung lượng trống, tùy thuộc vào các tính năng được
cài đặt; cài đặt thông thường cần 20-50 GB dung lượng trống.
• Tốc độ ổ cứng: để cải thiện hiệu suất, hãy cài đặt Windows và Visual Studio trên ổ đĩa trạng thái rắn
(SSD).
• Thẻ video hỗ trợ độ phân giải màn hình tối thiểu 720p (1280 x 720); Visual Studio sẽ hoạt động tốt nhất
ở độ phân giải WXGA (1366 x 768) trở lên.
• Ngôn ngữ được hỗ trợ: tiếng Anh, tiếng Trung (giản thể), tiếng Trung (truyền thống), Séc, Pháp, Đức,
Ý, Nhật Bản, Hàn Quốc, Ba Lan, Bồ Đào Nha (Brazil), Nga, Tây Ban Nha và Thổ Nhĩ Kỳ.
• Cần có .NET Framework 4.5 để cài đặt Visual Studio. Visual Studio yêu cầu .NET Framework 4.7.2, sẽ
được cài đặt trong quá trình thiết lập.
• Để hỗ trợ trình giả lập Hyper-V, cần có hệ điều hành 64 bit được hỗ trợ. Một bộ xử lý hỗ trợ Hyper-V
của khách hàng và Dịch địa chỉ cấp hai (SLAT) cũng được yêu cầu.
Nguồn tham khảo: https://icongnghe.com/download-visual-studio-2019/

C.2.2 Các bước cài đặt


Có 3 phiên bản Visual Studio:
• Community là phiên bản miễn phí của gói phần mềm và cung cấp các tính năng tối thiểu, phù hợp với
người dùng phổ thông, freelancer, học sinh sinh viên.
• Professional là phiên bản mạnh hơn một chút so với Community, có tính phí, phù hợp với các đội ngũ
phát triển ứng dụng.
• Enterprise là phiên bản hoàn chỉnh với tất cả các công cụ mạnh mẽ của Visual Studio, có tính phí, đây
là phiên bản chuyên nghiệp dành cho các tổ chức lớn phát triển các ứng dụng Enterprice.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 65/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Tham khảo thêm về sự khác nhau của 3 phiên bản trên: https://cameoplus.com/microsoft-visual-studi
o-la-gi-tim-hieu-diem-khac-biet-giua-cac-phien-ban
Sau đây là hướng dẫn cài đặt phiên bản Visual Studio Community 2019:

1. Tải Visual Studio bản Community từ trang chủ:

2. Set up Visual Studio


Mở file đã tải về.

Chọn và cài đặt các gói cần thiết. Ở trong các gói đã tích hợp sẵn môi trường, trình biên dịch và các công
cụ hỗ trợ cần thiết nên không cần cài thêm môi trường như các editor và IDE khác.
Đối với người mới học lập trình bắt đầu với ngôn ngữ C++ thì nên cài gói Desktop development with
C++.
Sau khi chọn xong các gói cài đặt thì chọn Install . Lưu ý: Chỉ nên chọn những gói hỗ trợ ngôn ngữ lập
trình cần sử dụng vì khá tốn bộ nhớ.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 66/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Nhấn Launch để bắt đầu cài đặt.

3. Sau khi cài đặt và sử dụng, có thể bổ sung thêm các gói ngôn ngữ lập trình khác bằng cách vào Taskbar,
nhấn ô Search và tìm Visual Studio Installer.
Lúc này sẽ hiển thị phiên bản Visual Studio Community đã cài đặt, chọn Modify.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 67/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Chọn các gói cài đặt thêm và chọn Modify để thực hiện.

C.3 Làm quen với môi trường trên Visual Studio 2019
C.3.1 Tạo Project
Tạo một Project mới bằng cách chọn Creat a new project.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 68/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Chọn ngôn ngữ C++, sau đó chọn templates Empty App hoặc Console App và nhấn Next .

• Empty App: tạo một Project trống.


• Console App: mở sẵn file code và có sẵn đoạn code in ra “Hello World”.
Khuyến khích dùng Console App.

Đặt tên cho Project và nhấn Creat để tạo:

• Project name: Tên của Project.


• Location: Địa chỉ của Project.
• Solution name: Tên của Solution.
Chọn Place solution and project in the same directory để đặt chung Project và Solution ở cùng một thư
mục (Nếu chọn mục này thì tên Solution tự động bắt buộc giống với tên Project).

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 69/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Lưu ý:

• Trong Visual Studio, lớn nhất là Solution. File cấu hình của Solution sẽ có định dạng .sln.
• Trong một Solution có thể có một hoặc nhiều Project. File cấu hình của Project có định dạng .vcxproj.
• Trong một Project có thể gồm nhiều thư mục, nhiều file, trong đó có file .h, .cpp.
Để mở một Project đã có sẵn, chọn Open a project or solution.
Ngoài ra có thể mở nhanh một Project mới sử dụng bằng Open Recent (có thể tìm bằng đường dẫn hoặc tìm
ở các mục bên dưới như hình).

C.3.2 Giao diện


Hình ảnh dưới đây là giao diện của Visual Studio khi vừa tạo xong một Project mới dùng Console App.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 70/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Có thể tùy chỉnh kích thước các ô cửa sổ Output, Solution Explorer,. . . bằng cách kéo thả và tắt mở hiển
thị các cửa sổ này trong bảng chọn View.
Để chỉnh màu nền và giao diện code, chọn Tools Options .

• Chỉnh màu nền trong Environment General Color Theme .

• Chỉnh phông và màu chữ trong Environment Fonts and Colors .

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 71/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Tham khảo thêm: https://docs.microsoft.com/vi-vn/visualstudio/ide/quickstart-personalize-the


-ide?view=vs-2019#set-the-color-theme-for-the-ide

C.3.3 Hướng dẫn biên dịch và chạy chương trình cơ bản


Bắt đầu biên dịch và chạy chương trình "Hello World".
Đoạn chương trình in ra “Hello World” đã có sẵn khi tạo bằng Console App.

Chú thích các phát biểu trong chương trình trên:

• #include <iostream>: là một chỉ thị tiền xử lý để thông báo cho bộ tiền xử lý đưa nội dung lớp iostream
vào trong chương trình để cung cấp các tính năng xuất/nhập dữ liệu.
• int main() {...}: khai báo hàm main(), đây là chương trình chính, được thực hiện trước tiên khi bắt
đầu thực hiện chương trình.
• std::cout << "Hello World!\n";: xuất xâu Hello World ra màn hình và xuống hàng (trong đó ký tự
\n là ký tự xuống hàng).
• Các dòng sau dấu // là ghi chú.
Để biên dịch và chạy chương trình có 2 cách:

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 72/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

1. Chọn Build Build Solution (ấn tổ hợp phím Ctrl + Shift + B ) hoặc Build Compile (ấn tổ hợp phím Ctrl +
F7 ). Khi không còn lỗi các bạn chọn Debug Start Without Debugging hoặc Ctrl + F5 để chạy.
Nếu cảm thấy khá chắc không có lỗi thì có thể chọn luôn Debug Start Without Debugging hoặc Ctrl + F5 để
chạy chương trình, chương trình cũng kiểm tra và hiện ra lỗi nếu có. Nhưng đối với những chương trình
lớn thì phải biên dịch trước khi chạy.

2. Dùng Terminal (mở bằng View Terminal hoặc Ctrl + ` ):


Sau khi viết xong chương trình, lưu lại như cách thông thường.
• Biên dịch theo cú pháp: g++ code_filename -o executable_filename
Chú thích:
– code_filename là tên file đang viết chương trình (đuôi .cpp).
– executable_filename là tên file thực thi (do người lập trình đặt khi biên dịch chương trình).
Lưu ý: Nếu biên dịch theo cách trên không được thì có thể đường dẫn trên Terminal chưa tới được
file code.
Một số máy sẽ là: g++ projectname\code_filename -o executable_filename
Trong đó: projectname là tên của Project đang làm.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 73/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Chạy chương trình theo cú pháp: .\executable_filename hoặc ./executable_filename

C.3.4 Lỗi cú pháp


Trong quá trình viết chương trình, một số lỗi cú pháp thông thường sẽ được thông báo ở Error List như hình
bên dưới.

• Khi biên dịch bằng cách thứ nhất, chương trình sẽ kiểm tra lỗi và thông báo ở cửa sổ Output (nếu không
hiển thị cửa sổ Output, chọn View Output ). Nếu có lỗi xảy ra, sẽ có thông báo tại cửa sổ Output và lỗi
hiển thị trong Error List. Khi nháy đúp vào lỗi trong Error List thì con trỏ sẽ di chuyển đến vị trí gây lỗi.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 74/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Khi biên dịch bằng cách thứ hai, lỗi sẽ thông báo ở Terminal và vị trí của lỗi được ghi cụ thể.

Lưu ý: Visual Studio có hỗ trợ điều chỉnh mức độ cảnh báo (warning), vấn đề này sẽ được hiểu rõ hơn trong
quá trình học tập.
Click chuột phải vào Project, chọn Properties Configuration Properties C/C++ General .

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 75/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Chọn Warning Level để điều chỉnh mức độ warning.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 76/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Chọn Treat Warnings As Errors, Yes để hiển thị tất cả warning, No để bỏ qua warning.

Tham khảo thêm: https://www.learncpp.com/cpp-tutorial/configuring-your-compiler-warning-and


-error-levels/

C.4 Debug
C.4.1 Mục đích của Debug
Debug là quá trình tìm kiếm ra lỗi hay nguyên nhân gây ra lỗi (bug ở đâu) để có hướng sửa lỗi (fix bug). Việc
kiểm soát lỗi của rất nhiều các dòng code là việc không hề đơn giản với những người lập trình viên chưa có
nhiều kinh nghiệm.
Mục đích của Debug không chỉ là để loại bỏ lỗi (error) khỏi chương trình mà quan trọng hơn còn để giúp lập
trình viên hiểu rõ hơn sự thực thi của chương trình. Một lập trình viên không có khả năng Debug hiệu quả thì
cũng giống như bị mù vậy.
Một công cụ khá mạnh để hỗ trợ debug đó là Debugger.
Tham khảo: https://topdev.vn/blog/debug-la-gi/

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 77/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

C.4.2 Các thành phần của Debugger


1. Breakpoint
Breakpoint là vị trí mà chương trình sẽ dừng lại để lập trình viên xem xét sự thay đổi trạng thái của
chương trình, các biến sau khi chạy những lệnh trước đó, từ đó phát hiện ra lỗi.
Breakpoint được đánh dấu bằng dấu chấm đỏ ở đầu dòng lệnh.
Để tạo breakpoint, cách đơn giản nhất là click chuột vào thanh dọc ở trước dòng lệnh như hình bên dưới.

Để hủy breakpoint thì chỉ cần click chuột vào đó một lần nữa.
Ngoài ra có thể tạo/hủy breakpoint bằng cách chọn dòng lệnh cần đặt breakpoint và nhấn F9 .
Có thế đặt nhiều breakpoint.
Trong quá trình debug có thể xem vị trí các breakpoint ở cửa sổ Breakpoints.

2. Locals
Cửa sổ Locals sẽ hiển thị tất cả các biến có liên quan đến dòng code hiện tại một cách tự động, các biến
hiển thị sẽ được thay đổi qua từng dòng code. Màu sắc của các biến giúp phân biệt giá trị biến nào vừa
thay đổi.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 78/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

3. Autos
Cửa sổ Autos sẽ hiển thị các biến vừa được sử dụng trong dòng code trước, Visual Studio sẽ tự động
nhận diện và loại bỏ những biến nào không còn cần thiết ra khỏi cửa sổ Autos.

4. Watch
Cửa sổ Watch là nơi lập trình viên có thể nhập tên biến, hàm,... trong phạm vi hiện tại để theo dõi sự
thay đổi giá trị của biến, hàm,... này trong quá trình debug.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 79/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Với đoạn chương trình trên, có thể nhập biến sum vào để theo dõi giá trị.

5. Call Stack
Cửa sổ Call Stack dùng để xem các lời gọi hàm và thủ tục hiện có trong Stack. Cửa sổ Call Stack sẽ hiển
thị tên của từng hàm kèm theo danh sách tham số, dòng code đang chạy, tên của ngôn ngữ lập trình,...

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 80/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Các thành phần của Debugger có thể mở trong bảng chọn Debug Windows trong quá trình debug.

C.4.3 Cách Debug


1. Chạy từng bước (step by step)
Cách này thường được dùng để rà soát lại cả chương trình.
• Chạy từng dòng
Để bắt đầu debug, chọn Debug Step Over hoặc nhấn phím F10 .
Khi đó chương trình sẽ bắt đầu debug từ dòng lệnh đầu tiên của hàm main.
Cứ mỗi lần F10 thì chương trình sẽ thực hiện một dòng lệnh.
Với cách chạy này thì khi gặp hàm được gọi, chương trình sẽ chạy lướt qua hàm, tức là chỉ nhận giá
trị return của hàm mà không nhảy vào hàm được gọi.
Dấu mũi tên vàng như trong hình dưới đây đánh dấu nơi con trỏ thực thi đang nằm hay nói cách
khác là đánh dấu dòng lệnh đã thực hiện tới (dòng lệnh chỉ vào hiện tại chưa thực hiện).

• Chạy từng lệnh


Cũng tương tự như chạy từng dòng nhưng ở đây nếu gặp hàm được gọi thì sẽ nhảy vào hàm được
gọi, tức là đi vào nội dung hàm con.
Để bắt đầu debug, chọn Debug Step Into hoặc nhấn phím F11 .

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 81/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

cứ mỗi lần F11 thì chương trình sẽ thực hiện từng lệnh, nếu gặp hàm con thì đi vào hàm con.

Có thể so sánh với cách chạy từng dòng bằng cách chạy đoạn chương trình trên bằng F10 .
Lưu ý: Có thể xen kẽ chạy từng dòng và chạy từng lệnh trong quá trình debug, nhưng lúc trong
hàm con thì không thể chạy từng dòng được.
2. Dùng breakpoint
Dùng breakpoint khi có nghi ngờ lỗi ở một vị trí nào đó, khi đó chạy từng bước từ đầu rất tốn thời gian
nên chỉ cần chạy từng bước tại vị trí nghi ngờ lỗi.
Đặt breakpoint, chọn Debug Start Debugging hoặc nhấn F5 .

Khi đó chương trình sẽ chạy và dừng lại tại vị trí breakpoint (trong trường hợp các lệnh trước đó phải tới
được breakpoint).

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 82/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Lưu ý: Câu lệnh tại vị trí breakpoint vẫn chưa được thực hiện.
Sau đó tiếp tục debug bằng F10 hoặc F11 như phần trên.
Conditional Breakpoint
Conditional Breakpoint sẽ được sử dụng khi người lập trình muốn đặt breakpoint tại vị trí thỏa mãn điều
kiện nào đó, thông thường được sử dụng trong vòng lặp.
Để mở conditional breakpoint, click chuột phải vào breakpoint và chọn Conditions...

Ví dụ trong vòng lặp for như đoạn chương trình trên, nếu muốn debug từ lúc i = 2 thì phải mở conditional
breakpoint và nhập i == 2 như trong hình dưới.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 83/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Chương trình sẽ dừng lại khi đến breakpoint và i = 2.

Step Out
Step Out (nhấn Shift + F11 ) là nhảy đến các breakpoint kế tiếp khi debug. Nếu không còn breakpoint nào
thì sẽ kết thúc debug. Ngoài ra nó còn có chức năng chạy lướt qua hàm con hiện tại.
Lưu ý: Có thể là nhảy giữa các breakpoint hoặc nhảy từ breakpoint đến chính nó trong vòng lặp.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 84/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Để kết thúc debug, chọn Debug Stop Debugging hoặc Shift + F5

C.4.4 Một số lưu ý trong quá trình debug


1. Nên nhớ các phím tắt trong Debugger
Các phím tắt rất hiệu quả trong việc thao tác nhanh khi debug.
Ngoài ra, nên nhận biết các biểu tượng của các lệnh điển hình.

• Conditional Breakpoint

• Start Debugging trên thanh công cụ

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 85/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Step Over trên thanh công cụ

• Step Into trên thanh công cụ

• Step Out trên thanh công cụ

• Stop Debugging trên thanh công cụ

2. Cửa số Output của file .exe chạy song song với các lệnh thực hiện
Chương trình chạy tới đâu thì Output xuất hiện tới đó.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 86/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

3. Giá trị của biến có thể được người lập trình thay đổi trong quá trình debug
Có thể xem giá trị của biến trong lúc debug bằng cách để con trỏ chuột vào biến trên màn hình.

Bên cạnh đó, có thể thay đổi giá trị của biến bằng cách nhấn vào ô hiển thị giá trị của biến.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 87/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

4. Trong lúc debug, thanh trạng thái sẽ có màu cam


Bình thường, thanh trạng thái sẽ có màu xanh nhưng trong lúc debug sẽ có màu cam giúp người lập trình
nhận biết có còn trong chế độ debug hay không.

C Hướng dẫn sử dụng cơ bản Visual Studio Trang 88/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

D Hướng dẫn sử dụng cơ bản XCode


D.1 Giới thiệu chung về XCode
XCode là bộ phát triển phần mềm tích hợp được Apple phát triển chạy trên hệ điều hành Mac để các lập trình
viên có thể phát triển phần mềm chạy trên các hệ điều hành của Apple như macOS, iOS,... .XCode được phát
hành miễn phí cho người dùng Mac download thông qua chợ ứng dụng App Store.
Xcode hỗ trợ nhiều ngôn ngữ lập trình khác nhau C/C++, Objective-C, Java, AppleScript, Python, Ruby,
ResEdit (Rez) và swift, với sự đa dạng các mô hình lập trình, ví dụ như Cocoa, Carbon và Java. Ngoài ra, phần
mềm của bên thứ 3 đã hỗ trợ phát triển cho GNU Pascal, Free Pascal, Ada, C#, Go, Perl, and D.
Trích: Wikipedia
Tham khảo thêm: https://developer.apple.com/xcode/
• Ưu điểm của XCode
– XCode là công cụ lập trình các ứng dụng chạy trên nền tảng của Apple (iOS, macOS,...) tốt nhất.
– Hỗ trợ mạnh mẽ cho ngôn ngữ Swift và C/C++/Objective-C.
– Hỗ trợ lập trình đa nền tảng với các nền tảng của Apple.
• Hạn chế của XCode
– Yêu cầu máy có cấu hình cao, chạy được macOS 10.15.2 hoặc mới hơn.

D.2 Cài đặt Xcode trên hệ điều hành macOS


Trong XCode và macOS đã tích hợp sẵn các công cụ cần thiết để lập trình C++ nên không cài thêm các công
cụ khác (như MinGW).
+ Tải về và cài đặt XCode trong Mac App Store.

D Hướng dẫn sử dụng cơ bản XCode Trang 89/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

+ Sau khi cài đặt, ta khởi động để thấy cửa sổ chào mừng như ở dưới. Để tạo project mới chọn Creat a new
XCode project

+ Để bắt đầu với C/C++, ta chọn hệ điều hành macOS, sau đó chọn Command Line Tool

D Hướng dẫn sử dụng cơ bản XCode Trang 90/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

+ Điền thông tin vào các mục và chọn ngôn ngữ C++ sau đó nhấn Next.

+ Chọn thư mục lưu trữ project.

D Hướng dẫn sử dụng cơ bản XCode Trang 91/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

+ Dưới đây là màn hình làm việc chính của XCode, ở trong file main.cpp đã có sẵn đoạn code in dòng "Hello,
World!". Để chạy chương trình, nhấn nút run ở góc trên bên trái màn hình.

+ Và ta được kết quả hiện thị ở cửa sổ Output như hình dưới.

D Hướng dẫn sử dụng cơ bản XCode Trang 92/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

D.3 Hướng dẫn biên dịch và chạy chương trình trong macOS
Sau khi viết xong chương trình chúng ta tiến hành biên dịch và chạy chương trình theo 2 cách sau:

Cách 1: Nhấn nút Run để biên dịch và chạy chương trình như vừa hướng dẫn ở phần trên.
Cách 2: Nhấn tổ hợp phím + B để build chương trình, nếu không có lỗi thì tiếp tục nhấn + R để
chạy chương trình.
Cách 3: Dùng Terminal của macOS.

+ Mở folder lưu trữ project. Ở trong folder sẽ có 1 folder cùng tên. Click chuột phải vào folder đó và chọn
New Terminal at Folder .

+ Dưới đây là màn hình Terminal của macOS, dùng lệnh ls để hiển thị các file và folder con trong folder hiện
tại.

D Hướng dẫn sử dụng cơ bản XCode Trang 93/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

D Hướng dẫn sử dụng cơ bản XCode Trang 94/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

+ Biên dịch theo cú pháp: g++ code_filename -o executable_filename


Chú thích:
• code_filename là tên file đang viết chương trình (đuôi .cpp).
• executable_filename là tên file thực thi (do người lập trình đặt khi biên dịch chương trình).
Lưu ý: Nếu biên dịch theo cách trên không được thì có thể đường dẫn trên Terminal chưa tới được file code.

+ Chạy chương trình theo cú pháp: .\executable_filename hoặc ./executable_filename

D Hướng dẫn sử dụng cơ bản XCode Trang 95/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

D.4 Debugging bằng breakpoint


Để đặt hoặc xóa breakpoint tại một dòng lệnh, có thể sử dùng phím + \ khi đang ở trên dòng lệnh đó.
Một biểu tượng màu xanh xuất hiện trước số thứ tự dòng chỉ dòng đó có breakpoint (như hình minh họa dưới
đây).

Hoặc cũng có thể click vào trước số thứ tự của dòng để tạo/xóa breakpoint. Breakpoint có thể được tạo/xóa
cả khi lập trình và trong lúc debug.
Sau khi đặt breakpoint, tiến hành debug bằng cách ấn F5 hoặc nút Run .

Chương trình dừng lại trước khi thực hiện lệnh được đặt breakpoint. Lúc này ở cửa sổ variable có các biến a
và b do đã được khởi tạo trước đó, cùng với giá trị của chúng.

Hình trên là thanh công cụ debug. Bao gồm:

• Breakpoint Activation : Dùng để ẩn/hiện tất cả breakpoint đang có trong chương trình. Khá hữu
dụng khi đã chắc chắn chương trình hết lỗi và muốn kết thúc nhanh.

D Hướng dẫn sử dụng cơ bản XCode Trang 96/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

• Continue/Pause button : Dùng để tiếp tục thực thi chương trình hoặc tạm dừng. Thông thường
chương trình sẽ tiếp tục thực thi cho đên khi gặp breakpoint tiếp theo.

• Step over : Thực thi dòng mã hiện tại. Bao gồm cả các hàm và phương thức.

• Step into : Nếu dòng lệnh có hàm, phương thức, chương trình sẽ tiếp tục ở dòng đầu tiên trong hàm,
phương thức đó.

• Step out : Hoàn thành nhanh hàm, phước thức hiện tại.
Trong ví dụ dưới đây, chương trình dừng ở dòng 15 (khi dừng ở dòng lệnh bất kì, dòng lệnh đó sẽ được tô nền
màu xanh lá).

Vì chương trình sẽ dừng trước khi thực thi dòng lệnh hiện tại nên ở cửa sổ output vẫn chưa được in ra giá trị
a và b. Nhấn continue để chương trình thực thi đến breakpoint tiếp theo (hình dưới).

D Hướng dẫn sử dụng cơ bản XCode Trang 97/98


Trường Đại học Bách Khoa, ĐHQG TP.HCM
Khoa Khoa học và Kĩ thuật Máy tính

Khi chương trình dừng ở dòng 17. Vì chương trình đã thực hiện dòng 16 nên giá trị biến a đã trở thành 20.

D Hướng dẫn sử dụng cơ bản XCode Trang 98/98

You might also like