Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gcc编译无效的C代码_C++_C_Gcc - Fatal编程技术网

C++ gcc编译无效的C代码

C++ gcc编译无效的C代码,c++,c,gcc,C++,C,Gcc,我的一些C程序没有按预期工作。例如,通过引用传递在C中是不可能的,但当我编写一个使用它的C程序并用gcc编译它时,它工作得很好 是GCC C++编译器吗?如何使其表现得像C编译器?尝试定义命令行选项-pedantic,并指定希望遵守的C标准,例如,c99使用--std=c99,c89使用--std=c89;这应使其拒绝任何不属于规定标准的内容 编辑:请注意,-ansi可以代表C89或C++98,并且可能无法强制编译器进入“C模式”。如果我编译以下内容: int f( int & r )

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


是GCC C++编译器吗?如何使其表现得像C编译器?

尝试定义命令行选项
-pedantic
,并指定希望遵守的C标准,例如,c99使用
--std=c99
,c89使用
--std=c89
;这应使其拒绝任何不属于规定标准的内容

编辑:请注意,
-ansi
可以代表C89或C++98,并且可能无法强制编译器进入“C模式”。

如果我编译以下内容:

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

int main() {
    int x = 3;
    return f( x );
}
与:

我得到:

 e.c:1: error: expected ';', ',' or ')' before '&' token

您是否为正在编译的文件提供了.cpp扩展名?如果有,GCC驱动程序将编译为C++文件。

GCC,G++,而其他前端使用文件名来确定语言。例如,GCC和G++之间唯一的主要区别是咬新C++程序员:不同的链接设置(对于C++ STDLIB)。 如果文件被错误检测到,请使用-x选项(可能还有-std)明确指定。或者遵循gcc用于文件名的通用命名约定。对于C,这意味着*.C


再次检查您是否未使用大写/大写*.C来命名文件;这是作为C++来检测的。<> > P> <代码> G++< /C> >应该是C++的前端,而 Cc>代码> C,但都指向GCC。

如果要编译标准兼容的C代码,请使用<代码> GCC—ANSI < /C> > /P> > P>程序GCC是一个驱动程序,它可以根据C的安装和文件的扩展,将其发送到C、C++、艾达、Fortran、java和其他编译器。 <>如果选择了这些,你不必做任何事情来把C文件编译成C和C++文件,它们被编译成C++。要强制编译为C,请在编译文件之前使用

-xC
作为选项


我猜你已经用一个大写的C来命名你的文件,而不是小写的,大写的C被认为是C++。p>
gcc
是驱动程序。它将根据文件扩展名或强制-x调用实际不同的前端

<>但是对于 G++< /Cord>,它会强制将源文件默认为C++,甚至文件是(*.c)(小写).< /P> 为什么不进行一次简单的试验来让自己感到方便:

echo "int main() { } " > test.c

gcc -v -c test.c
[请不要使用实际前端编译器的
/usr/libexec/gcc/i386 redhat linux/4.1.2/cc1plus
行。]

========================

Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
 /usr/libexec/gcc/i386-redhat-linux/4.1.2/cc1 -quiet -v test.c -quiet -dumpbase test.c -mtune=generic -auxbase test -version -o /tmp/ccUiF4Qr.s
ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i386-redhat-linux/4.1.2/include
 /usr/include
End of search list.
GNU C version 4.1.2 20080704 (Red Hat 4.1.2-46) (i386-redhat-linux)
    compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-46).
GGC heuristics: --param ggc-min-expand=59 --param ggc-min-heapsize=55455
Compiler executable checksum: 435964263b657ac05d988fae7b6714b1
 as -V -Qy -o test.o /tmp/ccUiF4Qr.s
GNU assembler version 2.17.50.0.6-12.el5 (i386-redhat-linux) using BFD version 2.17.50.0.6-12.el5 20061020
mv test.c test.cpp
gcc -v -c test.cpp
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
 /usr/libexec/gcc/i386-redhat-linux/4.1.2/cc1plus -quiet -v -D_GNU_SOURCE test.cpp -quiet -dumpbase test.cpp -mtune=generic -auxbase test -version -o /tmp/ccUgae0u.s
ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/i386-redhat-linux
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/backward
 /usr/local/include
 /usr/lib/gcc/i386-redhat-linux/4.1.2/include
 /usr/include
