当前位置:  开发笔记 > 编程语言 > 正文

C代码仍然被认为是C++吗?

如何解决《C代码仍然被认为是C++吗?》经验,为你挑选了5个好方法。

对这个答案的评论让我感到疑惑.我一直认为C是C++的一个合适的子集,也就是说,任何有效的C代码都是有效的C++代码.我错了吗?是否可以编写一个无效的C++代码的有效C程序?

编辑:这与此问题非常相似,但不完全相同.



1> Brian R. Bon..:

通常,是的C代码被认为是C++代码.

但严格意义上说C不是一个合适的子集.有几个例外.

以下是C中一些在C++中无效的有效内容:

int *new;//<-- new is not a keyword in C
char *p = malloc(1024); //void * to char* without cast 

还有更多的例子,但你明白了.

我以前在一个类似的问题写了一个更广泛的答案在这里.



2> Josh Kelley..:

另请注意,C99添加了C++中不允许的几个功能(或仅使用供应商扩展支持),例如内置_Complex_Imaginary数据类型,可变长度数组(在运行时而不是编译时调整的数组),灵活的数组成员(声明为可能包含未指定数量元素的结构的最后一个成员的数组,等等.

有关C和C++之间不兼容性的详尽列表,包括C99的更改,请参阅http://david.tribble.com/text/cdiffs.htm.



3> Roland Rabie..:

还有一些:

C允许递归调用main,而C++则不行

char foo[3] = "abc" 是合法的C,而不是C++

sizeof('A') == sizeof(int) 在C中是真的,在C++中是假的

C99还有更多变化

编辑:我发现了一篇列出大部分差异的帖子.http://c-faq.com/misc/cplusplus.nr.html

为什么C不是C++的正确子集的总结:

    自动转换void *为任何对象/不完整类型

    新关键字(其中一些)

    由于structs成为范围

    由于struct标签成为typedefs

    由于需要原型

    隐含int规则

    递归调用 main

    由于//评论

    由于字符文字是类型char而不是int等等.



4> Jason Baker..:

其他一些有效的C但不是C++的东西:

int func();
func(0,0); //Error in C++, but not in C

另外,不要低估C++拥有更多关键字的影响:

int new;  //Obviously an error in C++



5> cadabra..:

将两者分开并在日常开发中出现的一件事是链接和功能名称修改.除非标记原型,否则C++无法访问使用C编译器编译的AC函数extern "C".

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有