合法地转发声明 C 标准库实体,但不C++标准库实体

Legal to forward declare C standard library entities but not C++ standard library entities?

本文关键字:标准 实体 但不 C++ 转发 声明      更新时间:2023-10-16

C标准库中的实体可以在C++中合法地向前声明吗?

我刚刚问了同样的问题,但对于 C,到目前为止,答案似乎是肯定的。

在 C 标准库中前向声明实体?

我知道由于上面链接的问题中给出的原因,C++标准库中的实体无法向前声明。在考虑这个问题之前,我会说 C 标准库是 C++ 标准库的一部分,因此 C 标准库中的实体不能在 C++ 中向前声明。

现在我不确定。如果 C++ 标准规定了 C 标准库的一些内容而 C 标准没有,那将是令人惊讶的。

我的理解是,在实践中,C++的实现往往带有 C 的实现,并且每个都使用相同的头文件和库(但可以选择重命名为 C++)。因此,在实践中,C 标准库中实体的前向声明可能会在C++中编译得很好。不过,我很好奇C++标准规定了什么。

问题是 C++ 和 C 在对象级别不兼容......例如,写法就不同了:

double atof(const char *);

extern "C" {
    double atof(const char *);
}