Почему нет setjmp в пространстве имен std при включении <csetjmp>? - PullRequest
2 голосов
/ 29 октября 2011

Название говорит само за себя. После включения <csetjmp>, longjmp и jmp_buf находятся в пространстве имен std, а setjmp - нет. Я проверял это на MinGW4.5 и MSVC10. Заглянув в заголовок <csetjmp>, я не смог понять причину такого выбора. Я всегда предполагал, что каждый <cheader> файл содержит <header.h> в пространстве имен std.

Я не прав? В чем причина особого случая setjmp? Пожалуйста, просветите меня!

Примечание. Мне известны проблемы неправильного использования setjmp / longjmp в C ++.

1 Ответ

3 голосов
/ 29 октября 2011

setjmp может быть реализовано как макрос, поэтому в стандарте C ++ это сказано в 17.6.1.2 [headers]:

Имена, которые определены как макросы в C, должны быть определены как макросы в стандартная библиотека C ++, даже если C предоставляет лицензию для реализации как функции. [Примечание: имена, определенные как макросы в C, включают следующие: assert, offsetof, setjmp, va_arg, va_end и va_start. —Конечная записка]

Другими словами, это макрос.

...