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
Trả lời
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.
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
Ở đâ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
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.
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
Có các mã mẫu nếu bạn đọc liên kết trong bài đăng của tôi. –
Hạt nhân thực hiện việc này bằng cách sử dụng goto để chuyển đến phần tách.
Xem ở đây cho các tiêu chuẩn mã hóa: http://lxr.linux.no/linux+v2.6.34/Documentation/CodingStyle
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.
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.
- 1. Xử lý ngoại lệ CPU trong C++
- 2. Xử lý ngoại lệ trong Obj-C
- 3. xử lý ngoại lệ trong C#
- 4. Xử lý ngoại lệ C++
- 5. c + + xử lý ngoại lệ
- 6. Xử lý ngoại lệ với TPL mà không cần Wait()
- 7. Có thể bắt ngoại lệ mà bạn không thể xử lý (trong C#) không?
- 8. Xử lý ngoại lệ Floating-Point trong C++
- 9. C#: Xử lý ngoại lệ trong cuộc gọi đệ quy
- 10. Xử lý các ngoại lệ C++ tùy chỉnh trong Cython
- 11. Enable Xử lý ngoại lệ an toàn trong C++ Builder
- 12. Liên kết với mã mà không hỗ trợ xử lý ngoại lệ (C++/LLVM)
- 13. Object-C hoặc Objective C++ có thể xử lý ngoại lệ C++ không?
- 14. Tăng sự kiện trong C# mà bỏ qua ngoại lệ do người xử lý nêu ra
- 15. Tại sao ngoại lệ win32 không bị bắt bởi cơ chế xử lý ngoại lệ C#
- 16. Xử lý ngoại lệ UserInterrupt trong Haskell
- 17. xử lý ngoại lệ ObjC trong monotouch
- 18. Xử lý lỗi STL mà không có ngoại lệ
- 19. Xử lý ngoại lệ chưa xử lý trong .NET 1.1
- 20. C++ Ngoại lệ chưa xử lý - cách gỡ lỗi
- 21. ngoại lệ xử lý trong Boost.Asio
- 22. Xử lý ngoại lệ bằng cách sử dụng C# Attribute
- 23. Camel - xử lý ngoại lệ trong
- 24. Xử lý ngoại lệ toàn chức năng trong C++ - đó có phải là kiểu xấu không?
- 25. Ném ngoại lệ trong bộ xử lý ngoại lệ
- 26. Thực hiện xử lý ngoại lệ GCC C++
- 27. Xử lý ngoại lệ trong AppDomain.CurrentDomain.UnhandledException
- 28. Ngoại lệ chưa xử lý trong Flup
- 29. Sự kiện xử lý sự kiện trong C# có bao giờ tăng ngoại lệ không?
- 30. Xử lý ngoại lệ C#, mệnh đề nào cần sử dụng?
Những người đàn ông thực sự sử dụng setjmp()/longjmp(). –
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