проблемы с использованием переключателя -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?Разве «стандартный» заголовок не должен быть стандартным ansi?Должен ли я просто удалить встроенную строку или избегать компиляции с помощью stdlib.h (я сейчас не могу вспомнить, что находится в stdlib)?
Обновлять
Прочитав ссылку, которую разместил Адам, я узнал, что «встроенный» не является ключевым словом в C89, а C89 — это то, что обеспечивается переключателем -ansi.Мне пришлось изменить его на __inline__
это, я полагаю, макрос MinGW.
Спасибо за помощь.
Решение
Кажется, известная проблема в mingw:ссылка на архив списка рассылки mingw
Он сообщает, что inline не является частью стандарта c89 (поскольку -ansi заставляет это делать), и его следует заменить на __inline__
вместо
Если вы прочитаете следующие электронные письма, кто-то скажет, что исправил эту ошибку прямо в резюме.Ознакомьтесь с новым кодом и посмотрите (?), а затем сообщите нам.:-)
Другие советы
inline не является частью того, что gcc 3.4.5 считает ANSI C - я думаю, это часть C99. Можете ли вы подтвердить, какую версию gcc вы используете?
Я уже сталкивался с этой проблемой при компиляции в соответствии с определенным стандартом.В системе Linux, в которой я компилировал, заголовки pthread rwlock не были совместимы с c99 (или не были включены ifndef).В таких случаях следует быть осторожным, и иногда в таких случаях может помочь проверка вывода препроцессора.