Какой стандарт языка C выбрать?

Я новичок в изучении C, недавно встал вопрос о выборе стандарта для языка. Изучаю язык по книге Д.Ритчи и большое количество кода из книги просто напросто не запускается на стандарте 23-его года. Чем вообще отличаются стандарты? Какой выбрать для обучения? Советы и доп. информация приветствуется с распростёртыми объятиями.


Ответы (3 шт):

Автор решения: Matvj

Смотря на ваши цели.

Если вы просто изучаете Си и не собираетесь на нём писать серьёзные проекты, то лучше всего подойдёт стандарт из книги.

Если вы будете писать серьезные проекты на Си, то перестаньте читать книгу, а идите читать документацию по современному стандарту.

P.S. книга - это книга Д.Ритчи.

→ Ссылка
Автор решения: HolyBlackCat

Лучше использовать последний стандарт.

большое количество кода из книги просто напросто не запускается на стандарте 23-его года

Скорее всего ошибки там все одинаковые (вроде они возвращаемый тип у main не писали?). Достаточно один раз разобраться, как это исправлять.

Чем вообще отличаются стандарты?

В основном добавляют новые фичи, убирают очень редко. Гугл подсказывает, что возможность не писать возвращаемый тип (что было эквивалентно int) убрали еще в С99, так что писать его в любом случае надо привыкать.

→ Ссылка
Автор решения: user7860670

Книга Д.Ритчи была написана еще до появления стандартов языка, и по сути являлась его первой спецификацией. Начиная с первого стандарта С89 и до появления С23 язык был достаточно консервативным и не претерпевал серьезных изменений. Так что для обучения имеет смысл использовать С89 или С99 (без необязательных расширений) - это то, что используется в большинстве существующих библиотек и системных API. О новвоведениях в стандартах можно узнать например из wiki.

Есть еще вариант С как подмножество С++ - получается сборкой исходника С комплятором С++, что позволяет поймать некоторые вещи, которые в С++ контролируются строже. Направление развития языка в эту сторону в последние годы стало доминирующим и С23 получил большой набор изменений по улучшению совместимости с актуальными версиями С++. Так что с С23 имеет смысл ознокомиться перед дальнейшим переходом на С++.

В контексте книги Д.Ритчи также важно понимать, что многое изложенное в книге было написано в реалиях 78 года, с акцентом на экономию места в исходном коде и обходы прочих тогдашних огрничений. И не соответствует современным реалиям разработки. Так что стоит быть готовым к тому, что помимо правок для совместимости с актуальными версиями стандарта (которых понадобится не так уж и много), придется делать куда больше правок для устранения атавизмов и следования современным практикам.

→ Ссылка