gpt4 book ai didi

c++ - C++包含整个C语言吗?

转载 作者:行者123 更新时间:2023-11-30 16:38:24 24 4
gpt4 key购买 nike

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

但是我也在一些地方读过like this那个

If you learn C++ you will eventually learn most of C with some differences between the languages that you will learn over time.

所以我的问题只是这样:

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

最佳答案

不,C++ 不是 C 语言的超集。虽然 C++ 包含 C 的很大一部分,但其中存在一些细微的差异,这些差异可能会在您最意想不到的地方给您带来严重的影响。以下是一些示例:

  • C 具有 C++ 中不存在的暂定定义概念。
  • C 在将 void 指针赋值给具体类型的变量时不需要显式转换。
  • C 对于 const 传播有不同的规则。
  • C 有一种称为“隐式 int 规则”的东西,尽管 C99 废除了该规则,但它有时会出现并需要考虑。
  • C 预处理器具有 C++ 预处理器所没有的一些功能。
  • C 语言有两种函数定义风格:K&R 风格和 Stroustrup 风格。 C++ 只有 Stroustrup 风格。
  • C 和 C++ 的词法分析规则不同,两者都不是对方的子集
  • C 和 C++ 有不同的保留字集。这可能会导致奇怪的错误,因为其他语言不允许使用标识符。
  • 虽然 C++ 几乎采用了 ANSI C (C89) 的所有功能,但在后续标准修订版中向 C 添加了许多 C++ 中不具备的功能。
  • C++ 有不同的语法,即使对于某些不新鲜的部分也是如此。例如,a ? b : c = d 是 C 中的语法错误,但解析为 a ? b : (c = d) 在 C++ 中。
  • C 保证 &*EE 完全相同,即使 E 是空指针。 C++ 没有这样的保证。
  • 在 C 语言中,初始化字符数组的字符串文字可以初始化一个至少与不带尾部 \0 字节的字符串一样长的数组。 (即 char foo[3] = "bar" 是合法的)。在 C++ 中,数组必须至少与包含尾随 \0 字节的字符串一样长。
  • 在 C 语言中,像 'A' 这样的字 rune 字具有 int 类型。在 C++ 中,它的类型为 char
  • C 有一个特殊的规则,使通过 union 的类型双关变得合法。 C++ 缺乏这种语言,使得代码如

    union intfloat {
    int i;
    float f;
    } fi;

    fi.f = 1.0;
    printf("%d\n", fi.i);

    未定义的行为。

关于c++ - C++包含整个C语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com