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 ответов

15 просмотров

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта