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/

28 ответов

4 просмотра

вношу предложение добавить в секцию стандартов это: 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, я бы сам не додумался, как оно работает. Да и в целом прикольная книжка

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Карта сайта