为什么 std::errno 不存在而“errno”存在?

Leo*_*eon 3 c++ namespaces std errno

为了让我的代码更符合C++风格而不是C风格,我想替换errno为std::errno,并替换include <errno.h>为include <cerrno>.

令我惊讶的是,这些都不是std::errno!

众所周知,许多 C 事物都有 C++ 等价物。举例来说:

在 c-source.c 中,我们通常这样编码:

#include <string.h>
print( strerro(1) );
Run Code Online (Sandbox Code Playgroud)

在c++source.cpp中,我们可以这样做:

#include <cstring>
std::cout << std::strerro(1);
Run Code Online (Sandbox Code Playgroud)

为什么存在却不std::errno存在std::strerro?

use*_*570 5

令我惊讶的是,这些不是“std::errno”!

这是因为,errno是一个预处理器宏。它并不存在于命名空间中(实际上它没有命名空间等概念)。来自errno 文档:

errno 是一个用于错误指示的预处理器宏。它扩展为 int 类型的静态(C++11 之前)线程本地(C++11 起)可修改左值。

(强调我的)

这意味着我们不能在前面errno加上std::.