g ++无法覆盖退出功能

时间:2018-11-29 03:45:15

标签: c++ g++ clang

我有一个C ++程序,我想在其中编译std :: exit并使用自己的程序,即通过:

-Dexit=myExit

但是,我遇到了这个问题:

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上运行它:Ubuntu 18.04 / 18.10 / Debian 10

1 个答案:

答案 0 :(得分:1)

您可以使用exit注册自己的要在程序退出时执行的功能,而不是自己重写atexit(这是不标准的且有风险的)。

atexit使用一个函数指针参数(void (*func)(void)),并注册要由exit执行的功能(有关参考,请参见glibc exit.c source code)。

使用这种方法,您可以注册要在退出时执行的多个函数,此外,atexit行为在C ++标准中已得到很好的定义。

有关示例和文档,请参见: