我可以使用c ++编译器来编译c源代码吗?

car*_*995 2 c c++ compiler-construction

可能重复:
我期望用C++编译器编译C代码有什么问题?

只是好奇我是否可以使用c ++编译器来编译c源代码?无论如何还有任何编译器完全支持c99标准吗?

lit*_*adv 9

除非您明确限制编译器使用 C(所有 C++ 都知道如何做),否则您可能会在使用 C++ 编译器编译 C 代码时遇到问题。如果编译器使用 C++ 来编译 C 代码,如果在 C 代码中使用在 C++ 中保留的字,您可能会遇到问题。

例如,像这样的 C 代码:

int main(void) { int class = 5; return class;}
Run Code Online (Sandbox Code Playgroud)

使用 C 编译器(或 C 模式下的 C++ 编译器)可以很好地编译,但不能使用 C++ 编译器进行编译。


Mar*_*lon 6

使用 C++ 编译 C 代码时,我能很快想到的两个问题(可能还有更多)是类型转换和变量名。例如:

char* new = malloc(20);
Run Code Online (Sandbox Code Playgroud)

以上是有效的 C,但在 C++ 中编译时,您会收到以下错误:

  1. char*void*没有明确的强制转换就不能分配给。
  2. new 是关键字。

是的,有些编译器确实支持 C99。GCC 可能会,但我只有使用 MSVC 的经验,他们不支持它。


Yan*_*min 5

C++ 不是 C 的超集.有些地方它们不同,这意味着某些C代码不能在C++模式下编译.

至于C99的支持,GCC和Clang是最接近的.Microsoft不支持C99,只关注C++(在某些地方与C99重叠).