2010-08-27 20 views
5

Linux có cung cấp xử lý ngoại lệ trong C mà không cần đến C++ không? Hoặc, những gì có thể là cách tốt nhất để thực hiện xử lý ngoại lệ như vậy? Mục đích là để tránh kiểm tra mã trả về cho mọi chức năng được gọi, nhưng làm điều gì đó giống như trong C++ đó là luồng an toàn và dễ dàng di chuyển.Xử lý ngoại lệ trong C mà không cần C++ trong Linux

+8

Những người đàn ông thực sự sử dụng setjmp()/longjmp(). –

+0

Cảm ơn bạn, sẽ kiểm tra điều đó. Có một lợi thế/bất lợi bằng cách sử dụng setjmp/longjmp trên tín hiệu như đề xuất dưới đây? – stefangachter

Trả lời

3

Tôi chưa bao giờ nghe nói về Linux cung cấp bất cứ thứ gì như thế, nhưng trang này mô tả thư viện xử lý ngoại lệ của bên thứ ba cho C: http://www.on-time.com/ddj0011.htm Tôi chưa thể tìm thấy liên kết tải xuống.

+0

Cảm ơn, trong khi đó tôi tình cờ gặp cùng một trang web, nhưng không thể tìm thấy mã nguồn. – stefangachter

+0

Ở đây, có một số suy nghĩ chung về xử lý excpetion và bình luận về việc thực hiện ở trên: http://landheer-cieslak.com/wordpress/error-handling-in-c/ – stefangachter

7

Bạn có thể xử lý tín hiệu bằng cách viết trình xử lý tín hiệu cho nó. Một số tín hiệu được ghi lại tại GNU là:

  • Tín hiệu lỗi chương trình: Được sử dụng để báo cáo lỗi chương trình nghiêm trọng.
  • Tín hiệu chấm dứt: Được sử dụng để làm gián đoạn và/hoặc chấm dứt chương trình.
  • Tín hiệu báo động: Được sử dụng để biểu thị hết giờ.
  • Tín hiệu I/O không đồng bộ: Được sử dụng để cho biết đầu vào có sẵn.
  • Tín hiệu kiểm soát công việc: Các tín hiệu được sử dụng để hỗ trợ kiểm soát công việc.
  • Tín hiệu lỗi hoạt động: Được sử dụng để báo cáo lỗi hệ thống hoạt động.
  • Tín hiệu khác: Tín hiệu khác.
  • Tin nhắn của tín hiệu: In một thông điệp mô tả một tín hiệu

Bạn có thể nhận được thông tin sâu hơn về here này. Nó khẳng định những điều sau đây mà tôi giả sử là những gì bạn đang tìm kiếm:

Nếu bạn dự đoán một sự kiện gây ra tín hiệu, bạn có thể định nghĩa một hàm điều khiển và nói với các hệ điều hành để chạy nó khi mà loại hình cụ thể tín hiệu đến.

+0

Cảm ơn gợi ý. Bạn có biết một số mã ví dụ sử dụng tín hiệu để xử lý expcetion không? – stefangachter

+0

Có các mã mẫu nếu bạn đọc liên kết trong bài đăng của tôi. –

1

Offtopic lẽ, nhưng tôi không thể cưỡng lại nó, xin lỗi.

Tôi phải nói, cơ chế ngoại lệ duy nhất thực sự tốt và toàn diện mà tôi đã thấy cho đến nay là xử lý ngoại lệ có cấu trúc SEH trong Windows.

CNTT thổi mô hình xử lý ngoại lệ C++ (làm tăng tay khi ngoại lệ được ném bên trong trình phá hủy của một đối tượng tự động trong quá trình tháo thư mục).

Cộng với đó là xử lý ngoại lệ thực sự thống nhất, vì nó kết hợp cả ngoại lệ phần mềm và phần mềm được tạo bởi phần cứng.

Vì vậy, nếu bạn muốn xử lý ngoại lệ - viết cho Windows, hoặc thực hiện một cái gì đó tương tự cho Linux.

P.S.Không giống như nhiều người nghĩ, xử lý ngoại lệ là xa hơn nhiều hơn là chỉ làm gián đoạn luồng chương trình thông thường bằng cách sử dụng jmp.

Đó cũng là một chuỗi các cuộc đàm phán về ai và cách xử lý ngoại lệ. Đó là (quan trọng nhất) - chính xác dọn dẹp thực hiện tại mỗi phạm vi, xử lý ngoại lệ lồng nhau và v.v.

1

Tôi có thể đề nghị bạn xem thư viện của tôi exceptions4c? Nó đã được thử nghiệm trên Linux và có nhiều tính năng, chẳng hạn như các khối finally, xử lý tín hiệu và loại đa hình cho phép bạn tạo cấu trúc phân cấp ngoại lệ. Nó cũng hỗ trợ đa luồng.

Các vấn đề liên quan