C++ 不是C 的超集。它们有一些不同的地方,这意味着某些 C 代码无法在 C++ 模式下编译。
对于C99的支持,GCC和Clang是最接近的。微软不支持C99,只关注C++(与C99有些地方重叠)。
使用 C++ 编译器编译 C 代码时可能会出现问题,除非明确限制编译器使用 C(所有 C++ 编译器都知道如何做)。如果编译器使用 C++ 编译 C 代码,并且在 C 代码中使用 C++ 中保留的字,则可能会出现问题。
例如,C 代码如下:
int main(void) { int class = 5; return class;}
使用 C 编译器(或 C 模式下的 C++ 编译器)可以正常编译,但不能使用 C++ 编译器编译。
我能很快想到的两个问题(可能还有更多)是用 C++ 编译 C 代码时会出现的问题是类型转换和变量名。例如:
char* new = malloc(20);
上面是有效的C,但是在C++中编译时,你会得到以下错误:
char*
无法分配给 void*
。new
是关键字。是的,一些编译器确实支持C99。 GCC 可能支持,但我只有使用 MSVC 的经验,他们不支持它。