Pull to refresh

Comments 18

(изображение увеличено этими вашими нейросетями)

зачем этот ужас? лучше бы исходную фотку вставили... или это аналог вуду?

Прошу прощения, почему-то у меня мелкая фотка сохранилась изначально. Заменил на уменьшенную оригинальную.

Если есть возможность так радикально выбирать стандарты C то рекомендую также рассмотреть "betterC" - диалект языка D, работающий на рантайме C.

Это очень похожий на C язык, он даёт совместимость с C и дополнительные преимущества: шаблоны, RAII, вложенные функции, слайсы массивов с проверкой границ, и т.д. - фичи языка D, не требующие рантайма D и сборщика мусора.

Если речь о С, то стоило бы упомянуть о restrict. Весьма полезное нововведение. У меня был опыт сокращения размера функции процентов на 10% из-за добавления одного такого квалификатора.

Спасибо за замечание. Добавил упоминание restrict в нововведения C99.

Основным нововведением в C89, по сравнению с K&R, были прототипы функций.

Спасибо. Это верное замечание, отметил в заметке.

И в C11 появилась модель памяти. Atomics/fences были следствием ее определения.

Хотя я почему-то запомнил книгу братьев Березиных.

Так и не понял: таки они братья или просто однофамильцы. Ну очень инициалы тянут на отца и сына )))

Так и есть - Березин Борис Иванович и Березин Сергей Борисович.

А неплохо вы увлекли читателя...

Который заинтересовался выбором стандарта. А в итоге выбору, то, всего один абзац в конце посвящен.

И ведь покритиковать не за что - ведь сами вначале сказали:

Поэтому надеюсь, что читатель не будет ждать чёткого и однозначного ответа, какой же стандарт всё-таки выбрать в качестве руководства к действию. Возможно не столько мой ответ, сколько мои размышления, которые к этому ответу привели, будут интересны чуть более широкой аудитории

Спасибо, что ли)

Лучший стандарт Си это любой стандарт C++. Язык может всё то же самое, но обладает более богатыми возможностями. Почему кто-то ещё пишет на голом Си, для меня до сих пор остаётся загадкой.

Началось в колхозе утро ...

Сейчас ещё подтянутся с комментариями в духе "а раз С++, то Rust", и тогда всё заверте...

Уж скоро 40 как шкрябаю на плоском Си, а так и не выбираю стандарт, ещё ни разу это не дало ни зарплаты, ни снижения квартплаты, вообще ничего .

Спасибо за ссылку, добавил в заметку в раздел «Поддержка стандартов языка Си в компиляторах».

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L

Прошу прощения, но режет глаз. Разрешите напомнить современное, более менее строгое, определение, параграф 13 раздел 6.10.1 Conditional inclusion, C23:

...After all replacements due to macro expansion and evaluations of defined macro expressions, has_include expressions, has_embed expressions, and has_c_attribute expressions have been performed, all remaining identifiers other than true (including those lexically identical to keywords such as false) are replaced with the pp-number 0, true is replaced with pp-number 1, and then each preprocessing token is converted into a token...

И так было всегда, например, параграф 6 (примерно) раздел 3.8.1 Conditional inclusion, C88 Third review X3J11 88-090 May 13 1988:

...After all replacements are finished, the resulting preprocessing tokens are converted into tokens, and then all remaining identifiers are replaced with 0 ...

В первой редакции книги K&R, вроде как, это свойство забыли упомянуть, но аксакалы помнят, помнят, как работал их компилятор.

Правильно писать коротко и ясно:

#if __STDC_VERSION__ >= 202311L
    /* C23 compatible source code. */
#elif __STDC_VERSION__ >= 201710L
    /* C17 compatible source code. */
#elif __STDC_VERSION__ >= 201112L
    /* C11 compatible source code. */
#elif __STDC_VERSION__ >= 199901L
    /* C99 compatible source code. */
#elif __STDC_VERSION__ >= 199409L
    /* C95 compatible source code. */
#elif __STDC__
    /* C89 compatible source code. */
#else
    /* K&R C compatible source code. */
#endif
Sign up to leave a comment.

Articles