169 похожих чатов

Правила чата ————— Как задавать вопросы 1) Сначала вопрос попытаться найти в Интернете,

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

2) Крайне желательно сделать MRE (но если не получилось, бить не будем!).

3) Вместе с кодом приложить реакцию компилятора и всё-всё, что как-то может быть связано с проблемой, включая разрядность процессора, ОС и т.д. (последнее на Линуксах можно получить командой screenfetch).

4) Если код больше десяти строк, то скинуть его ссылкой с помощью сервисов https://godbolt.org/, https://wandbox.org/, https://ideone.com/, https://pastebin.com/, gist.github.com/ или аналогичных.

5) Печатать одним сообщением, а не дробить на множество мелких, чтобы не засорять чат для читателей в будущем.

6) Не оффтопить, для оффтопа есть https://t.me/rsa4096. Всё, что не про базовый Си — оффтоп, включая предложения по работе!

7) Перед публикацией вопроса код следует отформатировать, чтобы он легче читался другими участниками чата. Для этого можно использовать, например, clang-format. Также код следует присылать текстом, а не картинкой.

8) Поддерживаем культурные беседы, не переходим на оскорбления.

9) Не задавать вопросы вроде "А кто может помочь с кодом?", чтобы не тратить время участников чата на последующие "допросы".

При систематическом несоблюдении правил — бан навсегда. RO (Read-Only) можно получить при повторном нарушении правил после предупреждения.

—————

Где найти другие чаты по программированию: https://t.me/it_chats.

—————

FAQ

Какие книги почитать?

Рекомендую следующие:

1) Стивен Прата. Книга увесистая, но материал достаточно тщательно разжёван, читается без особых усилий. Последние издания включают в себя нововведения C11, что также плюс.

2) Керниган & Ритчи (K&R). Самая известная книга по Си, но уже изрядно устарела. Склонна научить вредным привычкам при написании кода на Си. Рекомендую как исторический материал, но не более.

3) Книга Modern C расскажет о современных техниках программирования на Си.

4) Курс на Степнике от нашего товарища @igorjirkov: https://stepik.org/course/73618/. В отличие от первых двух книг, данный курс также делает акцент на структурировании программ и отличается более современными техниками программирования.

Какие IDE использовать?

У каждой IDE свои преимущества и недостатки. Полный обзор выходит за рамки шапки канала. Вот список наиболее часто используемых:

- Visual Studio
- Visual Studio Code (кросс-платформенный)
- Xcode
- Clion
- QtCreator
- Vim/Emacs/Neovim/whatever else

Попользуйтесь всеми, выберете по своему вкусу.

Что почитать по указателям?

https://t.me/rsa4096/92767

—————

Интересные ресурсы

Указатели в C абстрактнее, чем может показаться
Beej's Guide to Network Programming
The Development of the C Language, Dennis M. Ritchie
Learn Makefiles

—————

Стандарты:

C90 -- https://www.pdf-archive.com/2014/10/02/ansi-iso-9899-1990-1/ansi-iso-9899-1990-1.pdf
C99 -- http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
C11 -- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

POSIX -- https://pubs.opengroup.org/onlinepubs/9699919799/

48 ответов

18 просмотров

вношу предложение добавить в секцию стандартов это: https://pubs.opengroup.org/onlinepubs/9699919799/

hirrolot- Автор вопроса

добавил курс на степике в шапку канала

/help@join_captcha_bot

тут не работает ссыль

MRE to сухпай?

а чем плох k&r в смысле "вредных привычек при написании кода на си"? что имеется в виду под вредными привычками?

hirrolot- Автор вопроса
)
Как понять?

Ну вот например пример кода из 1.6 Массивы #include <stdio.h> /* подсчет цифр, символов-разделителей и прочих символов */ main() { int с, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i]= 0; while ((c = getchar()) != EOF) if (c >= '0' && с <= '9' ) ++ndigit[c - '0' ]; else if (c == ' ' || с == '\n' || с == '\t') ++nwhite; else ++nother; printf ("цифры ="); for (i=0; i < 10; ++i) printf(" %d", ndigit[i]); printf (", символы-разделители = %d, прочие = %d\n", nwhite, nother); } Программа выглядит аккуратной, красивой и краткой, содержательной. Но она должна быть совсем другой, в таком виде в промышленный код её выпускать нельзя. Это я уверен только один пример из многих.

Ilya Zviagin
Ну вот например пример кода из 1.6 Массивы #includ...

Почему нельзя выпускать в промышленный код? Имеется в виду что надо использоавть готовые билиотеки и не работать с каждым символом самому? Я правильно понял? Если так, то понятно. Или иное? О чём речь поясните в двух словах

le34
Почему нельзя выпускать в промышленный код? Имеетс...

пропустите через любой линтер - мой выбор - vscode, trunk install trunk init trunk format --all

le34
Почему нельзя выпускать в промышленный код? Имеетс...

Прежде всего это не будет работать на любой кодировке символов. Будет только на ASCII- 7 bit или как она там называется, вот та самая что в 1970ом году использовалась. Даже в стандартной библиотеке С есть функции классификация символов с учётом локейлов, и они не без изъянов, но тут они не используется. Ну и трюк с преобразованием символа цифры в число через неявно вложенную в программу таблицу ASCII - это просто классика старинных хакерских приëмчиков из Беркли времён молодости Филипа Дика. Так никогда не надо делать.

Ilya Zviagin
Прежде всего это не будет работать на любой кодиро...

Спс. Ну это норм для подобной литературы. Это же не учебник, а как бы описание языка и демострация возможностей для продвинутых. Ну это я так понял.

le34
Спс. Ну это норм для подобной литературы. Это же н...

Это понятно.но это ничего не меняет. Как раз это и создаёт притягательность и харизму языку в книге. Какой он мощный! Какой он лаконичный! Но если это всё переписать с учётом требований реального мира, вместо 10 строк будет сага на 5 страниц, думаю можно найти реальный код GNU утилиты wc и сравнить.

Ilya Zviagin
Это понятно.но это ничего не меняет. Как раз это...

Всё так: https://github.com/openbsd/src/blob/master/usr.bin/wc/wc.c

²
это не гну, это опенбсд

Какая разница? Всё равно промышленный код

кстати, читайте пункт 6

Стикер

☝️

Стикер

ANSI C, историческое ископайомое

²
ANSI C, историческое ископайомое

Зато там были пример реализации printf, я бы сам не додумался, как оно работает. Да и в целом прикольная книжка

А какой компилятор посоветуете?

hirrolot- Автор вопроса
mak
А какой компилятор посоветуете?

clang для обучения. хорошие диагностики

.

hirrolot
терпим

Пиздец. Уже в открытую ограничивают. А мы что? Терпим?

hirrolot- Автор вопроса

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта