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