为了让我的代码更符合C++风格而不是C风格,我想用
errno
替换std::errno
,用include <errno.h>
替换include <cerrno>
。
令我惊讶的是,这些不是“std::errno”!
众所周知,许多 C 事物都有 C++ 等价物。例如:
在c-source.c中,我们经常这样编写代码:
#include <string.h>
print( strerro(1) );
在c++source.cpp中,我们可以这样做:
#include <cstring>
std::cout << std::strerro(1);
为什么不存在
std::errno
而std::strerro
存在?
令我惊讶的是,这些不是“std::errno”!
这是因为,
errno
是一个预处理器宏。来自errno文档。它并不存在于命名空间中(实际上它没有命名空间等概念)。
errno 是一个预处理器宏,用于错误指示。它扩展为 int 类型的静态(C++11 之前)线程本地(C++11 起)可修改左值。
(强调我的)
这意味着我们不能在
errno
前面加上 std::
。