на английском, посмотреть в стандартах (ссылки на них ниже), внимательно изучить сообщение компилятора, и только потом, если ответ не найден, задавать его в чат. Не тратьте время участников чата впустую.
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/
вношу предложение добавить в секцию стандартов это: https://pubs.opengroup.org/onlinepubs/9699919799/
добавил курс на степике в шапку канала
/help@join_captcha_bot
тут не работает ссыль
MRE to сухпай?
а чем плох k&r в смысле "вредных привычек при написании кода на си"? что имеется в виду под вредными привычками?
писать сложно там, где можно писать проще
Хакерские задвиги.
Как раз наоборот
Как понять?
Ну вот например пример кода из 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); } Программа выглядит аккуратной, красивой и краткой, содержательной. Но она должна быть совсем другой, в таком виде в промышленный код её выпускать нельзя. Это я уверен только один пример из многих.
Как будто устаревший стиль
Почему нельзя выпускать в промышленный код? Имеется в виду что надо использоавть готовые билиотеки и не работать с каждым символом самому? Я правильно понял? Если так, то понятно. Или иное? О чём речь поясните в двух словах
пропустите через любой линтер - мой выбор - vscode, trunk install trunk init trunk format --all
Прежде всего это не будет работать на любой кодировке символов. Будет только на ASCII- 7 bit или как она там называется, вот та самая что в 1970ом году использовалась. Даже в стандартной библиотеке С есть функции классификация символов с учётом локейлов, и они не без изъянов, но тут они не используется. Ну и трюк с преобразованием символа цифры в число через неявно вложенную в программу таблицу ASCII - это просто классика старинных хакерских приëмчиков из Беркли времён молодости Филипа Дика. Так никогда не надо делать.
Спс. Ну это норм для подобной литературы. Это же не учебник, а как бы описание языка и демострация возможностей для продвинутых. Ну это я так понял.
Это понятно.но это ничего не меняет. Как раз это и создаёт притягательность и харизму языку в книге. Какой он мощный! Какой он лаконичный! Но если это всё переписать с учётом требований реального мира, вместо 10 строк будет сага на 5 страниц, думаю можно найти реальный код GNU утилиты wc и сравнить.
Всё так: https://github.com/openbsd/src/blob/master/usr.bin/wc/wc.c
это не гну, это опенбсд
Какая разница? Всё равно промышленный код
кстати, читайте пункт 6
Стикер
Стикер
ANSI C, историческое ископайомое
Зато там были пример реализации printf, я бы сам не додумался, как оно работает. Да и в целом прикольная книжка
А какой компилятор посоветуете?
clang для обучения. хорошие диагностики
Спасибо
Как в тюрьме
Пиздец. Уже в открытую ограничивают. А мы что? Терпим?
а что, надо ограничивать в закрытую?
У нас в стране так принято
Обсуждают сегодня