参见英文答案 >
How to override exit(),perhaps by throwing exception3个
我正在使用C语言的C / Fortran库,并且库调用exit().我希望它抛出异常,以便调用我的C程序中的析构函数.我已经能够创建一个抛出异常的exit定义,但是仍然会调用terminate.是否阻止终止被调用并允许正常的异常处理发生?
我正在使用C语言的C / Fortran库,并且库调用exit().我希望它抛出异常,以便调用我的C程序中的析构函数.我已经能够创建一个抛出异常的exit定义,但是仍然会调用terminate.是否阻止终止被调用并允许正常的异常处理发生?
更新:在评论中指出,这适用于x64但在x86上失败,因此主要问题是“有没有办法让x86像x64一样工作?”.
更新2:请参阅我的回复,了解为什么这不适用于x86以及如何解决它.
这是我的测试代码:
test_exception.c
#include <stdlib.h> void call_c() { exit(1); }
test_exception.cpp
#include <iostream> #include <stdexcept> extern "C" void call_c(); extern "C" void exit(int value) { throw std::runtime_error(std::string("Throwing an exception: ") + char('0' + value)); } int main() { try { call_c(); } catch (const std::exception &e) { std::cerr << e.what() << std::endl; return 1; } return 0; }
使用以下命令构建:
gcc -c test_exception.c -o test_exception_c.o g++ -c test_exception.cpp -o test_exception_cpp.o g++ test_exception_c.o test_exception_cpp.o -o test_exception
解决方法
原文地址:https://www.jb51.cc/c/118859.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。