Biến toàn cục trong C++ (Global variables in C++)

Khóa học lập trình C++ căn bản

5.0 (6 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 5 năm trước 106.171 lượt xem 3 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

01. Giới thiệu về C++ 02. Cài đặt môi trường phát triển (IDE) Visual studio 2015 03. Xây dựng chương trình C++ đầu tiên với Visual Studio 2015 04. Cấu trúc một chương trình C++ (Structure of a program) 05. Ghi chú trong C++ (Comments in C++) 06. Biến trong C++ (Variables in C++) 07. Số tự nhiên và Số chấm động trong C++ (Integer, Floating point) 08. Kiểu ký tự trong C++ (Character) 09. Kiểu luận lý và cơ bản về Câu điều kiện If (Boolean and If statements) 10. Nhập, Xuất và Định dạng dữ liệu trong C++ (Input and Output) 11. Hằng số trong C++ (Constants) 12. Toán tử số học, toán tử tăng giảm, toán tử gán số học trong C++ (Operators) 13. Toán tử quan hệ, logic, bitwise, misc và độ ưu tiên toán tử trong C++ 14. Cơ bản về chuỗi ký tự trong C++ (An introduction to std::string) 15. Biến cục bộ trong C++ (Local variables in C++) 16. Biến toàn cục trong C++ (Global variables in C++) 17. Biến tĩnh trong C++ (Static variables in C++) 18. Ép kiểu ngầm định trong C++ (Implicit type conversion in C++) 19. Ép kiểu tường minh trong C++ (Explicit type conversion in C++) 20. Cơ bản về Hàm và Giá trị trả về (Basic of functions and return values) 21. Truyền Giá Trị cho Hàm (Passing Arguments by Value) 22. Truyền Tham Chiếu cho Hàm (Passing Arguments by Reference) 23. Tiền khai báo và Định nghĩa Hàm (Forward declarations and Definitions of Functions) 24. Giới thiệu về cấu trúc điều khiển (Control flow introduction) 25. Câu điều kiện If và Toán tử điều kiện (If statements and Conditional operator) 26. Câu điều kiện Switch trong C++ (Switch statements) 27. Câu lệnh Goto trong C++ (Goto statements) 28. Vòng lặp While trong C++ (While statements) 29. Vòng lặp Do while trong C++ (Do while statements) 30. Vòng lặp For trong C++ (For statements) 31. Từ khóa Break and continue trong C++ 32. Phát sinh số ngẫu nhiên trong C++ (Random number generation) 33. Mảng 1 chiều trong C++ (Arrays) 34. Các thao tác trên Mảng một chiều 35. Mảng 2 chiều trong C++ (Two-dimensional arrays) 36. Các thao tác trên Mảng 2 chiều 37. Mảng ký tự trong C++ (C-style strings) 38. Các thao tác trên Mảng ký tự (C-style strings) 39. Từ khóa auto trong C++11.(The auto keyword) 40. Vòng lặp for each trong C++11 (For each loops) 41. Lớp dựng sẵn Array trong C++11 42. Con trỏ cơ bản trong C++ 43. Con trỏ NULL trong C++ (NULL pointers) 44. Con trỏ và mảng trong C++ (Pointers and arrays) 45. Các phép toán trên Con trỏ và Chỉ mục mảng trong C++ (Pointers and arrays) 46. Cấp phát động trong C++ (Dynamic memory allocation). 47. Cấp phát mảng động (Dynamically allocating arrays) 48. Con trỏ & Hằng trong C++ 49. Biến tham chiếu trong C++.(Reference variables) 50. Con trỏ void (Void pointers) 51. Con trỏ trỏ đến con trỏ (Pointers to pointers) 52. Cơ bản về lớp Vector 53. Truyền địa chỉ cho hàm (Passing arguments by address) 54. Hàm trả về giá trị, tham chiếu và địa chỉ trong C++(value, reference, and address) 55. Hàm nội tuyến trong C++ (Inline functions) 56. Nạp chồng hàm trong C++ (Function overloading) 57. Hàm có đối số mặc định trong C++ (Default arguments) 58. Con trỏ hàm trong C++ (Function pointers) 59. Đệ quy trong C++ (Recursion) 60. Khuôn mẫu hàm trong C++ (Function templates)

Biến toàn cục trong C++ (Global variables in C++)

Dẫn nhập

Ở bài học trước, bạn đã nắm được TẦM VỰC VÀ BIẾN CỤC BỘ TRONG C++ (Local variables), phạm vi hoạt động và vòng đời của một biến trong một chương trình.

Hôm nay, mình sẽ hướng dẫn về phần Biến toàn cục trong C++ (Global variables) và những kinh nghiệm khi sử dụng biến toàn cục trong lập trình.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài ta sẽ cùng tìm hiểu các vấn đề:

  • Tổng quan về tầm vực của biến
  • Biến toàn cục (global variables)
  • Sử dụng biến toàn cục (non-const) là nguy hiểm
  • Khi nào cần sử dụng biến toàn cục (non-const)

Tổng quan về tầm vực của biến

Trong bài học BIẾN TRONG C++ (Variables in C++), bạn đã biết được cách khai báo, khởi tạo và sử dụng một biến trong chương trình ra sao.

Khi chương trình được chạy, đến dòng lệnh này, một vùng trong bộ nhớ RAM sẽ được cấp cho biến nVarName này.

Ví dụ: RAM sẽ phải cấp phát vùng nhớ khi mỗi chương trình thực thi.

Biến toàn cục trong C++ (Global variables in C++)

Vậy câu hỏi đặt ra là: “Khi nào vùng nhớ của biến nVarName trong RAM được giải phóng?” Khi trả lời được câu hỏi này, bạn có thể giúp chương trình của mình sử dụng bộ nhớ một cách khoa học hơn. Bài học hôm nay sẽ giúp bạn trả lời câu hỏi đó.

Khi nói về biến, có 2 khái niệm quan trọng bạn cần biết:

  • Phạm vi của biến: Xác định nơi bạn có thể truy cập vào biến.
  • Thời gian tồn tại của biến: Xác định nơi nó được tạo ra và bị hủy.

Phạm vi của biến được phân làm 2 loại:

  • Biến cục bộ (Local variables)
  • Biến toàn cục (Global variables)

Trong bài học trước, mình đã chia sẽ cho các bạn về BIẾN CỤC BỘ TRONG C++ (Local variables). Hôm nay, mình sẽ nói về biến toàn cục (global variables) và những kinh nghiệm khi sử dụng nó.


Biến toàn cục (Global variables)

Các biến khai báo bên ngoài của khối lệnh được gọi là biến toàn cục.

Biến toàn cục có thời gian tĩnh, nghĩa là chúng được tạo ra khi chương trình bắt đầu và bị hủy khi nó kết thúc. Các biến toàn cục có phạm vi tập tin (file scope), hay gọi là "phạm vi toàn cầu" (global scope) hoặc "phạm vi không gian tên toàn cầu" (global namespace scope).

Định nghĩa biến toàn cục (Defining global variables)

Theo quy ước, biến toàn cục (global variables) được khai báo ở đầu của một tập tin, bên dưới #include.

Ví dụ:

Outputs:

Biến toàn cục trong C++ (Global variables in C++)

Trong chương trình trên, g_x g_y là 2 biến toàn cục, có thể truy cập 2 biến này ở bất kỳ đâu trong file mà nó được định nghĩa. Ở đây là 2 hàm doSomething() và main().


Phân biệt biến cục bộ và biến toàn cục

Tương tự như việc một biến bên trong một khối lệnh lồng nhau có thể có cùng tên với một biến ở khối lệnh bên ngoài, biến cục bộ trùng tên với biến toàn cục sẽ ẩn các biến toàn cục trong khối lệnh của biến cục bộ được định nghĩa.

Tuy nhiên, bạn có thể sử dụng toán tử phân giải phạm vi (scope operator :: ) để thông báo cho trình biên dịch biết đó là biến cục bộ hay biến toàn cục.

Ví dụ:

Outputs:

Biến toàn cục trong C++ (Global variables in C++)

Chú ý: Cần tránh việc đặt tên biến toàn cục (global variables) biến cục bộ (global variables) trùng nhau. Theo quy ước, nên đặt tiền tố "g_" trước các biến toàn cục (global variables). Điều này vừa giúp xác định các biến toàn cục cũng như tránh đặt tên xung đột với các biến cục bộ.


Sử dụng biến toàn cục là nguy hiểm

Biến toàn cục là một trong những khái niệm bị lạm dụng nhất trong lập trình. Mặc dù nó có vẻ vô hại trong các chương trình nhỏ, nhưng lại thường cực kỳ nguy hiểm ở những chương trình lớn.

Lập trình viên mới thường có thói quen sử dụng rất nhiều biến toàn cục, vì sử dụng nó khá đơn giản, bạn chỉ khai báo một lần và sử dụng nó trong tất cả các hàm của chương trình nếu bạn muốn. Tuy nhiên, đây không phải là một ý tưởng hay.

Nhiều nhà phát triển tin rằng nên tránh hoàn toàn việc sử dụng các biến toàn cục (non-const global variables). Ở đây đang nói về biến toàn cục (non-const), không phải nói về tất cả.


Tại sao phải tránh sử dụng biến toàn cục?

Lý do lớn nhất khiến biến toàn cục (non-const) nguy hiểm vì giá trị của nó có thể được thay đổi bởi bất cứ hàm nào mỗi khi hàm đó được gọi. Khiến lập trình viên khó kiểm soát được chuyện gì đang xảy ra với biến toàn cục của mình.

Ví dụ:

Outputs:

Biến toàn cục trong C++ (Global variables in C++)

Trong chương trình trên, chúng ta vừa gán giá trị g_nMode là 1, và sau đó gọi hàm doSomething(). Có thể bạn sẻ không biết chính xác hàm doSomething() có thay đổi giá trị của g_nMode hay không và nếu thay đổi thì sẽ thay đổi như thế nào. Do đó bạn sẽ khó mà kiểm soát tốt chương trình của bạn để chúng làm việc như mong muốn, đặc biệt là với những chương trình lớn.

Biến toàn cục (non-const) làm cho mỗi lời gọi hàm tiềm ẩn những nguy hiểm, lập trình viên khó kiểm soát được hàm nào đang tác động đến nó! Biến cục bộ (local variables) sẽ an toàn hơn vì mỗi hàm sẽ độc lập và không ảnh hưởng tới nhau.

Ở bài học trước, mình có nói qua 1 nguyên tắc: “Định nghĩa các biến cục bộ trong phạm vi nhỏ nhất có thể”, làm vậy sẽ giảm thiểu phạm vi ảnh hưởng của biến trong chương trình. Ngược lại, biến toàn cục có thể sử dụng bất cứ nơi nào, làm tăng phạm vi ảnh hưởng và khó kiểm soát đối với chương trình lớn.

Biến toàn cục cũng làm cho chương trình của bạn ít module kém linh hoạt.

Mỗi hàm thực hiện một chức năng khác nhau, truyền dữ liệu thông qua tham số (paramater), và nó hoạt động độc lập với nhau. Một hàm sử dụng biến toàn cục sẽ không thể tái sử dụng, và hoạt động độc lập được.


Khi nào cần sử dụng biến toàn cục (non-const)

Có nhiều cách để giải quyết vấn đề tránh sử dụng biến toàn cục (non-const). Nhưng trong một số trường hợp, sử dụng đúng đắn của các biến toàn cục (non-const) có thể làm giảm sự phức tạp cho chương trình.

Ví dụ trong trường hợp bạn có những loại dữ liệu muốn sử dụng cho toàn bộ chương trình. (configuration settings, database, …)


Kết luận

Qua bài học này, bạn đã nắm được Biến toàn cục trong C++ (Global variables) và những kinh nghiệm khi sử dụng biến toàn cục trong lập trình. Mình tóm tắt lại 2 nội dung quan trọng các bạn cần nắm trong bài học này:

  • Tránh sử dụng các biến toàn cục (non-const) nếu có thể! Nếu bạn phải sử dụng chúng, sử dụng chúng một cách hợp lý và thận trọng.
  • Biến hằng toàn cục (const) là tốt để sử dụng, miễn là bạn sử dụng quy ước đặt tên thích hợp.

Ở bài tiếp theo, bạn sẽ được học về BIẾN TĨNH TRONG C++ (Static variables).

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Biến toàn cục trong C++ (Global variables in C++) dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Tác giả/Dịch giả

Khóa học

Khóa học lập trình C++ căn bản

Hiện nay, C++ đã là cái tên rất quen thuộc trong ngành lập trình. Mặc dù C++ là ngôn ngữ lập trình đã ra đời khá lâu, nhưng không phải ai cũng có cơ hội để tìm hiểu về nó.

Vì vậy, Kteam đã xây dựng lên khóa học LẬP TRÌNH C++ CĂN BẢN để cung cấp một lượng kiến thức về ngôn ngữ C++ nói riêng, và các khái niệm khác trong lập trình nói chung.

Nội dung khóa học sẽ được phân tách một cách chi tiết, nhằm giúp các bạn dễ hiểu và thực hành được ngay. Serial dành cho những bạn chưa có bất kỳ kiến thức gì về lập trình, hoặc những bạn mất căn bản muốn lấy lại kiến thức nền tảng lập trình, cụ thể là C++.

Đánh giá

5.0
6 đánh giá
Đánh giá
5
6
4
3
2
1
win1702 đã đánh giá 9 tháng trước

rarl123 đã đánh giá 2 năm trước

Tien Dung đã đánh giá 3 năm trước

CryptTR đã đánh giá 4 năm trước

Kushy đã đánh giá 4 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Quân đã bình luận 8 năm trước
còn ra bài học mới ko ad... mấy cái câu lệnh lặp vs mảng em ko thấy
Không có video.