代码之家  ›  专栏  ›  技术社区  ›  Ree

包含头,但声明仍然丢失?

  •  1
  • Ree  · 技术社区  · 15 年前

    下面是一个简单的例子:

    #include <stdlib.h>
    
    int main(void) {
        _set_error_mode(_OUT_TO_STDERR);
        return EXIT_SUCCESS;
    }
    

    在编译这个程序时,我遇到了以下问题:

    main.c: In function 'main':
    main.c:4: error: implicit declaration of function '_set_error_mode'
    main.c:4: error: '_OUT_TO_STDERR' undeclared (first use in this function)
    main.c:4: error: (Each undeclared identifier is reported only once
    main.c:4: error: for each function it appears in.)
    

    报头 包含函数声明和宏:

    _CRTIMP int __cdecl __MINGW_NOTHROW _set_error_mode (int);
    # define _OUT_TO_STDERR 1
    

    我怎么会出错?注意我也用了 EXIT_SUCCESS 宏的定义也相同 stdlib.h 但出于某种原因,GCC并没有抱怨。奇怪的。

    我在Vista机器上使用mingw+gcc。

    1 回复  |  直到 15 年前
        1
  •  1
  •   pgras    8 年前

    你的代码片段对我来说和MingW3.4.5很好

    是否确定已正确设置了包含文件路径?也许错了 stdlib.h 正在处理。或者,也许明格威没有定义 __MSVCRT__ 这是获得函数原型所必需的(mingw似乎为我自动定义了这一点——我不确定如何关闭它)。


    编辑:

    tyranid 的评论似乎有答案-如果我指定 -ansi 选项,我得到与您的示例中完全相同的一组错误。

    设置为cw,如果暴君发布答案,将删除。