是不是说“C / C ++”错了?

时间:2008-10-07 17:23:43

标签: c++ c

我已经看到很多关于使用不恰当的“C / C ++”表达的问题。 我认为的原因是:

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

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

无论如何,有些问题可以被认为是C或C ++。 你觉得怎么样?

17 个答案:

答案 0 :(得分:31)

C / C ++是C ++早期的坚持,它们比今天更加相似。这一开始并没有真正的错误,但总是越来越多。

基本结构足够相似,但大多数简单的问题在两者之间仍然有效。维基百科有关于此主题的完整文章:http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

由此产生的最大谬论是,因为有人精通C语言,他们在C ++方面同样擅长。

答案 1 :(得分:16)

请记住,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 ++”版本,因为它们具有很强的相似性。

答案 2 :(得分:8)

我们公司注意到以下奇怪的事实:如果求职者在他的简历中写了“高级C / C ++知识”,那么通常很有可能他真的不知道;)

答案 3 :(得分:6)

这两种语言截然不同,但它们有很多共同之处。很多C代码在C ++编译器上编译得很好。在早期学生级别,许多C ++代码仍然适用于C编译器。

请注意,在某些情况下,代码的含义可能在两个编译器之间以非常微妙的方式有所不同,但我认为在某些情况下即使在不同品牌的C ++编译器之间也是如此,如果你是愚蠢到可以依赖未定义或有争议/不符合的行为。

答案 4 :(得分:5)

是和否。

C和C ++共享很多共同点(实际上,大部分C都是C ++的子集)。

但是C更倾向于“强制编程”,而C ++除了C范例之外,还有更容易访问的范例,如函数式编程,通用编程,面向对象编程,元编程。

所以我看到“C / C ++”项目是“C和C ++的交集”或“熟悉C编程以及C ++编程”,具体取决于上下文。< / p>

现在,这两种语言确实不同,并且对类似问题有不同的解决方案。 C开发人员会发现很难“解析/理解”C ++源代码,而C ++开发人员不会轻易识别C源代码中使用的模式。

因此,如果你想在“C / C ++”表达式中看到C与C ++的距离,那么一个很好的比较是GTK + C教程,在C ++中是相同的(GTKmm):

C:GTK + Hello World: http://library.gnome.org/devel/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD

C ++:GTKmm Hello World: 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示例所示)

答案 5 :(得分:4)

我认为这更像是第二个答案 - 他们想要的东西很容易融入他们的项目中。

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

lisp中的答案将无法使用。但是C或C ++的答案都可以直接使用。

答案 6 :(得分:4)

是的,C / C ++很没用。它似乎是C ++新手主要使用的术语。我们C-only curmudgeons只是说“C”,经验丰富的C ++人知道它与C有多大差异,所以他们恰当地说“C ++”。

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

因此,正如Alex Jenter所说,任何熟悉这两种语言的人都不太可能会说C / C ++。说你知道如何在“C / C ++”中编程就像是说你知道如何在“Perl / PHP”中编程......确定它们有一些重要的相似之处,但它们实际使用方式的差异是巨大的

答案 7 :(得分:3)

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

我可以说我不是C的大师,也不是C ++的大师,但我真的擅长于10年前使用的那种特殊风格。 (我还在改进!)

答案 8 :(得分:3)

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

答案 9 :(得分:3)

我同意。我阅读了C标签RSS提要,我看到很多C ++问题都与C有关。

我也看到了很多这样的交流:

Asker:你怎么用C做这个? 答:将X库用于C ++ Asker:好的,有人真的在C中回答我的问题吗?

答案 10 :(得分:2)

  

不是说“C / C ++”错了吗?

不,不是。例如,Watcom International Corporation,founded more than 25 years ago,称他们的C和C ++编译器和工具集“Watcom C / C ++”,该产品仍然以开源形式开发并以OpenWatcom C/C++ < / p>

答案 11 :(得分:2)

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

答案 12 :(得分:1)

评论太长了,所以我不得不回答,但这是对Jeff B的回答。

  

请记住原件   C ++的实现就像   输出C代码的预编译器   '真正的'编译器。

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

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

答案 13 :(得分:1)

提出问题的人应该根据问题编写C,C ++或C / C ++。

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

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

答案 14 :(得分:1)

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

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

答案 15 :(得分:0)

我倾向于在我的问题中加入C / C ++。

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

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

答案 16 :(得分:-1)

不仅这两种语言不同,而且方法也不同。 C ++是一种OO语言,而C是程序语言。

我是否必须提及模板?

此外,C和C ++标准也存在差异。如果C中的某些东西很好,就不必用C ++编译