4

当我只使用

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

4 回答 4

7

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

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

#include <stdlib.h>

此外,在命令行编译时。确保使用该-Wall标志,以便您收到重要警告:

gcc -Wall code.c
于 2010-02-08T03:56:01.957 回答
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()”,然后才能使用和编译。

于 2010-02-08T03:58:13.753 回答
0

您将不得不g++用于编译.cpp文件。

于 2010-02-07T19:48:45.000 回答
0

一个可能的原因可能是 IDE 无法访问包含文件,cygwin gcc 编译器可能期待它/usr/include(不确定),而 dev-cpp 可能无法访问它。

于 2010-02-07T19:58:18.813 回答