【问题标题】:What is the difference between ANSI C 89 and C that supports by C++? [closed]ANSI C 89 和 C++ 支持的 C 有什么区别? [关闭]
【发布时间】:2011-09-26 11:26:16
【问题描述】:

我知道 ANSI C 89 和 C++ 支持的 C 之间存在一些差异。

例如在 ANSI C 89 中,您应该在块的第一行声明变量。

或者当你想声明struct变量时,你应该使用struct关键字(例如struct student std1;)。

或 // 对注释无效,您应该使用 /**/ 在 ANSI C 89 中进行注释。

例如,此 C 代码在 ANSI C 89 中无效:

struct student
{
  char* name;
};

enum number
{
  ODD,
  EVEN
};

void test()
{
  printf("Hello world!");
  int a, b; // Not valid in ANSI C 89, variables should declare at first line of blocks.
  student std1; // Not valid. It should be: struct student std1;
  struct student std2; // Valid.
  number n1 = ODD; // Not valid.
  enum number n2 = EVEN; // Valid.
}

我想使用 ANSI C 89 开发一个应用程序,我的问题是:

ANSI C 89 和 C++ 支持的 C 有什么区别?

【问题讨论】:

  • 你说的是C99吗? en.wikipedia.org/wiki/C99
  • “C++ 支持的 C”是什么意思?你说的是C99吗?大多数编译器,即使是支持 C99 的编译器,都允许您打开“严格 ANSI”选项,以便在使用非 ANSI 结构时发出警告或错误。
  • 什么是“C++支持的C”? C++ 是一种不同的语言,它以 C 为子集,但引入了许多变化和差异。
  • @yi_H:不!我想使用 ANSI C 89,因为某些编译器(例如 MS VC++)不支持 C99。
  • 没有“C++ 支持的 C”之类的东西。 C++ 是一种语言。 C是另一种语言。 C++ 允许 C89 中允许的许多事情——事实上,其中大部分是允许的。但是有很多 C++ 允许而 C 不允许的东西 - 例如关键字 classstd::vector。 C++ 标准比 C 标准长得多,这里的答案不可能列出所有的差异。只需从 K&R 等书籍中学习 C89。

标签: c++ c c89


【解决方案1】:

C++98/03 的 C 子集以 C89 为蓝本(显然,因为当时 C99 还没有出现); C++11 的版本是基于 C99 的。尽管如此,这两种语言是完全不同的,C++ 的 C 子集与 C 语言不同。

您实际上是在问“C++ 和 C 之间有什么区别”,这并不是一个真正合适的问题。

(例如,sizeof('a') 在 C 和 C++ 中是不同的,因此如果您使用的是 MSVC++,那么了解 C++ 建模的 C 标准对您毫无帮助)。

【讨论】:

  • +1 表示“C++ 的 C 子集与 C 语言不同”。这不是真的吗。
  • 您实际上是在问“C++ 和 C 之间有什么区别”,这不是一个真正合适的问题。 - 这意味着您的答案应该是真正的评论问题应该结束了,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 2016-12-05
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多