g++;can';超控退出功能 我有一个C++程序,我想编译STD::退出并使用我自己的,即通过: -Dexit=myExit

g++;can';超控退出功能 我有一个C++程序,我想编译STD::退出并使用我自己的,即通过: -Dexit=myExit,c++,g++,clang,C++,G++,Clang,然而,我遇到了这个问题: In file included from /usr/include/c++/7/ext/string_conversions.h:41:0, from /usr/include/c++/7/bits/basic_string.h:6352, from /usr/include/c++/7/string:52, from /usr/include/c++/7/bits/

然而,我遇到了这个问题:

In file included from /usr/include/c++/7/ext/string_conversions.h:41:0,
                 from /usr/include/c++/7/bits/basic_string.h:6352,
                 from /usr/include/c++/7/string:52,
                 from /usr/include/c++/7/bits/locale_classes.h:40,
                 from /usr/include/c++/7/bits/ios_base.h:41,
                 from /usr/include/c++/7/ios:42,
                 from /usr/include/c++/7/istream:38,
                 from /usr/include/c++/7/sstream:38,
                 from tests/helpers.h:4,
                 from tests/helpers.cpp:1:
/usr/include/c++/7/cstdlib:146:11: error: ‘::exit’ has not been declared
   using ::exit;

我在virtualBox上运行它:Ubuntu18.04/18.10/Debian 10

而不是自己重写
exit
,这是非标准且有风险的,您可以使用
atexit
注册自己的函数在程序退出时执行

atexit
接受函数指针参数
(void(*func)(void))
,并注册要由
退出执行的函数(有关参考,请参阅)

使用这种方法,可以登记退出时执行的多个函数,另外,*EXT//COD>行为在C++标准中得到了很好的定义。 有关示例和文档,请参阅:


  • “谁告诉你这是你可以在C++中做的有效的事情?”布瑞恩,我也在MaOS中工作过,但不幸的是我真的需要在Linux中做这件事。最好的办法就是直接改变源代码来调用<代码> MyExt/<代码>。我必须能够在编译时执行此操作不幸的是,与在退出时运行“额外”代码不同,我更希望函数退出时抛出可以捕获的异常。从atexit regsiter引发异常仍然会导致程序终止。@jajabarr您能解释一下,异常将在哪里被捕获吗?你是在特殊的环境下跑步吗?我不认为C++运行时允许在退出时出现异常。