什么是“Clean C”,它与标准C有什么不同?

问题描述:

C++中纯C和C之间的区别是什么? 我想知道一些关于Lua基于的“Clean C”的细节。有谁知道这些功能?什么是“Clean C”,它与标准C有什么不同?

+0

请选择一个问题。 – 2012-03-14 01:40:21

+0

什么是纯C? – CppLearner 2012-03-14 01:40:46

+0

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B – 2012-03-14 01:41:13

清洁Ç在哈比森&斯蒂尔书(C: A Reference Manual,Prentice Hall出版社)创造的术语。据说如果一个程序可以由一个标准C编译器和一个标准C++编译器编译,那么这个程序就是用Clean C编写的;它的执行不会产生两个编译器可观察到的不同行为(优化问题无关紧要)。

+0

@pst“是Harbison&Steele书中的一个术语”是不是参考? – Mysticial 2012-03-14 02:15:13

+0

@pst我找不到我的H&S副本中的页码,但有很多人在comp.lang.c中提到这个词和H&S – ouah 2012-03-14 02:20:52

+1

试试看1.1.5节_Standard C++ _(第5版C:ARM)。 – ldav1s 2012-03-14 02:43:16

让我觉得最明显的一点是,在C++中,您必须投射malloc的返回值。结构也自动以C++进行typedefed。

对C代码总是使用C编译器,而不是C++。 C++是不与C.

完美兼容

甲其他一些差异可能是:

  • 在C,声明空隙FUNC();声明一个没有指定参数的函数,而在C++中,void func();相当于C void func(void)',不带任何参数;
  • 原型在C++中是必需的,但它通常只是C中的警告;
  • 字符常量的类型(如'a')在C中为int且在C++中为char;
  • 字符串文字的类型是C中的char []和C++中的const char [];
  • C中的一些合法变量名称,如类,是C++中的保留关键字。
+0

另请参见http://david.tribble.com/text/ cdiffs.htm – Christoph 2012-03-14 21:29:23

+0

这是什么意思'void func()'没有指定它的参数?这怎么可以用于实际? – 2012-10-27 10:30:56

+0

@VictorZamanian调用约定允许您在C中传递不正确数量的参数而不会崩溃。当然,如果被调用者对你的“不正确的”参数做了一些坏事,这是未定义的行为。你只是宣布退货是无效的。 C允许这样的一些极端sl ness。我认为你传递给像这样声明的任何参数将被假定需要被转换为int。不知道,我真的不喜欢这样的琐事。我声明了我的参数。 :) – doug65536 2013-01-15 03:13:09