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

问题描述 投票:0回答:1

为了让我的代码更符合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
存在?

c++ stl namespaces std errno
1个回答
0
投票

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

这是因为,

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

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

(强调我的)

这意味着我们不能在

errno
前面加上
std::

© www.soinside.com 2019 - 2024. All rights reserved.