gcc编译无效的C代码

aks*_*aks 3 c c++ gcc

我的一些C程序没有按预期工作.例如,在C中不能通过引用传递,但是当我编写一个使用它并使用gcc编译它的C程序时,它工作正常.

gcc是C++编译器吗?如何使其行为像C编译器?

小智 10

gcc,g ++和其他前端使用文件名来确定语言.例如,gcc和g ++之间唯一的主要区别就是咬了新的C++程序员:不同的链接设置(对于C++ stdlib).

如果您的文件被错误检测,请使用-x选项(可能是-std)明确指定.或者遵循gcc用于文件名的常用命名约定.对于C,这意味着*.c.

仔细检查您是否使用大写/大写*.C来命名文件; 那被检测为C++.


小智 7

如果我编译这个:

int f( int & r ) {
    return r + 1;
}

int main() {
    int x = 3;
    return f( x );
}
Run Code Online (Sandbox Code Playgroud)

有:

 gcc e.c
Run Code Online (Sandbox Code Playgroud)

我明白了:

 e.c:1: error: expected ';', ',' or ')' before '&' token
Run Code Online (Sandbox Code Playgroud)

你有没有给出你正在编译.cpp扩展名的文件?如果有,gcc驱动程序会将其编译为C++文件.


APr*_*mer 5

程序gcc是一个驱动程序,它可以根据安装的内容和文件的扩展名分派给C,C++,Ada,Fortran,Java和其他编译器.

如果明智地选择了这些,那么你不应该做任何事情来将C文件编译为编译为C++的C和C++文件.要强制编译为C,请在编译文件之前使用它-x c作为选项.

我的猜测是你用大写的C而不是小写的C命名你的文件,大写的C被认为是C++.