为什么在包含时 setjmp 不在 std 命名空间中?
标题说明了一切。包含
后,longjmp
和 jmp_buf
位于 std
命名空间中,但 setjmp< /代码>不是。我在MinGW4.5和MSVC10上验证了这一点。在查看
标头后,我无法弄清楚此选择的原因。我一直假设每个
文件都在 std
命名空间中包装
。
我错了吗? setjmp
特殊情况背后的基本原理是什么?请赐教!
注意:我知道在 C++ 中滥用 setjmp/longjmp 的问题。
The title say it all. After including <csetjmp>
, longjmp
and jmp_buf
are in the std
namespace, but setjmp
is not. I verified this on MinGW4.5 and MSVC10. After looking into the <csetjmp>
header, I could not figure out the reason of this choice. I was always assuming that every <cheader>
file is wrapping a <header.h>
in the std
namespace.
Am I wrong ? What's the rationale behind the setjmp
special case ? Please enlighten me !
Note : I'm aware of the issues of misusing setjmp/longjmp in C++.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
setjmp
可以实现为宏,因此 C++ 标准在 17.6.1.2 [headers] 中有这样的规定:换句话说,它是一个宏。
setjmp
can be implemented as a macro, so the C++ standard has this to say in 17.6.1.2 [headers]:In other words, it's a macro.