首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++包含整个C语言吗?

C++包含整个C语言吗?
EN

Stack Overflow用户
提问于 2015-07-19 20:04:22
回答 4查看 5.6K关注 0票数 11

我在教程中读到C++包含整个C编程语言。

不过,我也读到过,在like this的一些地方

如果您学习了C++,那么您最终将学习大部分C语言,随着时间的推移,您将学习的语言之间也会有一些不同。

所以我的问题只是:

如果我非常了解C++,我最终会学习“真实的”C语言(没有任何“差异”),因为完整的C90语言包含在C++11中吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-19 20:08:38

不,C++不是C语言的超集。虽然C++包含了很大一部分C,但是有一些细微的差别会在你最不期望的地方严重地咬你。下面是一些示例:

  • C有一个在C++中不存在的暂定定义的概念。
  • 在将void指针赋值给具体类型的变量时,C不需要显式转换。
  • C对const传播有不同的规则。
  • C有一个叫做“隐式int规则”的东西,虽然它被C99废除了,但它出现了一些时候,需要考虑。
  • C预处理器具有C++预处理器没有的一些特性。
  • C语言有两种类型的函数定义,K&R风格和Stroustrup风格.C++只具有Stroustrup风格.
  • C和C++的词法规则是不同的,两者都不是另一个子集
  • C和C++有不同的保留词集。这可能导致奇怪的错误,因为在另一种语言中不允许使用标识符。
  • 虽然C++从ANSI (C89)中获取了几乎所有的特性,但在随后的标准修订版中,许多特性被添加到了C++中不可用的标准修订版中。
  • C++有一种不同的语法,即使对于一些不新鲜的部分也是如此。例如,a ? b : c = d是C中的语法错误,但在C++中被解析为a ? b : (c = d)
  • C确保&*EE完全相同,即使E是空指针。C++没有这样的保证。
  • 在C中,初始化字符数组的字符串文本可以初始化至少与字符串一样长的数组,而不需要尾随的\0字节。(即char foo[3] = "bar"是合法的)。在C++中,数组必须至少与字符串(包括尾随的\0字节)一样长。
  • 在C中,像'A'这样的字符具有int类型。在C++中,它有char类型。
  • C有一个特殊的规则,使类型双关通过工会是合法的。C++缺乏这种语言,因此编写了如下代码 union intfloat { int i;float f;} fi;fi.f = 1.0;printf("%d\n",fi.i); 不明确的行为。
票数 19
EN

Stack Overflow用户

发布于 2015-07-19 20:10:39

如果我非常了解C++,我最终会学到“真实的”C语言(没有任何“差异”)

如果您正确地学习了C++,您可能不需要使用C中使用的许多标准技术,理论上您可以在C++中编写几乎任何C语言,除了已经引入的例外情况。然而,在现实中,您不会--或者不应该--这是因为C++是一种不同的语言,在优化使用时提供了非常不同的一组工具。

除了诸如一般语法和基本类型等非常基本的元素之外,这是两种独立进化的语言,它们应该被这样对待(学习,编程)。

票数 5
EN

Stack Overflow用户

发布于 2015-07-19 20:12:58

广义地说,C++语言本质上是C语言,并添加了大量面向对象的内容。几乎所有用C编写的代码都将在C++中编译和运行。

然而,语言中有几个角落是有差异的。随着时间的推移,这些语言的数量一直在缓慢增长,但是语言的变化还不够快,不足以成为一个重大的问题。

如果您只学习C++,那么是的,您最终也将学习C语言的几乎所有方面。如果您成为C++方面的专家,那么您将能够识别和理解C和C++的相似部分之间存在细微差异的地方。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31505402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档