3

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

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

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

4

1 回答 1

5

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

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

换句话说,它是一个宏。

于 2011-10-28T23:42:06.270 回答