说"C/C++"错吗?

Isn't saying "C/C++" wrong?

本文关键字:错吗 C++      更新时间:2023-10-16

我看到很多问题都不正确地使用了"C/C++"表达式。我认为原因是:

  • 新手 C 和C++程序员可能不了解这两种语言之间的区别。
  • 人们并不真正关心它,因为他们想要一个通用、快速和"肮脏"的答案

虽然 C/C++ 有时可以被解释为"C 或 C++",但我认为这是一个很大的错误。C 和 C++ 提供了不同的编程方法,即使 C 代码可以很容易地实现到C++程序中,我认为用单一表达式 (C/C++) 来指代两种独立的语言是错误的><。

确实,无论如何,有些问题可以被视为C或C++问题。对此,你怎么看?

C/C++ 是 C++ 早期的坚持者,在那里它们比今天更相似。起初并没有真正出错,但这种情况一直在变得越来越严重。

基本结构非常相似,大多数简单的问题仍然可以在两者之间工作。有一篇关于这个主题的维基百科文章:http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

由此产生的最大谬误是,因为有人精通C,所以他们同样擅长C++。

请记住

,C++的原始实现只是作为预编译器,为"真正的"编译器输出C代码。 所有C++概念都可以在普通 C 中手动编码(但不是编译器强制的)。

"C/C++"在指编译器和其他语言/编程工具时也有效。 实际上,每个可用的C++编译器都可以编译 - 因此被称为"C/C++"编译器。 大多数人可以选择是否治疗。C 和 .基于扩展名的CPP文件,或将它们全部编译为C或全部编译为C++。

另请注意,从第一个 C/C++ 编译器开始,可以在单个编译器项目中混合 C 和C++源代码。 这可能是模糊语言之间界限的关键因素。

许多为C++创建的语言/编程工具也适用于 C,因为语言语法几乎相同。 许多语言工具都有单独的Java,C#,Python版本 - 但由于非常相似,它们只有一个适用于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 源中使用的模式。

因此,如果你想看看 C 与 "C/C++" 表达式中的C++有多远,一个很好的比较是 GTK+ C 教程,在 C++ (GTKmm) 中也是如此:

C : GTK+ 你好世界: http://library.gnome.org/devel/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD

C++ : GTKmm 你好世界: http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/sec-helloworld.html

阅读这些资源是非常有启发性的,因为就我解析它们而言,它们产生了完全相同的东西,"相同"的方式(就语言而言)。

因此,我想C/C++"表达"完全可以通过比较这些来源来表达。

:-)

所有这一切的结论是,如果在以下上下文中使用它是可以的:

  • 描述 C 和 C++ 的交集
  • 描述对 C 编程以及C++编程的熟悉程度
  • 描述兼容代码

但它不会用于:

  • 当不需要兼容性时,证明保留 C++(或 C)子集中的代码以与 C(或 C++)兼容(并且在大多数C++项目中,不需要它,因为非常有限)。
  • 断言 C 和 C++ 可以/应该以相同的方式编码(如上面的 GTK+/GTKmm 示例未显示的那样)

我认为这更像是第二个答案 - 他们想要一些容易集成到他们项目中的东西。

虽然 C 答案可能不是惯用语C++(反之亦然),但我认为这是C++的一大卖点——你基本上可以将 C 嵌入其中。 如果惯用答案很重要,他们总是可以用 STL/C++ 指定 C/C++/C++ 和 boost/等。

Lisp 中的答案将非常无法使用。 但是 C 或 C++ 中的答案将直接可用。

是的,C/C++ 是的。 这似乎是C++新手主要使用的术语。 我们这些只吃C的人只是说"C",有经验的C++人知道它与C的分歧有多大,所以他们正确地说"C++"。

即使 C (几乎)是C++的一个子集,这也对它们的实际用法没有任何影响。 实际上,每个有趣的 C 功能在现代C++代码中都是不受欢迎的:C 指针(改用迭代器/智能指针/引用)、宏(改用模板和内联函数)、stdio(改用 iostreams)等。

因此,正如Alex Jenter所说,任何精通这两种语言的人都不太可能说C/C++。 说你知道如何用"C/C++"编程就像说你知道如何用"Perl/PHP"编程......当然,它们有一些显着的相似之处,但它们实际使用方式的差异是巨大的。

C/C++通常意味着一种编程风格,就像C和类,或C和STL :-)从技术上讲,它C++,但利用了它最少的优点。

我同意。 我阅读了 C 标签 RSS 提要,我看到大量C++问题通过,这些问题实际上与 C 无关。

我也经常看到这种交流:

问:你是怎么用C语言做到这一点的?
答:使用 X 库进行C++。
问:好的,有人真的用C语言回答我的问题怎么样?

我自己使用这个术语,这是因为这是我的风格,我不使用 boost、stl 或其他一些东西,甚至不使用标准的 C++ 库,如"cout"和"cin",我编写 C 但使用类、模板和其他(非库)功能对我有利。

我可以说我不是C语言大师,也不是C++大师,但我真的很擅长我从10年前开始使用的那种特殊风格。(而且我还在进步!

我的印象是所有c代码都是有效的c ++代码。

说"C/C++"不是错了吗?

不,不是。例如,成立于25年前的Watcom International Corporation将他们的一套C和C++编译器和工具称为"Watcom C/C++",该产品仍然以开源形式开发并以OpenWatcom C/C++

如果这是一个复杂的问题,需要编写多个函数,是的,它可能是错误的。

如果只是询问有关sprintf或位操作的详细信息,我认为这可能是合法的(后者甚至可以标记为C/C++/Java/C #,我想......

问问题的人应该根据问题写 C、C++ 或 C/C++。

据我所知,你可以用C或C++的方式编写C++代码。两者都有效,但从长远来看,C++不是编写 C 风格的代码通常更容易维护。

最后,这一切都取决于特定的问题。如果有人问如何连接字符串,那么他想要 C 还是C++解决方案非常重要。或者,另一个例子,如果有人要求 qsort 算法。为了支持不同的类型,您可能希望将宏与 C 一起使用,将模板与 C++ 一起使用,等等。

这太

长了,无法发表评论,所以我不得不把它作为一个答案,但它是对 Jeff B 的回答的回应。

请记住,原版 C++的实现只是 输出 C 代码的预编译器 "真正的"编译器。

我有一个朋友(他写C++编译器 - 是的,复数),他会冒犯你的第一句话。 目标代码为 C 源代码的编译器与其他编译器一样是编译器。 编译器的本质是它理解语言的语法,并基于此生成新代码。 预处理器不了解该语言,只是重新格式化其输入。

请记住,编译这些C++编译器输出的 C 编译器本身将输出 ASM 代码,然后通过汇编程序运行。

我倾向于将C/C++放在我的问题中。

通常,我正在寻找可以在 c++ 应用程序中使用的东西。

如果代码是 C 或 C++ 那么我可以使用它,所以我宁愿不要只将可能的答案限制在一个或另一个。

不仅这两种语言不同,而且方法也不同。C++ 是一种面向对象语言,而 C 是过程语言。

我必须提到模板吗?

此外,C 和 C++ 标准也存在差异。如果 C 语言中某些内容很好,则不必用 C++ 编译