转发声明C标准库实体而不是C++;标准库实体? < C++标准库中的实体是否可以合法地在C++中被声明?

转发声明C标准库实体而不是C++;标准库实体? < C++标准库中的实体是否可以合法地在C++中被声明?,c++,language-lawyer,c++-standard-library,C++,Language Lawyer,C++ Standard Library,我只是问了同样的问题,但对于C,到目前为止,答案似乎是肯定的 我知道C++标准库中的实体不能被声明,因为上面链接问题中给出的原因。在考虑这个问题之前,我会说C标准库是C++标准库的一部分,因此C标准库中的实体不能在C++中被转发。 现在我不确定。这将是令人惊讶的,如果C++标准规定一些关于C标准库,C标准不。 我的理解是,在实践中,C++的实现往往是C实现的,并且头文件和库都是用在每个(但可选地为C++重写)。因此,在实践中,C标准库中的实体的正向声明可能会在C++中编译得很好。不过,我对C+

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

<>我知道C++标准库中的实体不能被声明,因为上面链接问题中给出的原因。在考虑这个问题之前,我会说C标准库是C++标准库的一部分,因此C标准库中的实体不能在C++中被转发。 现在我不确定。这将是令人惊讶的,如果C++标准规定一些关于C标准库,C标准不。
我的理解是,在实践中,C++的实现往往是C实现的,并且头文件和库都是用在每个(但可选地为C++重写)。因此,在实践中,C标准库中的实体的正向声明可能会在C++中编译得很好。不过,我对C++标准的任务感到好奇。

< P>问题是C++和C在对象级别上不兼容…例如,写以下内容是不同的:

double atof(const char *);


问题是C++和C在对象级别上不兼容。例如,写以下内容是不同的:

double atof(const char *);


问题是C++和C在对象级别上不兼容。例如,写以下内容是不同的:

double atof(const char *);


问题是C++和C在对象级别上不兼容。例如,写以下内容是不同的:

double atof(const char *);


名字弄乱是我没想到的一个很好的观点。不过,如果你显示的第一个正向声明不合法,那就很奇怪了。就我所记得的,只有一个非常晦涩的编译器,即Solaris上的CC,诊断出C和C++之间的不匹配。但这纯粹是一件正式的事情,可以关闭。实际问题是,当您需要一个静态类成员函数作为C回调函数时,对于纯形式的回调函数,您必须引入一个额外的
extern“C”
函数来调用您想要使用的函数。有一段时间我并不知道,只是很高兴地使用了普通的静态成员函数。现在我知道了,我认为语言在这方面需要改进…
double-atof(const-char*)#include
在大多数平台上都无法编译。在linux上,偶数
extern“C”double-atof(const-char*)#包含< /COD>不编译,因为<代码> SUBER()/Cyto> .CalthHth.-阿尔夫是的,Sun C++确实在Solaris和Linux上诊断了这一点。但是在Sun(现在Oracle)的文档中,提到了一些其他编译器,一个具有C链接的函数不与具有C++链接的函数兼容。在其他编译器上,“修复”语言以要求对类型进行相同的处理几乎是不可能的。我知道EDG前端也可以跟踪语言链接,但使用EDG前端的编译器是否利用了这一点,就留给那些编译器了。@Cheersandhth.-Alf无论如何,这里的问题不在于函数类型的语言链接,而在于名称的语言链接是一个更大的问题,几乎每一个实现都有。名称混乱是我没有想到的一个非常好的观点。不过,如果你显示的第一个正向声明不合法,那就很奇怪了。就我所记得的,只有一个非常晦涩的编译器,即Solaris上的CC,诊断出C和C++之间的不匹配。但这纯粹是一件正式的事情,可以关闭。实际问题是,当您需要一个静态类成员函数作为C回调函数时,对于纯形式的回调函数,您必须引入一个额外的
extern“C”
函数来调用您想要使用的函数。有一段时间我并不知道,只是很高兴地使用了普通的静态成员函数。现在我知道了,我认为语言在这方面需要改进…
double-atof(const-char*)#include
在大多数平台上都无法编译。在linux上,偶数
extern“C”double-atof(const-char*)#包含< /COD>不编译,因为<代码> SUBER()/Cyto> .CalthHth.-阿尔夫是的,Sun C++确实在Solaris和Linux上诊断了这一点。但是在Sun(现在Oracle)的文档中,提到了一些其他编译器,一个具有C链接的函数不与具有C++链接的函数兼容。在其他编译器上,“修复”语言以要求对类型进行相同的处理几乎是不可能的。我知道EDG前端也可以跟踪语言链接,但使用EDG前端的编译器是否利用了这一点,就留给那些编译器了。@Cheersandhth.-Alf无论如何,这里的问题不在于函数类型的语言链接,而在于名称的语言链接是一个更大的问题,几乎每一个实现都有。名称混乱是我没有想到的一个非常好的观点。不过,如果你显示的第一个正向声明不合法,那就很奇怪了。就我所记得的,只有一个非常晦涩的编译器,即Solaris上的CC,诊断出C和C++之间的不匹配。但这纯粹是一件正式的事情,可以关闭。实际问题是,当您需要一个静态类成员函数作为C回调函数时,对于纯形式的回调函数,您必须引入一个额外的
extern“C”
函数来调用您想要使用的函数。有一段时间我并不知道,只是很高兴地使用了普通的静态成员函数。现在我知道了,我认为语言在这方面需要改进…
double-atof(const-char*)#include
在大多数平台上都无法编译。在linux上,偶数
extern“C”double-atof(const-char*)#包含< /COD>不编译,因为<代码> SUBER()/Cyto> .CalthHth.-阿尔夫是的,Sun C++确实在Solaris和Linux上诊断了这一点。但是在Sun(现在的Oracle)的文档中提到,对于其他一些编译器,带有C链接的函数与a不兼容