提问人:Scott O'Donnell 提问时间:1/15/2013 最后编辑:fredoverflowScott O'Donnell 更新时间:6/29/2018 访问量:5180
C/C++ 是一种语言还是两种语言?
Is C/C++ one language or two languages?
答:
它是两种语言。将 C++ 称为“带类的 C”就像称大象为四足动物一样。这似乎是真的,直到你把它比作鼠标。
有许多语言源自C:C++,Java,C#,JavaScript,csh,列表还在继续。它们在许多方面都不同,但它们具有相似的语法。
当然,C 源自 B。但那是另一回事了(没有人再关心B了。
评论
“C/C++”恰好是零语言。它不存在。
另一方面,C 是一种语言。
C++是另一种语言,它有点像C,但也有类和许多其他差异。
需要明确的是,@Zoidberg是正确的:
C 和 C++ 是两种完全不同的语言。C with Classes是C++的前身,但该术语仍然经常用于非现代C++(例如,到处使用原始指针)。
C++在1982-1983年与C分道扬镳,这在计算机时代是很长一段时间。但是,有许多兼容 C++ 的 C 库,包括 C 标准库本身,并且有源源不断的程序从 C 移植到 C++。许多 C 程序员只知道或使用与 C++ 兼容的功能。
它们由来自不同委员会的不同 ISO 标准定义。即使他们定义了兼容的功能,也经常用不同的术语来定义。
引用 C/C++ 与引用意大利语/西班牙语一样有效。您应该小心使用此类术语的对象和时间。但确实存在两个方向的思想传播,而且相似之处不仅仅是巧合。
评论
for
offsetof
简单答案:两种语言
它们是两种不同的语言,尽管几乎任何 C 代码都是有效(不一定是好的)C++ 代码。
C++ 最初被认为是“C,但有类”,但随着时间的推移,它越来越不同,现在 C 代码是非常糟糕的 C++ 代码。你可以学习 C 或 C++ 或两者兼而有之,但你通常不会将它们混为一谈(但你可以)。
评论
typedef struct foo {int a} foo;
是有效的 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++。每种语言都用于程序员所需的软件的目标。这就是 ANSI 将 C 作为标准的原因。
它们是两种不同的语言。C++之所以如此命名,是因为它的一部分植根于C,并且在某种意义上与C兼容。
根据Scott Myers的Effective C++,我们可以将C++视为具有以下4个组件的统一语言:
- C 语言部分、块、语句、预处理器等
- 面向对象的 C++:包括类、封装、继承、多态性等
- 模板 C++:包括 C++ 模板、元编程内容
- The STL.
因此,从某种意义上说,C++ 比 C 更强大。
“C”这个名字指的是一系列相关语言,其中一些被正式化为国际标准。这些包括K&R C,ANSI C,C99和C11。
“C++”这个名字指的是一系列相关语言,其中一些被正式化为国际标准。这些包括 C++98、C++03、C++11、C++14、 以及推测的 C++17。
许多人使用术语“C/C++”来非正式地指代 C 和 C++ 的交集,这是由 C++ 的设计者有意维护的。
C++的前身实际上最初被称为“C与类”。Bjarne Stroustrup 1994 年出版的《C++的设计与演变》一书中对此进行了详细描述。这个名字最终被改为“C++”,主要是出于对C社区的礼貌,因为人们把“C with Classes”缩短为“C”或“新C”太诱人了。
C++ 中有许多语言功能不是 C 语言的(反之亦然)。特别是,基于类的模型,由于其调用隐式函数调用的能力,非常强大,以至于 C++ 已经(相当有机地)发展了更高级别的编程风格,这使得 C++ 的典型用法与 C 的典型用法大不相同。最值得注意的例子是与“资源获取即初始化”的概念相关联,该概念体现在标准类 string、vector 和 shared_ptr 以及标准 I/O 库的流类中。
其他说明:
GCC 允许您指定要针对哪些语言变体进行编译(我敢肯定,其他编译器也是如此),但有一些限制。
C++98 和 C++03 具有最小的功能差异,并且通常被视为本质上相同的语言。
解决 C 和 C++ 的常见子集的首要问题:
评论
restrict
C/C++