Предупреждение" смешанная декларация и код", стоит ли обращаться?

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

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

есть ли еще системы с компиляторами c, которые не поддерживают смешанную декларацию и код?

6 ответов


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

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

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


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

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


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


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

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

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

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


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

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

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

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