End of search list.
GNU C++ version 4.1.2 20080704 (Red Hat 4.1.2-46) (i386-redhat-linux)
    compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-46).
GGC heuristics: --param ggc-min-expand=59 --param ggc-min-heapsize=55455
Compiler executable checksum: 2c84476b74368e297382b43d14e53b01
 as -V -Qy -o test.o /tmp/ccUgae0u.s
GNU assembler version 2.17.50.0.6-12.el5 (i386-redhat-linux) using BFD version 2.17.50.0.6-12.el5 20061020
mv test.cpp test.c
g++ -v -c test.c
=============================

Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
 /usr/libexec/gcc/i386-redhat-linux/4.1.2/cc1 -quiet -v test.c -quiet -dumpbase test.c -mtune=generic -auxbase test -version -o /tmp/ccUiF4Qr.s
ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i386-redhat-linux/4.1.2/include
 /usr/include
End of search list.
GNU C version 4.1.2 20080704 (Red Hat 4.1.2-46) (i386-redhat-linux)
    compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-46).
GGC heuristics: --param ggc-min-expand=59 --param ggc-min-heapsize=55455
Compiler executable checksum: 435964263b657ac05d988fae7b6714b1
 as -V -Qy -o test.o /tmp/ccUiF4Qr.s
GNU assembler version 2.17.50.0.6-12.el5 (i386-redhat-linux) using BFD version 2.17.50.0.6-12.el5 20061020
mv test.c test.cpp
gcc -v -c test.cpp
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
 /usr/libexec/gcc/i386-redhat-linux/4.1.2/cc1plus -quiet -v -D_GNU_SOURCE test.cpp -quiet -dumpbase test.cpp -mtune=generic -auxbase test -version -o /tmp/ccUgae0u.s
ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/i386-redhat-linux
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/backward
 /usr/local/include
 /usr/lib/gcc/i386-redhat-linux/4.1.2/include
 /usr/include
End of search list.
GNU C++ version 4.1.2 20080704 (Red Hat 4.1.2-46) (i386-redhat-linux)
    compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-46).
GGC heuristics: --param ggc-min-expand=59 --param ggc-min-heapsize=55455
Compiler executable checksum: 2c84476b74368e297382b43d14e53b01
 as -V -Qy -o test.o /tmp/ccUgae0u.s
GNU assembler version 2.17.50.0.6-12.el5 (i386-redhat-linux) using BFD version 2.17.50.0.6-12.el5 20061020
mv test.cpp test.c
g++ -v -c test.c

你将得到与> GCC-<代码> +>代码> Test.CPP 的相同结果,这意味着编译为C++ +


<代码> cc>代码> C前端,代码> cc1Pule是C++前端。就是这样。

如果不发布一些代码,你就不能说那样的话(re-PBR)!我同意乔的观点:你需要发布你的代码和文件名。如果源文件有.cp,.cc,.c或.c++(还有一些)的扩展名,它将编译为C++ C++。如果使用gcc(或g++)编译.c文件,则引用调用将不会编译。注意,如果您尝试将C++对象与GCC链接,则它可能不会成功链接,因为GCC不会通过默认链接C++库。GCC查看文件扩展名。如果文件是*.c,则编译为C。如果文件是*.CPP,它被编译为C++。@罗杰实际上是“通过引用”,如果它认为文件是C++源,它就忽略了像STD= C89的标志。但是,如果文件已经有扩展名.cpp,则指定C标准会导致警告。再说一次,尝试这样做是其他东西被破坏的迹象因此,该解决方案似乎仅适用于-Werror(停止制造等)的特定问题。是否应该始终使用该选项是另一个问题。(提示:是:P)-1:<代码> ANSI 根据C++或C++模式指定C90或C++ 98。
-std
选项更加明确。