Có nên dùng try catch trong c không

Xử lý ngoại lệ - exception handling hiệu quả với try, catch, throw thông qua ví dụ trong C++.

Mọi đoạn chương trình được viết ra đều tiềm ẩn khả năng sinh lỗi. Có thể là lỗi chủ quan do lập trình sai hoặc có thể là lỗi khách quan do dữ liệu hay trạng thái của hệ thống [thiếu memory, mạng bị corrupt …]. Không dễ dàng để kiểm soát tất cả trường hợp của chương trình, đặc biệt các lỗi liên quan đến số học, bộ nhớ, … Vì thế, việc giải quyết các ngoại lệ để ứng dụng chúng ta tránh được những rủi ro là 1 điều không kém phần quan trọng.

Tổng quan

Exception – Ngoại lệ là cơ chế thông báo và xử lý những vấn đề tiềm ẩn phát sinh [giống như lỗi runtime] trong chương trình bằng cách chuyển quyền điều khiển đến những hàm đặc biệt nhằm tách phần xử lý lỗi ra khỏi thuật toán chính.

Một ngoại lệ là một đối tượng chứa thông tin về lỗi và truyền thông tin của lỗi cho bộ phận xử lý để có những hướng giải quyết phù hợp.

Ngoại lệ có thể thuộc bất kì kiểu dữ liệu bất kỳ của C++:

  • Có sẵn như int, char, int* , char* ,…
  • Kiểu người dùng tự định nghĩa.
  • Các lớp ngoại lệ trong thư viện

Cơ chế của ngoại lệ

Cơ chế

Quy trình gọi hàm và trả về trong trường hợp bình thường:

Quy trình ném và bắt ngoại lệ tại member_function[]:

Cơ chế xử lý ngoại lệ của C++ có 3 tính năng chính:

  • Khả năng tạo và ném ngoại lệ [sử dụng từ khóa throw].
  • Khả năng bắt và giải quyết ngoại lệ [sử dụng từ khóa catch].
  • Khả năng tách phần xử lý ngoại lệ ra khỏi phần có thể sinh lỗi [sử dụng từ khóa try].

Hướng giải quyết

Muốn bắt exception tại vị trí nào của chương trình thì ta phải đặt tại đó 1 đoạn code nhằm kiểm tra ngoại lệ. Đoạn chương trình này được đóng gói trong 1 khối try-block. Khi một ngữ cảnh thực thi tiếp nhận và truy nhập một ngoại lệ được coi là bắt ngoại lệ [catch the exception] thì nó được truyền đến phần xử lý ngoại lệ [exception handler]. Song, nếu không xảy ra bất cứ ngoại lệ nào thì chương trình được build bình thường và các bộ xử lý đều được bỏ qua.

Và quá trình truyền ngoại lệ từ ngữ cảnh thực thi hiện hành đến mức thực thi cao hơn - được gọi là ném 1 ngoại lệ [throw an exception] – bằng cách sử dụng từ khóa throw. Phần xử lý ngoại lệ được khai báo trong từ khóa catch dùng để xử lý ngay khi sau try-block.

Ví dụ đoạn chương trình sau:

// Exceptions
#include 
#include 
using namespace std;

int main[]
{
	try
	{
		throw string["String!"];
	}
	catch [string e]
	{
		cout 

Chủ Đề