Bri*_*ndy 27
通常,是的C代码被认为是C++代码.
但严格意义上说C不是一个合适的子集.有几个例外.
以下是C中一些在C++中无效的有效内容:
int *new;//<-- new is not a keyword in C
char *p = malloc(1024); //void * to char* without cast
Run Code Online (Sandbox Code Playgroud)
还有更多的例子,但你明白了.
我以前在一个类似的问题写了一个更广泛的答案在这里.
Jos*_*ley 12
另请注意,C99添加了C++中不允许的几个功能(或仅使用供应商扩展支持),例如内置_Complex和_Imaginary数据类型,可变长度数组(在运行时而不是编译时调整的数组),灵活的数组成员(声明为可能包含未指定数量元素的结构的最后一个成员的数组,等等.
有关C和C++之间不兼容性的详尽列表,包括C99的更改,请参阅http://david.tribble.com/text/cdiffs.htm.
还有一些:
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标签成为typedefsint规则main//评论char而不是int等等.其他一些有效的C但不是C++的东西:
int func();
func(0,0); //Error in C++, but not in C
Run Code Online (Sandbox Code Playgroud)
另外,不要低估C++拥有更多关键字的影响:
int new; //Obviously an error in C++
Run Code Online (Sandbox Code Playgroud)