LINUX.ORG.RU

Совместимость с C90 в 21-м веке - зачем?

 


0

3
предупреждение: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]

Многие опенсорсные проекты тащат совместимость исходников с C90, конкретнее — не дают на уровне стандартов кодирования смешивать declarations и statements в функциях.

Вопрос: зачем это на практике нужно?

Кажется, всё, на чём нет более-менее современного компилятора, умеющего в C99, уже давно превратилось в археологический артефакт а ля говно мамонта. Неужели кто-то реально современный код компилирует такими древними компиляторами? У кого возникает такая практическая необходимость?

Мне действительно любопытно.

Deleted

Последнее исправление: Deleted (всего исправлений: 2)

Множество проприетарных компиляторов для мелких контроллеров все еще ориентируются на С89.

Так что иногда бывает нужно.

mike666
()

Типы часто в нижнем регистре, и определения переменных посередине функции визуально теряются. Пока пишешь код, всё нормально, но когда возвращешься спустя год, всё печально.

i-rinat ★★★★★
()

Мне кажется, это вопрос стиля кодирования, а не совместимости со старыми стандартами.

NeXTSTEP ★★
()

Если уже есть много кода, то может быть для сохранения единообразия, а то везде будет в начале блока, но где-то по всему блоку и в for.

xaizek ★★★★★
()

Многие опенсорсные проекты тащат совместимость исходников с C90.

А некоторые неопенсорсные проекты до сих пор придерживаются ANSI C (С89), поскольку такова цена Ъ-кроссплатформенности.

DarkAmateur ★★★★
()

Если ты можешь позволить себе не использовать C89, то ты можешь позволить себе не использовать C вообще.

Stil ★★★★★
()
Ответ на: комментарий от NeXTSTEP

Проблем вообще нет, если программируешь словами. Говоришь программистам: ”фичу запили!”

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Типы часто в нижнем регистре, и определения переменных посередине функции визуально теряются. Пока пишешь код, всё нормально, но когда возвращешься спустя год, всё печально.

У меня всё равно наоборот.

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

Deleted
()

У кого возникает такая практическая необходимость?

вижуалы не умеют в C99.

waker ★★★★★
()
Ответ на: комментарий от CrossFire

поддержка очень экзотических платформ, где компилятора С99 все еще нет.

this. Microsoft Visual Studio, например.

t184256 ★★★★★
()
Ответ на: отпала челюсть от Deleted

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

waker ★★★★★
()
Ответ на: комментарий от t184256

И кому нужен убогий компилятор майкрософт, когда можно gcc/clangом прекрасно все компилировать? Какие живые проекты пишутся на с89?

Freyr69 ★★★
()
Ответ на: комментарий от Deleted

Да ладно тебе, тебя же не заставляют держать совместимость с MSVS2005. И вообще, там не все так плохо — там даже можно комментировать через // *убежал плакать в угол*.

t184256 ★★★★★
()
Ответ на: комментарий от Deleted

Спустя год, нихрена не понятно в использовании переменных, если они все кучей объявлены на полэкрана-экран выше

комментарии для лохов?

ananas ★★★★★
()
Ответ на: комментарий от Freyr69

И кому нужен убогий компилятор майкрософт, когда можно gcc/clangом прекрасно все компилировать?

Я думаю, на практике это выглядит примерно так:

Ой, мы делаем наш-крутой-проприетарный-продукт в VS на крестах или шарпе. Ой, нам надо готовую библиотеку для foobarbaz. Возмём готовую. Ой, она на Си!

Deleted
()
Ответ на: комментарий от Freyr69

Ну моя проприетарщина на работе пишется под «C89 и то, что там может студия десятилетней давности». Дай бог мы в обозримом будущем перейдем на Python 3...

t184256 ★★★★★
()
Ответ на: комментарий от ananas

Если для компенсации безосновательного удлинения функции и избыточных областей видимости переменных туда еще каких-то комментариев напихать, то вообще труба придет.

t184256 ★★★★★
()
Ответ на: комментарий от ananas

комментарии для лохов?

Именно.

Комментарии, в отличие от кода, не подлежат проверке тестами, анализаторами и валгриндом.

