проблемы с использованием переключателя -ansi в MinGW 3.4.5

StackOverflow https://stackoverflow.com/questions/875148

  •  22-08-2019
  •  | 
  •  

Вопрос

Я читал о флагах, используемых в 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).В таких случаях следует быть осторожным, и иногда в таких случаях может помочь проверка вывода препроцессора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top