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

时间:2014-12-31 11:34:36

标签: c++ language-lawyer c++-standard-library

C标准库中的实体能否合法地在C ++中进行前向声明?

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

Forward declare entities in C standard library?

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

现在我不确定。如果C ++标准强制要求C标准库没有C ++标准库,那将是令人惊讶的。

我的理解是,在实践中,C ++的实现往往带有C的实现,并且每个都使用相同的头文件和库(但是可选地重新命名为C ++)。所以在实践中,C标准库中实体的前向声明很可能在C ++中编译得很好。不过,我对C ++标准的要求很好奇。

1 个答案:

答案 0 :(得分:3)

问题是C ++和C在对象级别不兼容......例如,它与写入不同:

double atof(const char *);

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