g ++ не может переопределить функцию выхода - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть программа на С ++, где я хочу скомпилировать 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 голосов
/ 29 ноября 2018

Вместо того, чтобы самостоятельно переопределять exit, что является нестандартным и рискованным, вы можете зарегистрировать свои собственные функции, которые будут выполняться при выходе из программы, используя atexit.

atexit принимает параметр указателя функции (void (*func)(void)) и регистрирует эту функцию, которая будет выполняться exit (для справки см. исходный код glibc exit.c ).

При таком подходе вы можете зарегистрировать несколько функций, которые будут выполняться при выходе, плюс поведение atexit четко определено в стандарте C ++.

Примеры и документацию см. В

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...