标题说明了一切。之后包括<csetjmp>,longjmp和jmp_buf都在std命名空间中,但setjmp不是。我在 MinGW4.5 和 MSVC10 上验证了这一点。查看<csetjmp>标题后,我无法弄清楚这个选择的原因。我一直假设每个<cheader>文件都<header.h>在std命名空间中包装 a 。
我错了吗 ?setjmp特殊情况背后的基本原理是什么?请赐教!
注意:我知道在 C++ 中滥用 setjmp/longjmp 的问题。
setjmp 可以作为宏来实现,所以C++标准在17.6.1.2 [headers]中有这样的说法:
在 C 中定义为宏的名称应在 C++ 标准库中定义为宏,即使 C 授予作为函数实现的许可。[注:定义为C宏的名称包括:
assert,offsetof,setjmp,va_arg,va_end,和va_start。——尾注]
换句话说,它是一个宏。