Cygwin gcc编译失败,在IDE抱怨'退出'未声明

时间:2010-02-07 19:43:14

标签: c++ c gcc compilation dev-c++

当我使用

编译程序时
gcc code.c

没有消息,并且成功生成了输出文件。输出的文件有效。但是,当我尝试在IDE中使用相同的cygwin安装的gcc编译器时(我尝试过Netbeans和Dev-C ++),我收到以下错误

main.cpp:27: error: `exit' undeclared (first use this function)
main.cpp:27: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:77: error: `write' undeclared (first use this function)
main.cpp:78: error: `close' undeclared (first use this function)

我看不出有什么不同。为什么不编译?

好的,问题是在IDE中,文件的扩展名为.cpp,而当我从终端编译时,它的扩展名为.c。所以,我的新问题是为什么它被视为c ++文件时不能编译。 C不是C ++的子集吗?

4 个答案:

答案 0 :(得分:6)

C ++比C.更严格.C允许你在没有原型的情况下调用函数,C ++不允许这样做。

要解决此问题,您需要添加:

#include <stdlib.h>

此外,在命令行编译时。请务必使用-Wall标记,以便获得重要警告:

gcc -Wall code.c

答案 1 :(得分:1)

IDE正在为编译器使用更繁琐的选项。您需要包含一些标题:

#include <stdlib.h>  // exit()
#include <unistd.h>  // close(), write()

默认选项几乎允许任何可能编译C的东西。从外观上看,IDE将'-Wmissing-prototypes'设置为编译器选项之一。


如果使用C ++编译器编译代码,则必须确保在使用前声明所有函数。 C对此更为苛刻(或者可能比较粗略) - 建议在确定或引用之前确保声明所有函数,但这不是强制性的。在C ++中,它不是可选的。

C的子集也是C ++的子集;有些C不是C ++,有许多C ++不是C。特别是,任意C程序通常都不是C ++程序。例如,C程序可能不会声明'exit()',但它既可以使用它也可以编译。 C ++程序必须先声明'exit()'才能使用它并进行编译。

答案 2 :(得分:0)

您必须使用g++来编译.cpp个文件。

答案 3 :(得分:0)

一个可能的原因可能是IDE无法访问包含文件,cygwin gcc编译器可能会在/usr/include(不确定)中使用它,并且dev-cpp可能无法访问它