这里有一个简单的例子:包含标题但声明仍然丢失?
#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。
那么,你是否检查过你的'stdlib.h'中的声明是否被某个宏(即'#ifdef' /'#endif'块)禁用了? – AnT 2010-02-21 22:22:47
在Win2K机器上用MinGW GCC 4.4.1编译。 – 2010-02-21 22:23:59
关于他们被其他宏禁用:头是一团糟 - 它很大,并且包含嵌套的ifdefs。很难找出可能导致问题的原因。看起来'__MSVCRT__'必须被定义为可用的函数,但是这没有帮助。顺便说一句,尼尔有它的工作。我们是否使用不同的'stdlib.h'文件? – Ree 2010-02-21 22:42:01