В хорошем коде нет нужды в комментариях.

За исключением тех, из которых генерируются маны API потом.

Deleted
()
Ответ на: комментарий от t184256

Ну я говорил скорее про случай ТС и опенсорсные проекты.

Freyr69 ★★★
()
Ответ на: комментарий от Deleted

Возмём готовую. Ой, она на Си!

ну вот поэтому многие библиотеки и пишутся на C89, а не на C99 — для совместимости с вижуалами.

или пишутся на C++98 внутри, с публичным интерфейсом на c89.

waker ★★★★★
()

предупреждение: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]

Ха. Недавно компилировал драйвер для usb wifi dongle и тоже с этим столкнулся. А там еще и warnings as errors было :) Мой дядя самых честных правил...

unt1tled ★★★★
()
Ответ на: комментарий от ananas

ну-ну. то-то ты жалуешься, что через год нихрена не понятно

Вообще если глубже копнуть, я жалуюсь, что область действия имени зачастую получается неоправданно широкой. Объявлять переменную, когда она действительно начинает использоваться — еще один способ не выстрелить себе в ногу.

Deleted
()
Ответ на: комментарий от Deleted

Объявлять переменную, когда она действительно начинает использоваться — еще один способ не выстрелить себе в ногу.

зачастую для этого не нужен c99, достаточно нового блока

ananas ★★★★★
()
Ответ на: комментарий от Deleted

Отвечаю на свой же вопрос: Судя по введению K&R 2 - C89.

Deleted
()
Ответ на: комментарий от Freyr69

например плавный переход от микрософт к лине, пишешь кроссплатформенно и там и там работает, потом когда большая часть уже перенесена отказываешься от проприетарщины

Frost ★★★
()

Там прямо написано -std=c90 в мейкфайлах?

buddhist ★★★★★
()
Ответ на: комментарий от makoven

C11, норм. Просто суть в том, что с C89 слезать не хотят. А ведь даже тот же C99 привносит кучу полезных *кроссплатформенных* вещей (особенно это касается libc).

// в C89 даже long long нет (и, как следствие, int64_t)

ЕМНИП, в GCC следующий стандарт (C17?) хотят сделать режимом по умолчанию.

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 2)

Многие опенсорсные проекты тащат совместимость исходников с C90

некоторые и с K&R C :)

jtootf ★★★★★
()

на чём нет более-менее современного компилятора, умеющего в C99, уже давно превратилось в археологический артефакт а ля говно мамонта

IMHO это заблуждение. Но лучше поспрашать у эмбедщиков - у них под весьма актуальные железки компилеры «со старыми принципами» :-)

да кстати и что киллер-фичи C99 чтобы их так лелеять?

MKuznetsov ★★★★★
()
Ответ на: комментарий от KennyMinigun

ЕМНИП, в GCC следующий стандарт (C17?) хотят сделать режимом по умолчанию.

Возможно. По крайней мере текущий стандарт (C11) сейчас как раз является дефолтным.

redgremlin ★★★★★
()
Ответ на: комментарий от CrossFire

Кстати, почему все эти авторы новых платформ не хотят просто написать llvm backend? Ведь по сравнению с альтернативами - работы меньше всего. Лицензия LLVM вроде BSD-like, так что вопросов нет. Зато автоматически появляется поддержка последних стандартов C/C++, плюс всякие ObjC, D, Rust и прочие.

Но нет, они все почему-то либо пилят свой велосипед, либо форкают GCC древней версии.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Например потому, что это всё делает пара человек во всём мире, которых эти авторы и нанимают. И этой паре человек хватает gcc древней версии.

Legioner ★★★★★
()

зачем это на практике нужно?

За тем, что не все компиляторы умеют в более новые стандарты.

Могу пояснить на своем примере: начал писать BuguRTOS на с99, потом стал портировать на stm8 и ... пришлось переписать на более древнем диалекте.

Тред на читай! @ Сразу отвечай!

shkolnick-kun ★★★★★
()
Ответ на: комментарий от Deleted

2013! 2013, Карл!

Просто в винде на Си, кроме может быть самих программистов микрософта, никто не пишет.

Dudraug ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.