C 包含标题,但仍缺少声明?

C 包含标题,但仍缺少声明?,c,gcc,mingw,C,Gcc,Mingw,下面是一个简单的例子: #include <stdlib.h> int main(void) { _set_error_mode(_OUT_TO_STDERR); return EXIT_SUCCESS; } 标题不包含函数声明和宏: _CRTIMP int __cdecl __MINGW_NOTHROW _set_error_mode (int); # define _OUT_TO_STDERR 1 我怎么会出错呢?请注意,我还使用了EXIT\u SUCCES

下面是一个简单的例子:

#include <stdlib.h>

int main(void) {
    _set_error_mode(_OUT_TO_STDERR);
    return EXIT_SUCCESS;
}
标题不包含函数声明和宏:

_CRTIMP int __cdecl __MINGW_NOTHROW _set_error_mode (int);
# define _OUT_TO_STDERR 1
我怎么会出错呢?请注意,我还使用了
EXIT\u SUCCESS
宏,该宏也在同一
stdlib.h
头中定义,但出于某种原因,GCC并不抱怨它。奇怪


我正在Vista机器上使用MinGW+GCC。

您的代码片段在MinGW 3.4.5上运行良好

您确定已正确设置包含文件路径吗?可能正在处理错误的
stdlib.h
。或者,可能MinGW没有定义获得该函数原型所必需的
\uu MSVCRT\uuu
(MinGW似乎为我自动定义了它-我不确定如何关闭它)


编辑:

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


设置为CW并将在泰兰德发布答案时删除。

那么,您是否检查了
stdlib.h
中的声明是否被某个宏(即
\ifdef
/
\endif
块)禁用了?在Win2K机器上使用MinGW GCC 4.4.1为我编译。关于其他宏禁用它们:头很乱-它很大,到处都包含嵌套的ifdef。很难找出问题的原因。似乎必须定义
\uu MSVCRT\uu
才能使函数可用,但这没有帮助。顺便说一句,尼尔不知怎么搞的。我们是否使用不同的
stdlib.h
文件?在我的系统中,如果您处于严格的ANSI编译模式(即指定了-ANSI),则不包括这些函数。这有点道理。这是否是您的实际问题完全是另一回事。请使用-E进行编译,搜索得到的预处理源代码以查找stdlib.h的内容。您将确切地看到哪些行是输入的还是输出的。是的,-ansi是问题的原因。谢谢
_CRTIMP int __cdecl __MINGW_NOTHROW _set_error_mode (int);
# define _OUT_TO_STDERR 1