Вот простой пример:Заголовок включен, но объявления все еще отсутствуют?
#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 не жалуется на это. Странный.
Я использую MinGW + GCC на машине Vista.
Ну, вы проверили, является ли объявление в вашем 'stdlib.h'« отключено »некоторым макросом (т. Е. Блок' # ifdef'/'# endif')? – AnT
Компиляция для меня с MinGW GCC 4.4.1 на машине Win2K. – 2010-02-21 22:23:59
Относительно того, что они отключены другими макросами: заголовок беспорядок - он большой и содержит вложенные ifdefs всюду. Трудно понять, что может вызвать проблему. Кажется, что '__MSVCRT__' должен быть определен для функции, доступной, но это не помогло. Кстати, Нил работает как-то. Используем ли мы разные файлы stdlib.h? – Ree