【问题标题】:Cygwin gcc compiled fails in IDE complaining about 'exit' undeclaredCygwin gcc 在 IDE 中编译失败,抱怨“退出”未声明
【发布时间】:2011-01-14 03:39:36
【问题描述】:

当我使用just编译程序时

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++ 的子集吗?

【问题讨论】:

  • #include <stdlib.h>了吗?

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


【解决方案1】:

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

为了解决问题,你要添加:

#include <stdlib.h>

另外,在命令行编译时。确保使用-Wall 标志,这样您就会收到重要警告:

gcc -Wall code.c

【讨论】:

    【解决方案2】:

    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()”,然后才能使用和编译。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • exit(),write(),close()都是C语言支持的。
      • 就像我说的,当我执行 'gcc file.c' 时它编译得很好
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        相关资源
        最近更新 更多