- 我应该停止使用术语C / C ++吗?
绝对。除了可能混淆使用C和C ++代表使用该术语的人之外,尚不清楚该构造体打算表达什么。
由于这种困惑是造成挫折感的普遍原因,因此许多人对此感到非常激动,仅凭这个词的出现就足以使他们对您的贡献变得消极。这看似愚蠢,但这似乎是我们所拥有的。
我建议您不要谈论“ C / C ++”,而是使用一个实际上可以清楚说明您的意思的术语。
如果您谈论的是C语言中可能对C ++也可能不正确的事情,只需说C即可。
示例: 应如何main
在C中声明该函数?
乍一看,C ++的答案似乎是相同的:int main()
或int main(int, char**)
。但是随着讨论的进行,可能需要指出的是,在C ++中,必须在全局范围内声明函数,这在C语言中没有意义,因为它没有namespace
s。另一方面,C允许main
递归调用,而C ++不允许。在C ++中,return 0;
如果您“失败” ,则存在一个隐式,main
但在C中return
,任何路径上都需要该语句。清单继续进行,如果您事先弄清楚要讨论的语言是什么,它将使讨论变得更加简单。
如果您谈论的是C ++中可能不适合C的事情,只需说C ++即可。
例如: 将一malloc()
的ED阵列int
小号最初是全零在C ++?
C的简短答案恰好是相同的:不。但是随着答案的继续,可能值得指出的是,在C语言中,calloc
这将是一个很好的选择,而在C ++语言中,使用a std::vector<int>
可能是一个更好的选择。
如果要指出C和C ++之间的相似之处,请说C和C ++。
示例: 在C和C ++中,sizeof
an int
是定义的实现,在编译器和体系结构之间可能有所不同。
在这里,我们要指出C和C ++的行为方式相同。我们正在明确地谈论这两种语言。
实际上,我建议您更加具体,不仅要谈论“ C”或“ C ++”,还要谈论确切的版本。两种语言都在发展,诸如
C ++支持/* … */
和// …
注释,而C仅支持/* … */
样式。
既不对也不对。
- 如果对#1的回答是肯定的,那么我将如何调用混合使用C和C ++的程序?
由于语言重叠,因此每个C程序都将包含看起来像C ++的部分,反之亦然。但是,作者可能会选择使用C或C ++编译器。所以说,“该计划是写在ç ”如果它是一个C编译器和“程序是写在编译C ++ ”,如果他们使用C ++编译器,即使他们可能会拒绝使用任何现代C ++的功能。有些人将此类C ++代码称为C样式C ++。缺少重载,异常,多态性,模板和I / O流是此类代码的共同特征。
相反,如果有些文件是用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 ++ 11和C11中引入的内存模型和原子操作库就是一个很好的例子。似乎两种语言的设计者都意识到兼容性很重要,并且正在努力改进它。就个人而言,我希望合作更加紧密,两个ISO工作组甚至可以参加,但是我的愿望并不重要。
Bjarne Stroustrup在《 C ++编程语言》第四版的第44.3节中谈论了C和C ++的各种版本之间的区别和共性,具有讽刺意味的是,该标题为“ C / C ++兼容性”。在这种情况下,使用该术语实际上可能是适当的,因为很清楚是什么意思。
- 如果#4是肯定的,那么这种合作可能会在不久的将来随着现代C ++的出现而结束(11/14/17)
如上所述,它发生在C ++ 11中,并且有望/希望/需要再次发生。