为什么 setjmp 在包含 时不在 std 命名空间中?<csetjmp>

Why isn't setjmp in the std namespace when including <csetjmp>?

本文关键字:lt csetjmp gt 命名空间 包含 setjmp std 为什么      更新时间:2023-10-16

标题说明了一切。加入<csetjmp>后,longjmpjmp_bufstd命名空间中,而setjmp不在。我在MinGW4.5和MSVC10上验证了这一点。在查看<csetjmp>标题后,我无法找出这种选择的原因。我总是假设每个<cheader>文件都在std命名空间中包装了一个<header.h>

我错了吗?setjmp特例背后的理由是什么?请给我点化一下!

注意:我知道c++中setjmp/longjmp使用不当的问题

setjmp可以作为宏实现,因此c++标准在17.6.1.2 [headers]:

中有这样的规定:
在C语言中定义为宏的

名称在C语言中也定义为宏c++标准库,即使C授予实现许可作为功能。[注:C中定义为宏的名称包括assert, offsetof, setjmp, va_arg, va_end,和va_start。-end note]

也就是说,它是一个宏