Различные способы выйти из процесса в C++

Это новая проверка, введенная в v. 11 - она ​​проверяет, есть ли ссылка на модуль, используемый в коде, с помощью оператора require (). Эта проверка, действительно, является избыточной для тестов мокко («описывать» и другие вещи не нужно явно требовать, поскольку они добавляются в глобальную область видимости Мокко). Вы можете отключить эту проверку или отключить ее для «описания», «ее» и т. Д. (См. https://www.jetbrains.com/webstorm/help/suppressing-inspections.html ). Другой вариант: создать настраиваемую область с исключенными вашими спецификационными файлами («Настройки» / «Внешний вид» и «Поведение / области действия»), затем выберите эту область для проверки «Отсутствует требование () оператора» (Настройки / Редактор / Инспекции / Javascript / Node.js).

Билет по теме: WEB-18768

10
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

Вкратце: Единственное абсолютно безопасное решение - разрешить main () или вашей функции потока возвращать .

Стандарт C ++ гарантирует (3.6.3 / 1, 18.3), что деструкторы для глобальных объектов (включая статические объекты) будут вызываться при вызове exit () , однако он явно указывает, что деструкторы для локальные переменные не в этом случае будут вызываться. exit () вызовет любые функции, зарегистрированные в atexit () , а также сбросит и закроет все открытые потоки stdio (включая как минимум stdin , ] stdout , stderr ).

Вызов abort () гарантированно не вызовет локальные или глобальные деструкторы. Он также не будет вызывать функции, зарегистрированные с помощью atexit () , или сбрасывать потоки stdio.

Вызов любого примитива Win32, такого как ExitProcess () или ExitThread () , приведет к конечно, не вызывает деструкторы для локальных переменных и почти наверняка не будет вызывать деструкторы для глобальных объектов или любые функции, зарегистрированные с помощью atexit () . Вызывать эти функции непосредственно в программе C ++ не рекомендуется - в основном, эти функции Win32 и библиотека времени выполнения C ++ ничего не знают друг о друге. Фактически, даже документация MSDN для ExitThread () советует, чтобы программы на C ++ возвращались из функции потока вместо вызова ExitThread () .

14
ответ дан 4 December 2019 в 01:03
поделиться

См. Исходный код ExitProcess () (размещен на compuserve, usenet)

-3
ответ дан 4 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: