проблемы с использованием ключа -ansi в MinGW 3.4.5 - PullRequest
2 голосов
/ 17 мая 2009

Я читал о флагах, используемых в 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)?

Обновление

прочитав ссылку, которую разместил Адам, я обнаружил, что "inline" не является ключевым словом в C89, а C89 - это то, что обеспечивается переключателем -ansi. Мне пришлось изменить его на __inline__, который, я полагаю, является макросом MinGW.

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 17 мая 2009

Кажется, известная проблема в mingw: ссылка на список рассылки архива mingw

Это говорит о том, что inline не является частью стандарта c89 (как -ansi force), и его следует заменить на __inline__ вместо

Если вы читаете следующие электронные письма, кто-то говорит, что он исправил эту ошибку прямо в cvs. Проверьте новый код и посмотрите (?), А затем сообщите нам. : -)

1 голос
/ 17 мая 2009

Я сталкивался с этой проблемой раньше при компиляции по определенному стандарту. В системе Linux, к которой я компилировал, заголовки pthread rwlock не были совместимы с c99 (или не были в ifndef) Вы должны быть осторожны в этих случаях, и проверка выходных данных препроцессора иногда может помочь в этих случаях.

1 голос
/ 17 мая 2009

inline не является частью того, что gcc 3.4.5 считает ANSI C - это часть C99, я думаю, вы можете подтвердить, какую версию gcc вы используете?

...