Intereting Posts
Twisted C ++ code cudaMalloc Управляется с вектором <complex > C ++ – NVIDIA CUDA Инициализация значения: инициализация по умолчанию или инициализация нуля? Совет должен вставить одну строку в другую после получения текста из буфера обмена Почему заявление (не относящееся к делу), использующее объявление, согласовывает неоднозначность перегрузки с зависимым от аргумента поиска? C ++ обнаруживает существование свободных функций с явными параметрами Глобальная клавиатура с WH_KEYBOARD_LL и keybd_event (windows) Документация по кислородному программированию на языке C ++ Рекурсивные / итеративные функции OpenGL с Eclipse CDT + MinGW + GLEW + GLFW: Неопределенные ссылки Как я могу скопировать визуальный контент windows и поместить его в новое окно в win32 c ++? Проблема с шаблоном GCC Как преобразовать вектор в wchar_t **? Разница между вектором x; и vector x (const string & s) {} Можно ли гарантировать, что функция constexpr вызывается не более одного раза во время компиляции?

abort () не __declspec (noreturn) в VS2010

В моей копии VS2010 stdlib.h содержит (строки 353-355)

_CRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code); _CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); _CRTIMP void __cdecl abort(void); 

Мне странно, что на abort() нет annotations noreturn . Кто-нибудь знает причину этого? Это ошибка?

EDIT: В VS2008 это одно и то же, но строки 371-373 из stdlib.h

Отсутствие annotations noreturn вызывает ошибку C4716 .

Дальнейшая ссылка: предложение C ++ 0x для стандартизации annotations noreturn , в которой говорится, что abort должно нести ее.

EDIT: Похоже, что куча обсуждений исчезла с удаленным ответом, но суть его описана в отчете об ошибках # 048 .

Я думаю, что это определенно неправильно, потому что независимо от того, что задает std, реализация функции abort (), поставляемой с Visual Studio, никогда не вернется с прерывания. Вы не можете ничего сделать в обработчике сигнала для SIGABRT, который предотвратит вызов _exit (3) в конце реализации функции abort () Visual Studio (я смотрю на файл abort.c, строка 137 в источниках, поставляемых с VS 2005).

Так как __declspec (noreturn) является реализацией, и поскольку реализация прерывания в Visual Studio никогда, никогда не возвращается нормально, abort () следует пометить с помощью __declspec (noreturn).

Из этого следует, что отсутствие – ошибка.

Я думаю, вы должны сообщить об этом как об ошибке на странице https://connect.microsoft.com/VisualStudio/