包含 <csetjmp> 时,为什么 std 命名空间中没有 setjmp?

ove*_*der 3 c++ std setjmp

标题说明了一切。之后包括<csetjmp>,longjmpjmp_buf都在std命名空间中,但setjmp不是。我在 MinGW4.5 和 MSVC10 上验证了这一点。查看<csetjmp>标题后,我无法弄清楚这个选择的原因。我一直假设每个<cheader>文件都<header.h>std命名空间中包装 a 。

我错了吗 ?setjmp特殊情况背后的基本原理是什么?请赐教!

注意:我知道在 C++ 中滥用 setjmp/longjmp 的问题。

MSN*_*MSN 5

setjmp 可以作为宏来实现,所以C++标准在17.6.1.2 [headers]中有这样的说法:

在 C 中定义为宏的名称应在 C++ 标准库中定义为宏,即使 C 授予作为函数实现的许可。[注:定义为C宏的名称包括:assertoffsetofsetjmpva_argva_end,和 va_start。——尾注]

换句话说,它是一个宏。

  • @overcoder:这是不可能的,因为宏名称只能是一个标识符。 (2认同)