2010-02-21 3 views
1

Вот простой пример:Заголовок включен, но объявления все еще отсутствуют?

#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.

+0

Ну, вы проверили, является ли объявление в вашем 'stdlib.h'« отключено »некоторым макросом (т. Е. Блок' # ifdef'/'# endif')? – AnT

+0

Компиляция для меня с MinGW GCC 4.4.1 на машине Win2K. – 2010-02-21 22:23:59

+0

Относительно того, что они отключены другими макросами: заголовок беспорядок - он большой и содержит вложенные ifdefs всюду. Трудно понять, что может вызвать проблему. Кажется, что '__MSVCRT__' должен быть определен для функции, доступной, но это не помогло. Кстати, Нил работает как-то. Используем ли мы разные файлы stdlib.h? – Ree

ответ

1

Ваш фрагмент кода отлично работает для меня с MinGW 3.4.5

Вы уверены, что вы ваш включать путь к файлу установлен правильно? Возможно, неправильно обрабатывается stdlib.h. В качестве альтернативы, возможно, MingGW не определяет __MSVCRT__, который необходим для получения этого прототипа функции (MinGW, похоже, автоматически определяет это для меня - я не уверен, как его отключить).


редактировать:

tyranid «s комментарий, кажется, есть ответ - если я указываю опцию -ansi, я получаю точно такой же набор ошибок, как в вашем примере.

Настройка на CW и будет удалена, если tyranid отправит ответ.

+0

Да, -анси была причиной проблемы. Благодарю. – Ree

Смежные вопросы