当我使用
编译程序时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 ++的子集吗?
答案 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可能无法访问它