Проблемы с использованием ключа -ansi в MinGW 3.4.5
Я читал о флагах, используемых в gcc, и прочитал рекомендацию использовать gcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output
, Ради качества моего кода, чтобы он оставался стандартным и получал все предупреждения об этом.
Ну, насчет компиляции с -ansi... Если я включу <stdlib.h>
GCC дает мне эту ошибку:
In file included from ansi.c:2:
C:/c/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:317: error: syntax error before "double"
Эта строка в это:
inline double __cdecl __MINGW_NOTHROW strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr)
{ return __strtod(__nptr, __endptr); }
делает inline
не существует в C? Разве "стандартный" заголовок не должен быть стандартным? Должен ли я просто удалить inline или избежать компиляции с помощью stdlib.h (я не могу вспомнить, что сейчас находится в stdlib)?
Обновить
Прочитав ссылку, которую опубликовал Адам, я обнаружил, что "встроенный" не является ключевым словом в C89, а C89 - это то, что обеспечивается переключателем -ansi. Я должен был изменить это на __inline__
который, я полагаю, является макросом MinGW.
Спасибо за помощь.
3 ответа
Кажется, известная проблема в mingw: ссылка на архив списка рассылки mingw
Это говорит о том, что inline не является частью стандарта c89 (как -ansi force) и должен быть заменен на __inline__
вместо
Если вы читаете следующие электронные письма, кто-то скажет, что он исправил эту ошибку прямо в cvs. Проверьте новый код и посмотрите (?), А затем сообщите нам.:-)
Я сталкивался с этой проблемой раньше при компиляции по определенному стандарту. В системе Linux, к которой я компилировал, заголовки pthread rwlock не были совместимы с c99 (или не находились в ifndef). Вы должны быть осторожны в этих случаях, и проверка выходных данных препроцессора иногда может помочь в этих случаях.
inline не является частью того, что gcc 3.4.5 считает ANSI C - это часть C99, я думаю, вы можете подтвердить, какую версию gcc вы используете?