“Смешанное объявление и код” предупреждение, действительно ли к этому стоит обратиться?

Я недавно включил -pedantic опция на gcc и теперь у меня есть приблизительно две или три страницы "ISO C90, запрещает смешанное объявление и код" предупреждения.

Моя цель с этим проектом состоит в том, чтобы быть в состоянии развернуть его в какой-либо основной системе с компилятором C, таким образом, я понимаю, что не было бы мудро предположить, что C99 будет поддерживаться везде, но это даже стоит моего времени для обращения к этим предупреждениям?

Есть ли все еще системы там с компиляторами C, которые не поддерживают смешанное объявление и код?

9
задан itowlson 29 December 2009 в 17:44
поделиться

6 ответов

Ну, а вы собирались писать свой код на C89/90 или на C99?

Поскольку это единственное предупреждение, которое вас, похоже, беспокоит, очевидно, что ваш код на самом деле был написан на C89/90. Если это действительно так и вы планируете придерживаться C89/90, то я бы придерживался строгого C89/90 и перенес бы все объявления в начало блока.

Если, с другой стороны, вы готовы и планируете перейти на С99, то "неуместные" декларации больше не являются проблемой. Тогда вашей основной заботой станет поддержка платформы/компилятора. Компиляторы MS Visual Studio C - это компиляторы C89/90. Это проблема? (Учитывая, что GCC доступен на Windows платформах)

.
7
ответ дан 4 December 2019 в 13:02
поделиться

IIRC, Visual C++ не допускает смешанных объявлений и кода в режиме C.

Visual C++ вообще отстает в поддержке C99. Однако в последнее время ситуация, возможно, улучшилась, и скомпилировать Ваш код в режиме Си++ все равно можно.

.
1
ответ дан 4 December 2019 в 13:02
поделиться

Я не уверен, что изменил бы его.

Однако, если вы все-таки решите, что хотите, это довольно просто (так что, может быть, вам стоит); Просто сделайте все свои заявления сразу после начала блока кода. Если вам абсолютно необходимо определить их позже, используйте другой вложенный блок кода.

.
1
ответ дан 4 December 2019 в 13:02
поделиться

С-компилятор Visual Studio не допускает смешивания деклараций и кода. Вероятно, Microsoft никогда не добавит полную поддержку C99 в Visual Studio; в Windows-мире C не достаточно важен.

.
2
ответ дан 4 December 2019 в 13:02
поделиться

Если вы хотите быть -педантиком по поводу стандарта C99, добавьте опцию -std=c99.

Лично мне нравится старый несмешанный стиль, потому что он облегчает визуальный аудит того, какие типы памяти использует функция, и решение о том, что может потребоваться free()-ing перед возвращением.

.
5
ответ дан 4 December 2019 в 13:02
поделиться

Я бы исключил это конкретное предупреждение, так как перемешивание кода и деклараций не является широко поддерживаемой функцией.

На самом деле у меня та же проблема с библиотекой, которую я пишу. Я использую вариадические макросы, но они, кажется, более поддерживаются.

Чтобы убедиться, что моя библиотека будет действительно пригодна для использования другими, я собираюсь протестировать ее с помощью как можно большего количества компиляторов. Я уже сделал это с Visual C++ Express и Pelles C и попробую другие ( по крайней мере, OpenWatcom, Mars C и lcc-Win32).

К сожалению, SourceForge больше не предоставляет ферму компиляторов, как это было несколько лет назад, и я не могу протестировать ее на коммерческих компиляторах Unix.

.
0
ответ дан 4 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: