Этого треда уже нет.
Это копия, сохраненная 22 января в 01:27.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
image.png102 Кб, 792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному /clang/ 2835039 В конец треда | Веб
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит или ∗.
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Что читать:
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Чем компилировать:
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Что еще почитать:
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Ben Klemens "21st Century C: C Tips from the New School" (2012)
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Stephen G. Kochan "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf

⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Онлайн-утилиты:
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

Прошлый: >>2770768 (OP)
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹

pointers edition
image.png19 Кб, 454x436
2 2835050
Почему код не собирается?
3 2835054
>>2835050
Это вся твоя программа?
4 2835056
>>2835054
Да.
Делаю
gcc src/array.c
5 2835059
>>2835056
Чел, тебе бы начать изучать язык Си с самых основ лол.
image.png29 Кб, 1147x496
6 2835061
>>2835059
А что я не так делаю?
7 2835062
>>2835059
Ну. Т.е. красненьким ничего не светится. А не собирается...
8 2835069
>>2835061
>>2835062
Блять, чел! У тебя нет мэйна. Это всё, что тебе для начала нужно знать. В шапке есть много достойной лит-ры, и даже краткое описание того, что стоит ждать от того или иного учебника. Бери любой этот учебник и через пару недель ты сможешь сам понять, в чём ты неправ.
9 2835089
>>2835069
Так если я библиотечку для себя делаю, как мне ее скомпилировать? Или в библиотеке тоже нужен main?
10 2835099
>>2835089
Нет, для библиотеки не нужен мэйн. Ты же мне ответил, что то, что ты кинул скриншотом это и есть вся твоя программа. А, для библиотек и других сторонних ф-ций тебе нужно разобраться с хэдерами. Начни отсюда: https://otus.ru/journal/programmirovanie-po-modulyam-v-si/
11 2835173
>>2835050

кидаю референс на предыдущий трид -> >>2835171 →
Снимок экрана 2023-09-09 в 22.35.51.png34 Кб, 2240x54
12 2835176
Что за рофлянка? Чем больше модификаторов тем сильнее константность? Керниган, ты за это ответишь, мгась!
13 2835177
Хуита
14 2835179
>>2835177
Уже нет!!! В этот раз текст читать гораздо легче - звёзды не ебут так глаза, как в прошлом (удалённом) треде. Зато теперь "поинтеров" хватит на всех и на все случаи (до 500-го пста).
15 2835180
>>2835056

>gcc src/array.c


Так либа не собереться.
Тебе надо .so объекттник собирать если хочешь именно статик либу компильнуть, с флагом -shared
Но можешь потрениться на классических эльфах и компильнуть .o

В любом случае ты не те команды вызываешь.
Делай gcc -c сырецнейм.c -o объектнейм.o
или gcc -c сырецнейм.c -o либанейм.so -shared вроде так, давно либи не компилил
16 2835183
>>2835180
Ах забыл добавить, чтобы из эльфов/либ собрать экзекьютабел делай в финале
gcc [объекты через пробел] [-lлибанейм если линкуется либа] -o приложениенейм
17 2835185
>>2835180
>>2835183
Спасибо!
18 2835195
Наваяю пожалуй краткий гайд как собирать проект из нескольких файлов. Будет полезен новичкам и даст толчок в освоении систем сборки.

Итак допустим у нас есть описание функции foo и мы хотим хранить ее отдельно от основного проекта.

foo.c

int foo(void){
return 42;
}

main.c

int foo(void);
int printf( const char⚹, ...);
int main(void){
int result = foo();
printf("foo: %d\n",);
return 0;
}

По хорошему нам кроме двух сырцов нужен еще хидер куда мы положим прототип функции foo и printf, но можно обойтись и без хидера.

Итак сборка проекта.
Первым делом надо откомпилить два объектника:
gcc -c foo.c -o foo.o
gcc -c main.c -o main.o

Теперь надо эти объектные файлы слинковать вместе, по отдельности мы можем запустить только main.o но в нем есть референс на функцию принцип работы которой лежит в foo.o поэтому она не будет работать.
Линкуем
gcc main.o foo.o -o myapp.exe ну или не ехе тут уже без разницы

Теперь экзекьютабл не только имеет референс на foo но и знает как она работает.
Поздравляю вы красавчик.
18 2835195
Наваяю пожалуй краткий гайд как собирать проект из нескольких файлов. Будет полезен новичкам и даст толчок в освоении систем сборки.

Итак допустим у нас есть описание функции foo и мы хотим хранить ее отдельно от основного проекта.

foo.c

int foo(void){
return 42;
}

main.c

int foo(void);
int printf( const char⚹, ...);
int main(void){
int result = foo();
printf("foo: %d\n",);
return 0;
}

По хорошему нам кроме двух сырцов нужен еще хидер куда мы положим прототип функции foo и printf, но можно обойтись и без хидера.

Итак сборка проекта.
Первым делом надо откомпилить два объектника:
gcc -c foo.c -o foo.o
gcc -c main.c -o main.o

Теперь надо эти объектные файлы слинковать вместе, по отдельности мы можем запустить только main.o но в нем есть референс на функцию принцип работы которой лежит в foo.o поэтому она не будет работать.
Линкуем
gcc main.o foo.o -o myapp.exe ну или не ехе тут уже без разницы

Теперь экзекьютабл не только имеет референс на foo но и знает как она работает.
Поздравляю вы красавчик.
19 2835198
>>2835195

>printf("foo: %d\n",);


printf("foo: %d\n",result);

Команд по сборке бывает много, рекомендую освоить утилиту make для автоматизации сборки проектов. Make ультрапростой и в нем заложены удобные принципы, он будет рекомпилить только те участки проекта, которые подверглись изменениям.
16935513172400.mp43,3 Мб, mp4,
1280x720, 0:19
20 2835215
>>2835195
Продолжаю тему микрогайдов на примере функции foo
Дополним наш проект маунальными тестами.
Удобно будет все же создать хидер с прототипами наших функций.

proto.h

int foo(void); // return 42
int printf(const char⚹ format, ...); // std format output

Добавим в проект еще один сырец с мейном

test.c

#include "proto.h"
int main(void){
int res = foo();
if(res-42) return 1;
return 0;
}

Не забудьте включить хидер proto.h в main.c заместо прототипов.

У нас уже есть скомпиленный foo.o и нам для сборки тестов достаточно скомпилить test.o и собрать приложуню.
gcc -c test.c -o test.o
gcc test.o foo.o -o testsuite.exe

Тесты ничего не печатают на экран, но возвращают код операционке и это можно использовать в системах сборки. Например в make

Makefile

myapp: tests main.o foo.o proto.h
gcc main.o foo.o -o myapp

main.o: main.c
gcc -c main.c -o main.o

foo.o: foo.c
gcc -c foo.c -o foo.o

test.o: test.c
gcc -c test.c -o test.o

tests: testsuite
./testsuite

testsuite: test.o foo.o proto.h
gcc test.o foo.o -o testsuite

Итак

>myapp: tests main.o foo.o proto.h


Обратите внимание, что основной (релизный) проект собирается только после того как успешно выполниться цель tests, тоесть если все тесты успешно выполнились мейк слинкует финальный экзешник. Если экзешник тестов вернет операционке не 0 а любой другой код ошибки - мейк не станет выполнять эту цель по сборке финального экзешника и прерветься с ошибкой.

Без автозамены функциями мейка выглядеть будет так. У мейка есть свои функции и переменные обработки текста, чтобы выкапывать имена файлов/каталогов и подставлять их куда нужно.
16935513172400.mp43,3 Мб, mp4,
1280x720, 0:19
20 2835215
>>2835195
Продолжаю тему микрогайдов на примере функции foo
Дополним наш проект маунальными тестами.
Удобно будет все же создать хидер с прототипами наших функций.

proto.h

int foo(void); // return 42
int printf(const char⚹ format, ...); // std format output

Добавим в проект еще один сырец с мейном

test.c

#include "proto.h"
int main(void){
int res = foo();
if(res-42) return 1;
return 0;
}

Не забудьте включить хидер proto.h в main.c заместо прототипов.

У нас уже есть скомпиленный foo.o и нам для сборки тестов достаточно скомпилить test.o и собрать приложуню.
gcc -c test.c -o test.o
gcc test.o foo.o -o testsuite.exe

Тесты ничего не печатают на экран, но возвращают код операционке и это можно использовать в системах сборки. Например в make

Makefile

myapp: tests main.o foo.o proto.h
gcc main.o foo.o -o myapp

main.o: main.c
gcc -c main.c -o main.o

foo.o: foo.c
gcc -c foo.c -o foo.o

test.o: test.c
gcc -c test.c -o test.o

tests: testsuite
./testsuite

testsuite: test.o foo.o proto.h
gcc test.o foo.o -o testsuite

Итак

>myapp: tests main.o foo.o proto.h


Обратите внимание, что основной (релизный) проект собирается только после того как успешно выполниться цель tests, тоесть если все тесты успешно выполнились мейк слинкует финальный экзешник. Если экзешник тестов вернет операционке не 0 а любой другой код ошибки - мейк не станет выполнять эту цель по сборке финального экзешника и прерветься с ошибкой.

Без автозамены функциями мейка выглядеть будет так. У мейка есть свои функции и переменные обработки текста, чтобы выкапывать имена файлов/каталогов и подставлять их куда нужно.
21 2835218
>>2835215
Хотя вероятно зависимость от хидера proto.h стоит поставить на компил из сырцов, а не на сборку.
22 2835241
>>2835195
>>2835198
>>2835215
>>2835218

Чел, ты это лучше в пастбине (с коментами напротив важных строк) оформи и кинь ссылку, и те люди, которые не шарят в библиотеках, будут тебе безмерно благодарны. А то сейчас, блять, хочется только материться!!!!!
23 2835242
>>2835241

>А то сейчас, блять, хочется только материться!!!!!


Почему? Вроде все читабельно. Макаба херит табуляцию, что критично только для мейкфайла, но думаю синтаксис мейкфайлов погуглить - минутное дело. Там все сводится к комментарию типа:
цель : зависимости
таб действия
24 2835245
А, вообще, знаете, почему нам, сишникам, так трудно отыскать исходники "процедур" из стандартной библы?
А всё из-за того, что стандартная библа написана закройте глаза: (если не хотите, чтобы ваш мир перевернулся) на асме...
А вы думали, блять, почему программа начинает прыгать по неизведанным областям памяти, когда совершается вызов библичной ф-ции из дебагера?

А всё из-за того, что Си это язык указателей!!!!! Просто представьте себе, что:
while (1) {
;
}


это просто набор указателей на каждый, как вас учили "оператор", но на самом деле на каждый символ, т.е.:
((w) + (i) +... + (e)) + ...;

Именно поэтому, когда вы в дебагере, типа gdb нажимаете "s" (step - команда, позволяющая попасть внутрь ф-ции), то попав на какую-нибудь библиотечную ф-цию, программа начинает прыгать столько раз, что, блять, кажется будто она прыгает по пространству всей Вселенной!!! Анон, ты не поверишь, где я был (я запрыгивал в анус твоей мамки), когда совершал прыжки в дебаге. Но, об окончании прыжков в программе я могу только мечтать, потому что я никогда не доходил до конца этого марафона (то ли анус твоей мамки бесконечный или спецом бесконечно-багованный в некоторых участках), но каждый раз из-за каких то багов мой дебаг падал. Удивительно то, что, когда запускаешь прогу без дебага, то всё проходит "оллрайт"!!! Но стоит, блять, задебажить это дерьмо, и начать прыгать по библичным ф-циям, как сразу же меня накрыает бесконечно-багованный анус твоей мамки, анон.

А потому мне кажется, что от нас что-то пытаются утаить. Возможно, то, что ЮНИКС, в своё время, Керниган и Ричи написали на асме, но, при этом, создав скрипто-адрессный язык, взяли денег, как за новую ОСь + новый язык программирований...

Получается, что Кернинган и Ричи попилили бюджет асашая!
25 2835246
>>2835242

>Вроде все читабельно.


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

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

Кидаешь код - кидай пастбин!!!!!!!!!!!!!!!!!!!!!!!!11111!!!!!!!!!!!!! Блять, это же очевидно, как креститься в церкви!!!!
26 2835250
>>2835245
Господи что за zog тута? Все написано на си и даже библиотечные функции. Другое дело что в стдбибле куча оберток над обертками и твой принтф разворачивается множество раз на левел ниже пока не начнет вручную прыгать поинтерами по потоку и вызывать сискол и вот только в месте сискол write происходит чистый асм и то только потому что реализация write закомпилена в stdlibc которая по дефолту линкуется gcc

>>2835246
Тебе зачем подсветка синтаксиса в тривиальном примере функции всегда возвращающей число 42? Боишься ошибиться?
Но раз так просишь как нибудь залью статью на пастбин и линкану сюда.
image.png66 Кб, 296x170
27 2838730
Очередной опрос тулчейнов. Пишите свой тулчейн, что юзаете.

Сам я юзаю вим + мэйк. Вим голый без плагинов, на мейке завязана не только сборка, но и например создание нового проекта. В голом виме кстати есть файлбраузер и поддерка мультиоконности для тех кто не знал.
28 2838799
Попрыгав по нескольким языкам за несколько лет, взялся за изучение С. До этого всячески избегал его, все эти указатели, а также хедеры с линковкой пугали, честно говоря.
Но г-ди, какой же это охуительный язык. Нравится то, что компактный и мало конструкций. Дает невероятное чувство свободы.
И учебник K&R - топ. Почти в каждой главе, помимо базы, дается какой-нибудь пример, а также пару заданий, где приходится поломать мозг.

Кодирую на линуксе (да, это wsl. 2 системой есть дебиан на всякий, но мне удобнее в винде, на линуксе рендер щрифтов ебанутый, какой только дистр я не пробовал).

Так что принимайте в семью :)

>>2838730
vscode + cmake
29 2838827
>>2838799
Добавлю, что решил, что идеальная связка для меня - это питон + С. Вызываются функции из С либы очень легко, я через ctypes это делал, там буквально пара строчек. Так что числодробилку можно спокойно на С писать и интегрировать в проект.
30 2838838
>>2838827
А залей сюда тривиальный пример вызова числодробильной функции foo из какой нибудь тривиальной libfoo.so при помощи пайтона. Как раз размышлял над тем какой мордошлепный язык взять, а то окошки на пьюр си писать геморно и профитак как такового все равно не будет. Ждем скриншотик :3
31 2838907
>>2838838
c = ctypes.CDLL("lib.so")
c.foo()

Короче, кури мануал по ctypes модулю.
32 2839277
>>2835050
array это у тебя описание типа, а не сам объект. Чтобы вернуть указатель на объект типа array из функции, тебе надо создать объект сначала, только не в коем случае не на стеке, как ты обычные переменные объявляешь, иначе после выхода из функции все переменные выгрузятся, и ты получишь указатель с мусором, который нельзя использовать. В твоей ситуации, что можно сделать, убрать звёздочку после array и вернуть сам объект, а не его адрес. Т.е сначала объявляешь переменную array простую и просто ее возвращаешь без всяких &.

'''

>Создаёшь переменную типа array


array b:

>твоя инициализация переменной



>в конце возвращаешь ее копию


return b;
'''
33 2839282
>>2839277

> Чтобы вернуть указатель на объект типа array из функции, тебе надо создать объект сначала, только не в коем случае не на стеке, как ты обычные переменные объявляешь


Кривовато немного выразился. Если тебе надо возвращать именно адрес переменной, которая создаётся внутри этой же функции, то пользуйся маллоком обязательно, либо static переменными, если переменная у тебя может быть только одна на всю программу. Если надо обязательно на стеке ее создать, то можно выкрутиться так.

'''

>перед вызовом твоей функции


>Создаешь объект на стеке


array b;

> вызываешь функцию которая уже ничего не возвращает, но в качестве аргумента принимает указатель на твой объект



void (array *p_array, size_t foo, size_t bar)

> Здесь заполняешь структуру, как ты и делал


p_array->foo = ...
p_array->bar = ...

> Далее ничего не делаешь, структура b у тебя уже поменялась


'''
34 2839548
Дорогие друзья. Посоветуйте чем дэбажить под виндой, кроме гнушных и майковских утилит. Чем меньше - тем лучше. Лучше без gui. Поскольку еще малолетний и не все понимаю - желательно, с возможностью скакать по строкам. Пользовал Turbo C через VDM под XP, щас перешел на 11 и юзаю TCC и micro.
35 2839660
>>2839548
Был некогда отличный, идеальной softice, но масдайки убили его. Есть ollydbg, но он для 32 битных прог. Есть x96dbg, попытка оживить ollydbg, не знаю удачная ли, надо пробовать.
36 2839662
>>2839660
А, они все гуишные, забыл добавить. без gui думаю сложно найти будет, тем более под виндовс.
OpenGL 37 2839715
Аноны, такая фигня: написал маленькую игру на opengl и winapi, на моём компе под спермёркой работает просто супер, но на дриснятке и на шпалах игра очень медленно работает, а на шпалах вообще цвета другие. В Си я ещё маслёнок, надо под отдельные системы по разному собирать или как? Что делать?
38 2839728
>>2839662
Спасибо.
39 2839732
>>2839715

>шпалах


Undefined symbols
40 2839791
>>2839548
Есть x64dbg. Опенсурс, под винду, но с гуем. Под винду без гуя ничего и нету скорее всего.
41 2839808
>>2839662
>>2839791
ну в винде под консоль чота делать непрофитно, там система построения процессов завязана на принцип - все процессы это окно, тоесть надо изъебываться чтобы отрисовывать вывод в консоль

в юниксах обратная ситуация
42 2839817
>>2839808
Ну в винапи достаточно богатый набор функций для консоли, тот же фар очень красиво и интерактивно выглядит, он полностью на этом апи построен, HIEW как пример ещё, hteditor - все они консольные, просто так сложилось что окна с кнопками более распространены в винде.
43 2839836
>>2839817

>просто так сложилось


вот причину этого "сложилось" я тебе и говорю
44 2840146
Аноны, посоветуйте гайд для освоения valgrind.
image.png29 Кб, 619x400
45 2840288
Помогите.
Как переписать, чтобы не было так всрато?
46 2840304
>>2840288
Перепиши на питон.
47 2840335
>>2840288
фу бля что за шрифт, уноси это нахуй отсюда.
48 2840364
>>2840288
На do..while замени, (перенеся инкремент в while в постфиксной форме), чтобы не повторять 3 строчки в конце. Естественно, дополнив: if(it == ' ' || it == '\0').
49 2840372
>>2840364
Спасибо!
Я чет вообще забываю про do...while
50 2840911
>>2840288
Кодстайл залупный
51 2841334
>>2840288
Что за шрифт, анон?
52 2841549
>>2841334
Lucida Console
53 2841614
>>2841549

>Lucida Console


Спасибо.
54 2841622
Пацаны. У меня тупой вопрос.

Вот допустим - у меня структура.

Давайте для простоты - бизнес кейс. Работник. Отдел.
Работник - может иметь у себя ссылку на отдел.
Отдел - может иметь в себе ссылку на массив работников.
Такая-то один-ко многим связь. Тут не суть.

Суть в другом. А как мне в рамках си это описать?
Мне компилятор на вот такую запись:

typedef struct emp {
departament* dep;
} emp;

struct departament{
emp emps[1024];
} departament;

говорит что нельзя.
Когда гуглю про декларацию текстур - там везде какая-то простая фигня. А вот такого - нету чет.
55 2841644
>>2841622
struct emp {
struct departament* dep;
};

struct departament{
struct emp emps[1024];
};

Так попробуй.
57 2841652
>>2841622
а неча по гайдам с ютюба язык учить
нахерачил типдефы сам не знаешь нахуя и зачем
книжку кернигана почитай лучше
58 2841656
>>2841652
А там про это есть?
Я просто читал ее еще во времена вуза и нифига не помню на самом деле.
Я си просто решил "повспоминать" в свободное от работы время. И чет вот такие моменты - меня заставляют ловить тупень. А как гуглить - даже не знаю.
59 2841663
Я такое прозрение сейчас получил, когда научился парсить в голове всякую муть типа:
int ((foo)(const void *))[3]
60 2841668
>>2841656
в инстиках вроде плюсы у всех были
сишник ето другое, местами похоже
мимо ирит
61 2841684
>>2841663
ето просто поинтер на функцию же а не муть
муть вота

int a = printf("huypizda"), for(int i =0; i<3; i++) puts("chemu ravna a?"), 10;
62 2841685
>>2841668
У нас первый курс был си. Ну. Т.е. да, там говорили, что это СиПлюсПлюс. Но какой это СиПлюсПлюс, если мы все делали через printf, и писали приложухи в Borland C++ через DosBox(потому что нужно было graphics.h а оно не хотело на семерке работать никак)?
На втором - с ООП уже да, были плюсы. Не хочу вспоминать как я с них горел. Вот типа тебе говорят: cout<<"Hello world"<<endl; И вот что это мать его за запись? Что она делает? ПОЧЕМУ ЭТО РАБОТАЕТ? Хуй, пиши давай лабы и не выебывайся.
63 2841702
>>2841663
на вот отпарси моего корявого коня в вакууме

char⚹ str = "Some string";
size_t len = strlen(str);
for(int i=0, int j=len; i<j; i++,j--)
if( str ^ str[j] ) {puts("Строка не палиндром"); break;}
64 2841709
>>2841685

>cout<<"Hello world"<<endl;


мне кстати только этой механикой работы с потоками плюсы и нарвились
остальная оопэшная хуйня кал ебучий, вот типа сишник да? но ты постоянно кодишь на каких то хайлевел абстракциях не задумываясь как там под капотом все это крутится, прям жаба какая то
65 2841710
>>2841709
еще в сишке прям не хватает неймспейсинга, чтобы свои велосипеды писать и не ебаться с отключением линковки стл
66 2841727
>>2841710
Мне в си много чего не хватает. Но я не буду про это ныть тут.
Хотя вру. Буду.
Не хватает удобной модульности.
Не хватает возможности в многопроходную компиляцию. Чтобы можно было как во всех современных языках:
void foo(){ bar(); }
void bar(){ // чет делать}

Не хватает человеческих строк.
Не хватает лямбд. Ну серьезно.
Не хватает отсутсвтвие в стандартной либе кучи полезного, типа JSON'а, работы с сетью и т.д.
Не хватает нормальных enum'ов, чтобы ты мог только те что должны использоваться использовать.
Не хватает асинхронности в стандарте.
Ладно. Я так много могу продолжать. Устал.

Просто мне си - нравится как-бы. Но вот эта вот философия с - напиши себе сам меня, как деда - убивает. Я уже написался разного.
67 2841770
>>2841727

>Не хватает удобной модульности.


это есть

>Не хватает возможности в многопроходную компиляцию.


хуйня какая то зумерская. сначал снимаем свитер потом срем

>Не хватает человеческих строк.


хуйня какая то зумерская

>Не хватает лямбд.


хуйня какая то зумерская

>JSON'а, работы с сетью


биндер в роде не в стл но то есть как и стл сокеты

>ты мог только те что должны использоваться использовать


сам то понял?

>Не хватает асинхронности в стандарте.


мультипроцессинг по дефолту асинхронный же или чо те не хватает

>Просто мне си - нравится как-бы.


но ты очень хочешь питон, да?
68 2841845
Я прочитал K&R но не могу написать хорошей утилиты для юникса. Что еще читать?
69 2841860
>>2841845
А какую ты хочешь написать? K&R по-моему дают достаточно практических примеров, ккак писать как раз такие утилиты. Охуенная книга.
Можешь порешать задачки на всяких leetcode, чтобы привыкнуть к языку.
70 2841872
>>2841860
Поддерживаю оратора там упражнений до жопы крутых я даже помню некоторые до сих пор, с непривычки от некоторых срака горела по нубству но потом нормально
71 2841956
>>2841860
Ну например свой генератор пакетов или альтернативу cat/grep.
72 2842125
Аноны, подскажите, пожалуйста, что не так???
В варианте пик1 всё работает.
В варианте пик2, т.е., когда мы не знаем точной длины массива структур и добавляем realloc(), то программа падает с ошибкой: malloc(): corrupted top size
И ещё непонятно, почему компилятор ругается пик3, когда я ему передаю указатель на массив структур пик4.
73 2842193
>>2842125
Аноны, я разобрался с этим

>В варианте пик2, т.е., когда мы не знаем точной длины массива структур и добавляем realloc(), то программа падает с ошибкой: malloc(): corrupted top size


надо, оказывается, в realloc() указывать ещё и размер структуры. Я думал, что, если ты даёшь realloc() уже саму динамическую переменную, то м.б. он уже должен сам понять, какого размера должна быть одна "ячейка" памяти, поэтому ему нужно просто указать общее кол-во этих "ячеек" памяти вторым аргументом.
Но я чёт всё также не понимаю, почему я не могу обращаться к полям структуры, указатель на которую я передаю в ф-цию, через "стрелочку".
74 2842272
>>2842125

>И ещё непонятно, почему компилятор ругается пик3, когда я ему передаю указатель на массив структур пик4.


ЧЯДНТ?
image.png34 Кб, 1001x249
75 2842296
>>2842272
>>2842193
>>2842125
Всё, аноны, разобрался! Вот так пик1 всё робит через "стрелочки". Чёт в голове витает объяснение этой разницы, но пока не могу сформулировать.
76 2842313
>>2842296
Получается, что
(⚹p).index == p->index, следовательно, p.index == (⚹(p+i)).index == (p+i)->index, а, эта конструкция p->index тогда ровна (⚹(⚹(p+i))).index.
Она ((⚹(⚹(p+i))).index), наверное, сработает в каком-нибудь массиве указателей на массив структур.
77 2842315
>>2842313
p.index == (⚹(p+i)).index == (p+i)->index

быстрофикс
image.png20 Кб, 782x226
78 2842321
>>2842315
Бляяятьь!!! Макаба совсем охерела - теперь не только указатели жрёт, но ещё и квадратные скобки!!!!!
79 2842330
>>2842321
Тут чё вставки кода нет? Ниверю аряя
80 2842337
>>2842330
Не, нету. Обычно всё на пастбин кидаем.
81 2842347
>>2842337
Ну как же так. Даже в /math/ латех завезли
82 2842497
>>2835050
Потому что вот так вот:
void (хget_data) (int n, const char хstr);

хранят указатели на вызовы, с обязательным перечислением аргументов, а указатель на данные просто: void хdata;
без скобичек
Снимок экрана 2023-09-15 в 16.08.30.png567 Кб, 2004x1302
83 2842500
>>2842313
>>2842315
>>2842321
нахуй ты обращение к полям структур парсишь?
почему ты не можешь книжку почитать?

если получил структуру по адресу - то стрелочка, если получил локал копию - то точка.

хуетой какой то занимаешься чес слово
84 2842583
>>2842500
Так у меня массив структур и передаю я указатель на этот массив структур, и тут не так всё просто, как ты описываешь:

>если получил структуру по адресу - то стрелочка, если получил локал копию - то точка.



Мне тоже так казалось изначально, а по факту получается, что нельзя перебарщивать со скобками и звёздочками перед ними.
Снимок экрана 2023-09-15 в 17.07.12.png576 Кб, 2004x1302
85 2842624
>>2842583
ебани алиасы если запутался
86 2842698
>>2842624
Спасибо, анонче! Я с этим уже разобрался, т.е. лучше стал пынямать что такое вообще точка и "стрелочка" в этих ваших структурах. Сейчас у меня другая проблема - я теперь прыгаю в ф-цию, которая подбирает мне нужный индекс через другую ф-цию, которая разделяет иксы на меньше нуля и больше нуля, и соответственно, подставляет массивы структур с положительными и "отрицательными" индексами. Всё робит хорошо, т.е. в итоге я получаю необходимый результат, и он выводится на экран, но беда в том, что когда я запуская свою прогу в валгринде, то он просто ахеревает от этой моей программы - сначала слегка подвисает, потом говорит, что моя програ достигла лимита в десять миллионов ошибок лол, после чего улетает в бесконечность, пукнув на последок о том, что точный расчёт общего кол-ва ошибок невозможен.
87 2842785
Хм.
Я сам не сишник. Но сегодня от нехуй делать - полез на работе по репкам коллег из других отделов.
Собственно. Че я увидел и нифига не понял.
1. Почему-то все переменные в начале функции объявляли.
void foo(CONST_PTR_CONTEXT ctx){
int a,b,c;
float factor;
...
}

Зачем так делать?

2. У структур какое-то двоеточие было, типа:
struct {
int day:2;
int month:2;
int year:2
}

Че это вообще такое?

3. Ни одного malloc на весь здоровенный проект. Это как так? В вузе учили, что если там нужно какой-то связный список, то надо же выделить под него память. А там - ни одного не было, я специально grep'ом поискал.

4. Стиль объявления функций в виде:
int device_set_gpio_state
(
int number, // gpio number
int state // gpio state
)
Зачем так писать?

5. Серия глобальных переменных. В вузе учили, что так делать нехорошо.

6. Какая-то магия с тем, что никаких тредов, но судя по комментариям там как-то парралельно работа ведется. Это я вообще не понял. Там что-то было про какие-то прерывания чи еще что-то но в душе не представляю, что там происходит, типа вот вроде синхронный код, а написано, что между этим делом откуда-то могли прийти команды остановки и надо почистить сектора флешки.

В общем. Че курить чтобы понимать это все?
87 2842785
Хм.
Я сам не сишник. Но сегодня от нехуй делать - полез на работе по репкам коллег из других отделов.
Собственно. Че я увидел и нифига не понял.
1. Почему-то все переменные в начале функции объявляли.
void foo(CONST_PTR_CONTEXT ctx){
int a,b,c;
float factor;
...
}

Зачем так делать?

2. У структур какое-то двоеточие было, типа:
struct {
int day:2;
int month:2;
int year:2
}

Че это вообще такое?

3. Ни одного malloc на весь здоровенный проект. Это как так? В вузе учили, что если там нужно какой-то связный список, то надо же выделить под него память. А там - ни одного не было, я специально grep'ом поискал.

4. Стиль объявления функций в виде:
int device_set_gpio_state
(
int number, // gpio number
int state // gpio state
)
Зачем так писать?

5. Серия глобальных переменных. В вузе учили, что так делать нехорошо.

6. Какая-то магия с тем, что никаких тредов, но судя по комментариям там как-то парралельно работа ведется. Это я вообще не понял. Там что-то было про какие-то прерывания чи еще что-то но в душе не представляю, что там происходит, типа вот вроде синхронный код, а написано, что между этим делом откуда-то могли прийти команды остановки и надо почистить сектора флешки.

В общем. Че курить чтобы понимать это все?
Снимок экрана 2023-09-15 в 18.35.26.png629 Кб, 2004x1302
88 2842788
>>2842785
не знаю анонче, кодстайл такой хули ты нас спрашиваешь спроси данов которые это писали вы же там рядом

ну я про функции
старые стандарты все равно другую запись имеют, хз зачем они именно так пишут
89 2842791
>>2842788
Я боюсь спросить.
Во-первых, я не должен иметь доступ к этому коду, потому что он СЕКРЕТНЫЙ.
Во-вторых, боюсь выглядеть самозванцем, я то на java пишу. И тут к дедам с 20+ годами опыта пойду спрашивать, на меня посмотрят как на говно, начнут говорить, что вот, понабрали, они там в эти годы в космос запускали штуки, а я вот такое не знаю. В общем да.
90 2842793
>>2842791

>СЕКРЕТНЫЙ


тогда закрой и не парься
91 2842795
>>2842793
Так интересно же. Особенно 6й момент. Как можно в однопоточной программе что-то сделать пока выполняется какая-то функция, не завершив ее.
92 2842803
>>2842795
Насрать в кучу
93 2842827
>>2842785
1) Стандарт ANSI/C89
2) Битовые поля, возможно там рядом где-то ещё union есть
3) Судя по коду, проект для контроллера, там нежелательно юзать динамическое выделение памяти из-за риска её фрагментации
4) Просто кодстайл такой
5) Глобальные переменные объявлять нормально, но осторожно. В эмбедед частая практика
6) Пушо ядро одно, тут либо вытесняющая многозадачность, либо никак

В твоем случае для начала учебник Праты по Си. Дальше можно Кармин Новиелло "Освоение stm32". Но вторая книжка только если хочется понимать что именно в том проекте происходит. Ну и я просто предположил, что там контроллер.
94 2842839
>>2842795
Асинхронно, в ОС тоже есть сигналы и прерывания, часто они вызываются в любой рандомный момент времени.
95 2842895
>>2842827
Ну. Да. Там контроллер. Ты угадал.

Спасибо за совет. Почитаю. А то каким-то неполноценным себя почувствовал от того что половниу времени - приходилось просто угадывать.
96 2842916
>>2842895
Вместо Праты можно Кернигана с Ричи. Он компактнее и лаконичнее.
97 2842935
>>2842583
Ты неправильно делаешь. Нельзя передавать локальные данные ссылкой на стек выше.
1. Либо объяви структуру на стеке выше и передай в функцию ссылкой для инициализации:

struct array arr;
init_array(&arr, size_t c, size_t n);

2. либо убирай ссылку и возвращай копию:
array new_array(size_t c, size_t n){
return (array){ ...};
}

еще лучше добавь статик инлайн и вынеси в хидер, либо вообще через

#define new_array(c, n) {...}

struct array = new_array(c, n);

Но сейчас так не модно, модно по плюсовому писать инлайн функции.

3. Выделить всю структуру в памяти (вместе с данными), и через указатели разделить структуру и данные, но это уже неараствый хак, да и все очищать придется.
98 2842952
>>2842935

>Нельзя передавать локальные данные ссылкой на стек выше


да ваще можно если принять ручное управление стеком через асмавставки, но это сейчас то же немодно и лютый хак

без асмахаков напрашивается только статик аррэй с пробросом данных на левел выше

в остальном сыглы
99 2842989
>>2842935

>struct array arr;


>init_array(&arr, size_t c, size_t n);



Ну я, в принципе, так и делаю. Объявляю массив в мэйне и в ф-ции передаю указатель на него. В ф-циях выделяю под него память и заполняю его данными, и всё через указатели.

>2. либо убирай ссылку и возвращай копию:



Это не подходит. Хочу научиться именно через указатели.

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



А тут я так понимаю, мне нужно знать заранее размер массива и, соответственно, данные, которые хранятся в его "ячейках"?
100 2843483
>>2842952
Такой хак будет работать только на интеле, а на другой архитектуре (типа e2k и стековых машинах) код будет не рабочий.
>>2842989

> А тут я так понимаю, мне нужно знать заранее размер массива и, соответственно, данные, которые хранятся в его "ячейках"?


Нет я имею в виду

void xd = malloc(sizeof(array) + capacity x s);

Как разделить это сходу не напишу, но если нет необходимости хранить структуру в памяти то не надо так делать, тем более я не уверен можно ли это очищать кусочками или надо сохранить где то указатель d
101 2843485
>>2842952
А хотя нет, на e2k будет работать, там для манипуляции со стеком есть команды getsp и setsp (stack pointer) и в регистр через который возвращается значение из функции вполне наверное можно затолкать указатель из стека ниже.
102 2843488
>>2843485
значение из стека ниже можно затолкать и обычным модификатором static
нахуй так изъебываться то
103 2843489
>>2842989

>Ну я, в принципе, так и делаю. Объявляю массив в мэйне и в ф-ции передаю указатель на него. В ф-циях выделяю под него память и заполняю его данными, и всё через указатели.


так разве ты не выделяешь память под массив в мейне? получается два раза выделаешь
прокинь поинтер и ковыряй память уровнем ниже через поинтер

потренируйся на "кошках", нахуй ты сразу в какую то структурную кашу полез если еще не шаришь как чо делается то?
104 2843494
>>2843488
Всмысле через
static inline arrayx new_array(...){ return &{...} }

? Ну это то может просто компилятор вызов убирает и получается ссылка на локальные данные. А так оно вроде вместо поинтера возвращает 0.
И при компиляции матерное сообщение выдает.
105 2843497
>>2843494
нафига чот возвращать?

типа в мейне

static array[];
foo(array);

и ковыряешь внутри foo проброшенный наверх массив
в чем я не прав?
106 2843503
>>2843497
Так не работает.
Ты передаешь в функцию нулевой указатель, как ты по нему что то запишешь?
Надо все равно передавать ссылку на указатель foo(&arr) что бы по этой ссылке внутри функции тебе записали указатель в нужное место.

Вот поэтому все это путает и не надо злоупотреблять указателями и их передачей туда сюда неявными методами.
Тем более что указатель объявлен как array[]
А foo может принимать
void foo(void*ptr);
И записывать в указатель что угодно и компилятор это сожрет.
107 2843538
>>2835039 (OP)

>⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹


У жопаскриптеров шапка лучше выглядит. Как Си скатилися в такое говно?
108 2843540
>>2843489

>так разве ты не выделяешь память под массив в мейне? получается два раза выделаешь



Да, тот вариант проги, который я закинул в тред, выделяет в мейне. Сейчас же я переписал прогу, и там всё в ф-циях происходит.
image.png104 Кб, 1200x225
109 2843606
Где тот петуччило, который утверждал когда-то, что нет никаких ячеек в памяти? Ты ещё тут, петуччило?
110 2843748
>>2843503
джавист ты чо несешь
array это уже поинтер на первый элемент массива
16898711106840.mp42,3 Мб, mp4,
576x1024, 0:16
111 2843759
>>2843538
иноагент из узбекистана по кличке Абу подрывает имидж кодерской имиджборды
112 2843849
>>2843748
На какой элемент массива, шизик? У тебя поинтер не инициализирован и никуда не указывает.
И на стеке ничего не выделяет так как ты не написал сколько выделить.

Ну и выглядеть это будет максимально всрато:

struct array arr[1];
foo(arr);

Самый богоугодный вариант это:

typedef struct array arr_t;

static inline arr_t new_array(int size, int capacity) {
arr_t out = {
.size = size,
.index = 0,
.capacity = capacity,
.data = malloc(size × capacity)
};
return out;
}

static inline void del_array(arr_t ×in) {
in->size = 0,
in->index = 0,
in->capacity = 0,
free(in->data), in->data= NULL;
};

int main() {
arr_t myArray = new_array(3, sizeof(arr_t));
// •••
del_array(&myArray);
return 0;
}
112 2843849
>>2843748
На какой элемент массива, шизик? У тебя поинтер не инициализирован и никуда не указывает.
И на стеке ничего не выделяет так как ты не написал сколько выделить.

Ну и выглядеть это будет максимально всрато:

struct array arr[1];
foo(arr);

Самый богоугодный вариант это:

typedef struct array arr_t;

static inline arr_t new_array(int size, int capacity) {
arr_t out = {
.size = size,
.index = 0,
.capacity = capacity,
.data = malloc(size × capacity)
};
return out;
}

static inline void del_array(arr_t ×in) {
in->size = 0,
in->index = 0,
in->capacity = 0,
free(in->data), in->data= NULL;
};

int main() {
arr_t myArray = new_array(3, sizeof(arr_t));
// •••
del_array(&myArray);
return 0;
}
113 2843854
>>2843849
чот ты тут изъебываешься ради нихуя, как не прокидывал наверх так и не прокидываешь
крч, хуеплет, нахуй иди ок да?
научишься на стек прокидывать аррэй - пиши
114 2845594
Пацаны, пилю pmbus, нужно преобразовать int в linear11, может подкинет кто готовый вариант, в гугле забанили, сам дрочу уже два дня, вроде простая операция, а я такой тупой, что не раздуплю никак.
Снимок экрана 2023-09-17 в 17.45.28.png239 Кб, 1988x1030
115 2845604
>>2845594

>linear11


ну судя по этой инфе тут два байта каких то флагов
запиши флаги в каждый бит вручную
116 2845630
>>2845594
Что значит конвертировать?

#define MASK_PMBUS_M 0x07FF
#define MASK_PMBUS_N 0xF800

#define get_linear11_hi(i) ((i & MASK_PBUS_N) >> 11
#define get_linear11_lo(i) ((i & MASK_PBUS_M)

#define set_linear11(hi, lo) (\
((unsigned short)hi << 11) | \
((unsigned short)lo & MASK_PBUS_M))

Как то так.
Но вообще когда работаешь с битами используй тип uint лучше.
117 2845702
>>2845630
Как установить биты я знаю, но сначала надо преобразовать число в показатель и мантиссу, основная проблема в этом.
118 2845754
>>2845702
typedef unsigned short u16;
typedef unsigned char u8;
typedef struct
{
u16 base : 11;
u8 mantissa : 5;
} linear11_t;

void float_to_linear11(float in, linear11_val_t* l11)
{
const s16 Ymax = 1023;
s8 sNval = 0;
s16 sBase;

sBase = (s16)in;
if(sBase > Ymax)
{
while(sBase > Ymax)
{
sBase = sBase >> 1;
sNval++;
}
}
l11->linear.mantissa = sNval;
l11->linear.base = sBase;
}

Вот, как-то так пока сделал, теперь бы ещё придумать, что делать с дробными числами.
118 2845754
>>2845702
typedef unsigned short u16;
typedef unsigned char u8;
typedef struct
{
u16 base : 11;
u8 mantissa : 5;
} linear11_t;

void float_to_linear11(float in, linear11_val_t* l11)
{
const s16 Ymax = 1023;
s8 sNval = 0;
s16 sBase;

sBase = (s16)in;
if(sBase > Ymax)
{
while(sBase > Ymax)
{
sBase = sBase >> 1;
sNval++;
}
}
l11->linear.mantissa = sNval;
l11->linear.base = sBase;
}

Вот, как-то так пока сделал, теперь бы ещё придумать, что делать с дробными числами.
119 2845839
>>2845702
Так а что значит преобразовать int?
Тебе надо целое число в вещественное преобразовать и взять мантиссу или что?
120 2845852
>>2845702
https://habr.com/ru/articles/730872/
В этой статье найдёшь всё, что тебе нужно.
121 2845909
>>2843606
У всех регионаж Росиии йододеицит. Не удително что ты такой.
122 2846037
Сап. Похвалите или покритикуйте трехтомник Столярова.
123 2846051
>>2846037
Хвалю трехтомник Столярова.
124 2846080
>>2846037
Критикую трехтомник Столярова.
125 2846113
>>2846037
Ещё не читал трёхтомник Столярова.
126 2846136
>>2846037
Чел, он хорош, но два единственных и огромных минуса в том, что многие проги даны просто как отдельные ф-ции, плюс ко всему у него совсем нет упражнений (то что иногда встречается то, что это для раздумий читателя, это нещитово). Короче, эту книгу надо совмещать с чем-то ещё. Если ты совсем нуб, то не советую.
image.png109 Кб, 299x168
127 2846142
>>2845909

>У всех регионаж Росиии йододеицит. Не удително что ты такой.



Как там борьба за адресацию каждой защёлки? Продвигается? Вы (свора дегенеративных петуччил - Защелкане) побеждаете?
128 2846150
>>2846136
Я сгорел с того, что он огромное время уделяет паскалю, а потом дропает его, говоря "все хуйня давай по новой", и даёт С. Нахуя паскаль-то?
129 2846156
>>2846150
Идея в том, что таким образом ты вкатывашься в основы кодинга. Если у тебя уже есть опыт и ты чётко знаешь что такое указатели, рекурсия, ф-ции и т.д., то этот том можешь смело пропустить. Второй том лучше начать с Ван Гуйа, совмещая его с тем, что написано у Столярова про асм.
130 2846180
>>2846037
Прочитал все 3 тома. Только часть с паскалем скипнул.
В целом, разделы про Си и асм очень хорошие, раздел про устройство UNIX тоже неплохой. А вот с API линукса уже надо быть осторожнее, особенно про параллелизм лучше у кого-то другого почитать, типа Керриска или Лава. Столяров даже судя по тексту книги не очень разбирается (и не хочет разбираться) в теме потоков.
Ну и С++ точно не стоит учить у Столярова кмк. У него хороший подход, что он пытается дать только базовую часть языка, но при этом он жестко отсекает всю STL, что мне кажется неправильным. Да, STL не является частью языка, но при обучении языку все-таки необходимо хотя бы немного времени уделить ему, чтобы после прочтения хотя бы минимальная база была.
131 2846184
>>2846150
https://www.labirint.ru/reviews/goods/215409/

Вообще, для вката в Си советую эту книгу, плюс, если ту же тему прочитывать у Столярова, естественно не забывая решать задачки, то, в принципе, Си можно освоить на достаточно хорошем уровне.
132 2846307
>>2846156
Тоже Ван Гуйа на английском купил. Кратко пробежался (выборочно) по части асм в первом томе и показалось, что тема не полностью раскрыта. Возможно в других томах она раскрывается подробнее, но все равно решил купить отдельный учебник.

Не совсем по асм, но крайне зашел пик 1.

Кто-нибудь в пик 2 играет?)
133 2846311
>>2846307

>что тема не полностью раскрыта


Так это для начинающих книга, но она самое то, чтобы вкатиться в асм. Дальше уже можно обмазываться Крисом Касперски.
134 2846314
>>2846180
>>2846184
Спасибо за ответ!

По API UNIX, купил Стивенса за копейки. Книжку посмотрю, спасибо ещё раз.

Кстати, за сколько по времени прочитал все тома?
135 2846363
>>2845839
На входе у меня float или int, на выходе linear11 - 16 битное с плавающей точкой, если упрощённо. 5-битная знаковая мантисса и база 11-битная база, тоже со знаком. В общем странный формат, я с ним не сталкивался раньше. Пока сделал грязный хак, который работает только с целыми положительными, но вообще хочу найти что-то нормальное.
Находил один алгоритм на стэковерфлоу, но он ещё хуже работал, до 1023 только работал.
136 2846459
>>2846314
Читал в то время не только Столярова, но с периодическими перерывами прочитал примерно за 4 месяца.
137 2846464
>>2846459
Ну и читал я его после Праты и небольшого опыта в Си, поэтому при прочтении уже была в голове какая-то база.
138 2846510
Чтобы перестать читать Столярова достаточно посмотреть на код его программ. Не которые в учебниках, а которые он сам для себя пишет. А потом еще раз подумать чему может научить такой человек.
139 2846533
>>2846510
А где можно посмотреть? У него свой гит есть?
Ну да, проблема столярика в том, что он по сути всю жизнь только преподавал и у него нет норм коммерческого опыта. Отсюда и его ебанутые заскоки в некоторых областях.
141 2846564
>>2846464

>поэтому при прочтении уже была в голове какая-то база.


Вот это, кстати, роляет, когда читаешь его книги, при этом черпаешь интересные нюансы, без слома мозга, если пытаешься осилить его книги, читая без подготовки.
142 2846610
>>2846533

> проблема столярика в том, что он по сути всю жизнь только преподавал и у него нет норм коммерческого опыта. Отсюда и его ебанутые заскоки в некоторых областях


> @


> Слышь, двач, посоветуй, что почитать про Си. Нет, мне не нужно писать программы, не нужен реальный опыт, мне надо книжек почитать


> @


Ебало)))
143 2846663
>>2846610
Уже передергивания пошли, для изучения языка с нуля он нормально подходит.
144 2846666
>>2846610
И чего тебя так разорвало?
145 2846787
>>2846037
не читал, но критикую
146 2846872
>>2846180
Хуя ты глыба
147 2847141
Дописал небольшую прогу на С, которая извлекает из текста токены, и понял, что я пришёл к слайсам строк. Посему, решил немного вгрузиться в зиг и переписать то же самое на нем (слайсы там нативные всё-таки) и язык прям меня приятно удивил. Там реально есть интересные фишки: comptime, охуенные ошибки, nullable типы, слайсы, defer-ы, errordefer-ы, всякие плюшки в std либе (json к примеру), возможность в 3 строчки подключать С либы...
У языка огромный потенциал, кмк.
148 2847144
>>2846872
Глыба калла

мимо, поправил
149 2847162
>>2847141
патенцивал стать очередной жабахуетой с бесконечным набором блекбоксов и роадмапами освоения zig.hail.core в 7 лет и ЕЕ спецификаций еще длинною в 15.
150 2847210
>>2847162
Хз при чем тут жаба.
151 2847246
>>2847210
последователь судьбы руби он рейлс кмк
хайп пройдет и все жидко пукнут как всегда это бывает
152 2847255
>>2847246

>zig


>хайп


Лол.
153 2847259
>>2847255

>патенцивал


>не хайп


ладно ты утомил, пойду своими делами займусь, не хватало еще срачь раздувать в копилку форса очередного говна
154 2847261
>>2847259
Я вообще мимокрок, лол) Просто забавно видеть слова "зиг" и "хайп" вместе.
Хайпится как раз раст сейчас.
155 2847262
>>2847261
да и он то же
15868023492550.jpg879 Кб, 1280x1142
156 2847265
>>2847255

>zig


>хайп

157 2847462
>>2847261
Раст мне не нравится, слишком анальные правила борров чекера, а вот зиг очень даже. По сути тот же самый С, но с плюшками.
158 2847523
>>2847462
Олимпиаднику всё равно какой язык, для него язык как шлюхе наряд, любой модный нравится.

А вот если ты реальный программист пишущий реальные программы, то расты с зигами и прочей шушерой будет вызывать только отвращение, потому что интеграция с реальными апи ос отсутствует, а программа это в первую очередь апи ос и дальнейшие надстройки в виде библиотек, иначе ничего не напишешь кроме олимпиадного хеллоуворлда в вакууме.
159 2847574
>>2847523
Хуй знает что ты высрал. Разве не является пик1 интеграцией с апи ОС? Разве не является компилятор зига, компилящий сам себя, реальной программой, способной при этом компилировать крос-платформенно с линукса на винду (пик2) и выдавать мне няшный 22 КБайтный файл?
160 2847598
>>2847574

>Разве не является пик1


Является, хеллоуворлдом, олимпиадным говном без задач. Как раз про это и сказал же.
161 2847640
>>2847462
>>2847574
Чел, и раст и зиг это хорошие системные языки, если твой проект начинается с нуля, и, если этот твой проект какой-нибудь стартап (все высокопроизводительные блокчейны пишутся на расте), то дрочи раст/зиг. Но это маленький процент от всего айти мира, поэтому чаще всего высокопроизводительные штуки пишутся на Си или плюсах, т.к., чаще всего эти высокопроизводительные штуки есть продолжение либо производная от того, что уже хорошо себя зарекомендовало, и используется значительное время. Поэтому, если ты стартапер, то изучай раст/зиг, если ты просто хочешь стабильную работу, то изучай Си и плюсы.
Чому такие простые вещи в этом треде приходится объяснять каждый месяц?
162 2847662
>>2847640
При чем тут это? Чел назвал зиг шушерой, потому что отсутствует интеграция с системным апи, но по факту он может вызвать и слинковаться с любой С-совместимой либой, а также компилить С-совместимые либы. Я сгорел от того, что он высрал что-то, обосравшись с подливой.
163 2847668
>>2847662

>слинковаться с любой С-совместимой либой, а также компилить С-совместимые либы


Ну и кому это надо, какому-нибудь особому прошивщику микроконтрроллеров? Но там нет ос и нет апи.
На ос без крестов как минимум делать нечего, потому что без объектов ты напишешь только хелолоруворд, олимпиадное говно без задач.
164 2847682
>>2847668
Ты это Торвальду Линуксу скажи.
165 2847683
>>2847668
Какой же ты долбоеб, г-ди...
166 2847705
>>2847682
>>2847683
Олимпиадники горят и рвутся итт.
167 2847722
>>2847705
Да, с долбоебов, которые утверждают, что без объектов нельзя написать ничего, кроме олимпиадных задач, лол. Ну по его логике С тоже олимпиадный язык получается, так как в нем нет объектов.
Чтобы не быть лицемером, пусть выкидывает тогда свои гаджеты и пека, так как ядра в них написаны на С, в котором нет объектов АХАХАХ БЛЯТЬ КАКАЯ ЖЕ ЭТО ХУЙНЯ. А на ассемблере кстати тоже нет объектов. Как же тогда была написана первая ОС? Непонятно. Мы пользуемся олимпиадным софтом, господа.
А почему кстати он так не любит олимпиадников? Мозгов не хватает на алгоритмы, видать.
168 2847757
>>2847668
Freertos и другие чибиосы на микроконтроллерах тебе шутка чтоли? И апи там есть и драйверы и фрэймворки. Да и под винду вполне себе пишу клиенты на си-labwindows, с потоками, очередями и вот этим всем.
Короче этот не шарит, впрочем все уже и так это поняли.
169 2847770
вы чо тут цирк устроили , клоуны? идите в зиготред зиги свои кидайте, форсеры говна всякого
170 2847815
>>2847770
Где такой найти?
171 2847847
>>2847770
Олимпиадник, спок.
172 2847867
>>2847815
Создай

мимо крок
173 2847871
>>2847770
Та залётный клоун попутал, пришёл и мутит воду.
174 2847907
>>2847871
Так намутил, что завсегдатай треда обдристался с подливой.
image.png921 Кб, 1000x1000
175 2847944
>>2847907
кто? крестовик? вам обоим по пикрилу
176 2848044
Я что-то не понял как языки, имеющие адекватную интеграцию с Си, не могут использоваться для написания системного софта и дергания АПИшек?
177 2848079
>>2847141
Двачую, охуенный язык. Мало того, его компилер еще и является компилером с/с++. Ну а комптайм вкусный еще и тем, что и сам код, и комптайм, и билдскрипты на одном языке, а не на портянке с макросами/шаблонами и мейкфайлами написанными инопланетянами.
Кто от него может бомбить итт? Только пердежи которые отстаивают UB через UB да только винапи знают, застряли в развитии в 90х.
image.png29 Кб, 424x594
178 2848513
https://pastebin.com/inagsWvD

Пишу типа JIT для своего скриптового языка. Сгенерить нативный код в памяти из скрипта, потом запустить на выполнение.

Почему в функции x64_call_show_hello_world при вызове CALL RAX (код 0xFF 0xD0) программа наебывается и падает? В 32-разрядной версии команда CALL EAX отрабатывает успешно, а на 64 битах не хочет.
179 2848528
>>2848513
Очевидно, в отладчике поставить брейкпоинт перед вызовом сгенерированного кода, проверить, что он правилен, затем пошагово выполнять инструкции, чтобы записать, в какой момент выдаётся ошибка, и какова она. Потом проверить, какие ещё методы защиты от эксплоитов есть в твоей системе, как должны оформляться вызовы функций и возвращение из них на стеке, если программа на самом деле завершается при попытке вернуться.
180 2848534
>>2848528
Код проверял пошагово, генерится все правильно (байты в смысле), регистр RAX содержит адрес функции, падает в указанном месте (когда доходит до байтов FF D0). Функция show_hello_world не имеет аргументов, поэтому никакие конвенции вызовов типа PASCAL/CDECL/STDCALL не нужны (и вообще в 64-битном коде есть единственное соглашение с регистрами). Думал, может проблема в WinAPI (там вызывается MessageBox), но если внутри show_hello_world оставить единственный оператор return 123, то все равно падает. На этой же системе (Windows 7) эта же программа в 32-разрядном режиме работает без ошибок - помещаю в EAX адрес функции show_hello_world и вызываю ее с помощью CALL EAX. А на 64 битах такой же алгоритм (адрес функции в RAX и вызов CALL RAX) приводит к краху. Про эксплоиты не понимаю ничего.
181 2848539
>>2839808

> ну в винде под консоль чота делать непрофитно, там система построения процессов завязана на принцип - все процессы это окно, тоесть надо изъебываться чтобы отрисовывать вывод в консоль



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

Проблемы с консолью связаны с тем, что она изначально была построена вокруг костыльной метафоры буфера, так или иначе отображавшего видеопамять текстового режима программ под DOS, каковая память из-под них выдёргивалась в нужные моменты, и для совместимости с которыми всё это налепили, а потом бросили, поскольку получили себе весь рынок. Два десятка лет оно тухло. Отсюда и кодировка DOS, и невозможность нормальной поддержки UTF-8, и невозможность нормальной работы с потоками ввода-вывода, и всевозможные решения по обходу консоли под Windows в кроссплатформенных средах. Только недавно им пришлось ради удержания разработчиков на винде делать с нуля Windows Terminal и новое API (поскольку старое починить невозможно).
182 2848540
>>2848534
Ну так с чем падает-то? Всю интеловскую документацию по архитектуре посмотрел, нигде не нашёл описанного тобой кода ошибки "NAJEBNULAS_I_UPALA". В системном журнале можешь поглядеть, почему процесс внезапно завершился.

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

Машинные коды твои я пока даже не разбирал.
183 2848547
>>2848539

> Только недавно им пришлось ради удержания разработчиков на винде делать с нуля Windows Terminal и новое API


Так вот зачем они решили сделать консольку с закосом под линух

>делать с нуля Windows Terminal и новое API


Тоесть в 11 шинде ТРИ блядских терминала?
184 2848559
>>2848547
Нет, там два вида консоли, старая и новая, и два командных интерпретатора, товарищ Комманд Ком и Помершелл. Плюс сбоку линуксовые в своей подсистеме.
185 2848601
Windows Terminal неплох, кстати говоря. Даже выезжать сверху умеет по win~.
186 2848752
>>2848601
Классная шутка.
187 2848761
>>2848601
Windows Terminal это ничто, просто оболочка для терминалов, в одном окошке со вкладками.

А вот тот же PowerShell напердоленный OhMySh в легкую дает на ротан zsh от которого взяли идею. Пердосрали слили даже в конкуренции консолей, кек.
188 2848784
>>2848761
Пути уже прописал вротдаватель?
189 2849917
>>2846541
И что тут такого ужасного?
190 2851796
Тут же были аноны, которые Си под винду изучают. Посоветуйте пожалуйста, что почитать по winsock.h? Желательно книжку или справочник, чтобы был доступ офлайн.
191 2852118
Как можно выйти из вложенного цикла больше, чем на один порядок без использования goto? Просто не вижу другого варианта т.к. нюфак.
192 2852125
>>2852118
Обычно под "не использовать goto" подразумевается реализация алгоритмов таким образом, что бы этот уродливый инструмент не требовался. Например использование функций и конструкции switch.

Мало кто знает, но в javascript тоже есть goto (По крайней мере был в стандарте ES5). И слава богу как то без него обходились, потому что функциональность языка позволяла реализовать все необходимое и даже больше. Ну или просто не знали про него, что тоже неплохо.
193 2852137
>>2852125
Понимаю, что в идеале надо так алгоритм планировать, чтобы таких ситуаций не возникало. Но просто интересно, что делать именно в контексте данной ситуации. Мне приходит только решение расставлять флаги и по ним делать break из каждого вложенного цикла, с каждым флагом продвигаясь наверх.
194 2852140
>>2852137
Такой юзкейс описан ещё в K&R был. Не вижу ниче страшного так делать, если в итоге и читат и понимать проще
195 2852150
>>2848761

> А вот тот же PowerShell


Это ниразу не аналог zsh и bash, это аналог Console.app с AppleScript из макоси.
Макось состоит из двух половинок - одна уходит корнями во всякие AmigaOS NextStep BeOS, другая это классический юникс с позикс окружением.
Это как если бы в винде в корневой папке было бы
/bin
/lib
/home
/var
/usr -> /var/usr
/etc -> /var/etc
/tmp ->/var/tmp
/ProgramData
/ProgramFiles
/Users -> /home
/Windows

А так же было бы две категории программ: испоьзующие winapi и каталоги относящиеся к виндоус-окружение и использующие unix/posix, при этом прастранства друг друга видят но воспринимают просто как папки с файлами. Из баша нельзя получить или вызвать что то из NSApi (аналог winapi), поэтому был разработан консолеапп с аплскриптом.
В консолеапп можно строчить команды операционной системе (той части которая не юних) в эплскрипте можно написать из них сценарий и скомпилировать для запуска в качестве программы.
Сейчас не знаю насколько оно живо на данный момент, но в любом случае это не аналог sh. Оно сложней и испоььзует только функции заложенные в не-позикс операционку. Тогда как баш это сам себе операционная система.
196 2852158
>>2852150

>Тогда как баш это сам себе операционная система


че
197 2852247
>>2852158
Но он прав: bash - это клей для системных тулзов и демонов в линухах. OS это не только ядро
198 2852251
>>2852247
Чето вы не в ударе
199 2852599
>>2852137
оберни циклы в функцию и делай ретурн
200 2853340
>>2852118
Выдели в функцию и return
201 2855937
>>2852118
Принудительно выставить счётчики циклов так, чтобы сработало условие выхода.
image.png21 Кб, 772x297
202 2857601
Аноны, чёт не понимаю! Как так получается, что я вызываю ф-цию, которая подчёркнута красной линией на пикриле, а возврат происходит не "под неё", а на ф-цию, которая отмечена чёрными квадратными скобками на пикриле?
203 2857775
>>2857601
Так сходу не скажу, но я не вообще не вижу путей выхода из функции search(), просто бесконечная рекурсия т.к. нету условия выхода.
204 2857883
>>2857775
Мне вот что непонятно: мы нашли первое подмножество и вызвали себя ещё раз теперь уже с соблюдением условия if (k == n + 1), соответственно можем выводить это подмножество на экран (пикрилл 1). Выводим его, потом возвращаемся "под" вызывавшую инструкцию, после чего уменьшаем размер следующего подмножества, и готовы вызвать себя ещё раз (пикрилл 2). Вызвали себя с соблюдением условия, поэтому готовы вывести на экран очередное подмножество (пикрилл 3). И, по идее, после вывода на экран должны вернуться "под" вызывавшую ф-цию (на пикрилле 3 есть уточнения откуда вызвали и куда должны вернуться). Но мы почему-то сразу возвращаемся в ф-цию, которая вызвала вызывавшую ф-цию, т.е. мы как бы перескочили через ретёрн. Почему так?

Лови ещё код, там всё норм робит - нет никаких бесконечных ф-ций.
https://pastebin.com/Ht8Vmyyt
205 2857956
>>2857883
Ничего что под else к k два раза 1 прибавляется?
206 2857957
>>2857883

>3


куда сюда? тут ничего нет
207 2857961
>>2857883
Чё за гуи странны, ты на темплеОС что ли лол?
208 2857979
>>2857956
А что тут такого? Первая ф-ция набирает первое, самое большое подмножество, а дальше уже следуют из него исключения, когда ф-ция прыгает обратно из состояния k == n + 1. Т.е. когда ф-ция возвращает управление, то подмножество уменьшается на единицу, и следует очередной вызов ф-ции с к k + 1.
209 2857983
>>2857957
Но у меня почему-то в некоторых программах управление возвращается на это скобку, после чего уже идёт возврат в предыдущую ф-цию. Поэтому я и бугурчу, не понимая как так получается.
210 2857984
>>2857961
На убунте, а это дебагер ddd.
211 2857998
1
212 2858006
>>2857984
Пиздец, ГНУтый софт как всегда дизайном поражает умы неискушенных. На такое реально страшно смотреть, лучше обычным консольным GDB пользоваться.
213 2858038
>>2858006

>лучше обычным консольным GDB пользоваться


Не, это пердол ещё тот! ddd построен на gdb, т.е. в консоле ddd можно управлять командами gdb, только тут фичи в том, что можно окошки с переменными, аргументами, либо участки памяти с энтым кол-вом ячеек (от байта до 64 байт) выставить в панеле, и наблюдать за тем как они меняются, в процессе дебага. А в дефолтном gdb, чтобы проверить переменную/аргумент/участок памяти приходиться каждый раз исполнять команду с адресами/именами переменных, что заёбывает пиздос!!!!! Особенно, когда не особо шаришь, что делаешь и что вообще перед тобой происходит.
214 2858726
>>2858038
Этот https://github.com/nakst/gf калыч не работает?
215 2858761
Любую мокропиську накатят лишь бы емаксом не пользоваться. Хех, мда.
216 2859097
>>2858761
пускай накатывают чо хотят и смотрят как протоны на окисленных кремниевых пластинках в жопы ябуца, но не так как они планировали
чем бы дитя не тешилось...
217 2859135
>>2858726
Хз, я об этом первый раз слышу.
218 2859354
>>2857883
Проверил, в gdb выходит из функции как обычно, приземляется на следующую строчку после search().
219 2859473
>>2859354
Я уже разобрался! Дизассембл помог! Когда мы подходим к ф-ции (пикрилл 1), то мы уже находимся в "третьей" ф-ции сёрч, следовательно, после выполнения инструкции "очередной вызов самих себя", в "третьей" ф-ции сёрч больше нечего выполнять, поэтому она готовится к возврату. На пикрилле 2 видно, что, когда мы выходим из вызываемой ф-ции (то есть последняя инструкция в "третьей" ф-ции сёрч), то у вызвавшей ф-ции адрес выполнения следующей инструкции совпадает с подготовкой к ретёрну, т.е. она готовится отдать управление "второй" ф-ции сёрч. Пикрилл 3 показывает состояние стека, когда мы вернулись из "четвёртой" ф-ции; заодно он показывает, что следующая инструкция у "третьей" ф-ции сёрч это поготовка к ретёрну.

В общем, итог таков, что мы на самом деле не перескакиваем через "ретёрны", а gdb достаточно умён, чтобы понимать, если ф-ция, в которую мы прыгаем, находится в состоянии, в котором она должна вернуть управление следующей инструкцией, то и нечего в неё возвращаться, а можно сразу хуйнуть в ф-цию, которая вызывала "готовую к ретёрну" ф-цию.
220 2860686
Камрады, мне тут на старости лет приспичило сменить сферу деятельности. Изучал в шараге Борланд С и матан (а так же линал и вычмат, и более-менее их понял). Если хочу стать сумрачным гением, пишущим код для железяк, куда копать дальше? Синтаксис я, положим знаю (на самом деле, подзабыл, но это наименьшая проблема), вопрос в том, что изучать для дальнейшего вката? Что-то я сомневаюсь, что в серьёзных конторах дядьки сидят под досом на древних компиляторах. Как за домашней пекой можно прокачать практические навыки?
221 2860823
>>2860686
Зачем тебе это надо? Сходи в дотку катани лучше.
222 2860849
>>2860823
Никогда не играл в доту. А вообще я уже нагуглил, как эта специальность называется, и что начинать лучше не с сей, и дурацкими вопросами заёбывать надо не сишников, а более профильных товарищей.

Энивей, моя сфера деятельности несколько примыкает к эмбеддед-разработке, так что нужный инструментарий есть, всем чмаки в этом чати, пойду я отсюда, извините за беспокойство.
223 2860888
>>2860849

>и что начинать лучше не с сей


И с чего лучше начинать?
224 2861286
Есть что-то реально годное почитать про графику в линуксе? drm\kms вся хуйня. Пока что одно говно какое-то смог нагуглить
225 2861435
>>2861286
Только подумал скинуть тебе все, что я нашел за некоторое время, но решил не кидать. Пошёл нахуй, лодырь.
226 2861671
>>2835039 (OP)

> Visual Studio 2017


Мужик, ты шесть лет провёл в анабиозе и сбежал на двач от санитаров?
image.png99 Кб, 196x257
227 2864097
Анон, что насчет учебника Дейтелов, yay, or nay?
228 2865383
>>2864097
Зачем тебе эта книга? Есть же

>Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.



Совершенно замечательная книга, если ты только вкатываешься. Если уже вкатился в базовый уровень, то тогда лучше что-то более сложное изучать, типа всякие алгоритмы на Си, олимпиадки. Есть много различных книг по олимпиадкам, но нет на Си, поэтому тупо переводить тот код, который представлен в этих книгах (по алгоритмам и олимпиадкам) на других языках, на язык Си это афигенная практика, если ты уже изучил базовый уровень.
229 2865474
а подскажите по LLVM
вот я скачал его с официально сайта и поставил
вот я ручками создал файл main.ll с содержанием:
define i32 @main() {
ret i32 666
}
пишут, что компилятор вроде как встроен в clang.exe т.е. в виндовой сборке нет llc.exe
но так оно ругается
наверное мне нужно еще цель указать в файле main, что сборка шлангом, а не MS ?
230 2865544
>>2865383
Нахуй этот прата нужен вообше?
231 2865619
>>2865544
Обстоятельно пишет, для вката самое то. Да и потом удобно использовать его книгу как справочник, как раз недавно помогла вспомнить про битовые поля.
232 2865638
>>2865619
Мне кажется, стандарт пизже как справочник, нет? У праты как-то маловато.
233 2865644
>>2865638
Пожалуй, пизже, я бы даже пользовался стандартом, если есть его офлайн версия. Буду благодарен, если подскажешь где искать подобное. Хотя бы пдфку было вообще отлично и желательно С11.
234 2865647
>>2865644
В шапке пдф.
235 2865707
>>2865647
Вот это я в глаза ебусь, спасибо.
236 2865908
Парни, а объясните нубу - в какой ситуации глобальные переменные выгодно применять, а в какой невыгодно? Чёт я начитался Столярова и других авторов книг и статей, и они утверждают, что глобальные переменные это суперплохо, но при этом в других книгах и статьях вижу применение глобальных переменных, причём с глобальными переменными и код лаконичнее получается и в ф-ции много аргументов передавать не нужно, следовательно, и рекурсии могут быть не такими прожорливыми по стеку.

Чёт не улавливаю сути - когда глобальная переменная это хорошо, а когда глобальная переменная это плохо?
237 2865909
>>2865908
Чето ты по-моему сам на свой вопрос ответил
238 2865915
>>2865908
глобалки это выгодно если:
надо разгрузить стек
надо делать ретурн из макроса

в остальном выгоднее локалки
239 2865916
>>2865915
Понял, анон! Спасибо!
240 2865918
>>2865915
Объясните дебилу что значит "разгрузить стек". Куча и стек в одну сторону растут, если ты из стека в кучу переложишь не одна хуйня будет? Или это какие-то компьютационные выгоды имеет
241 2865925
>>2865918
стек не вечный а на винде еще и выравнивание ебанутое в 32 бита вот и думай
глобалки не в куче лежат если что
242 2865928
>>2865925

>глобалки не в куче лежат если что


А ну кстати пошёл я нахуй
16114289648180.mp4608 Кб, mp4,
434x360, 0:13
243 2865929
>>2865928

>А ну кстати пошёл я нахуй


Чёт разорвало на ровном месте!
244 2866133
>>2865908
При чтении советов надо всегда понимать, на каком уровне они даются. Тут объясняется начинающим, что такое хорошо и что такое плохо. Онтогенез здесь повторяет филогенез: когда-то, при появлении высокоуровневых языков, людям, привыкшим к более простым решениям, и программирующим по наитию новичкам тоже приходилось объяснять, что не стоит валить в начале программы все переменные (по примеру тех языков, в которых альтернатив не было), а потом в нужный момент глубоко внутри вызовов глобальный коэффициентик убавлять или прибавлять, и что функция не просто метка для GOTO, а логическая единица, и чем больше она напоминает чёрный ящик, при работе не открывающий и не закрывающий файлы и не переключающий краны на трубах с серной кислотой, чтобы налить чуть-чуть себе в бидончик, тем удобнее ей пользоваться и судить о работе программы.

Если у тебя модуль-объект-что-угодно является чёрным ящиком и внутренними функциями меняет своё состояние, то всё в порядке. Понятно, что на предложение в сложной многопоточной системе с кучей уровней абстракции для удобства завести переменную, чтобы хранить число подключений к базе данных, тебе сразу объяснят, что код окажется в библиотеке или каком-нибудь COM-объекте, и выполняться будет сферически в вакууме.
245 2866148
В школе была платформа где автопроверялись задания на паскале. Кто-нибудь может запилил exercises from K&R в формате литкода?
lg0-JXcRcx2Hqxit-dxazm1oHumu5iHx2rP37cpbwoKLGJJ7Qejq1HEgPlEPw5rGt8wx9FNUzdXT90AJCYTFSYdLBQLUXhM5BPQTIpBxZVW=w3840-h2160-p-k-no-nd-mv.jpeg2,7 Мб, 3840x2160
246 2866149
247 2866152
>>2866148
всмысле юнит тесты на хеловорлды написать?
напиши сам
248 2866234
как сделать чтоб в виме { это херня не уравнивалась, типа автокоррекция. я люблю писать все некрасиво
249 2866239
>>2866234
по-русски скажи что ты хочешь
мимо юзаю вим
250 2866280
>>2866239
Типа когда пишешь { она автоматически на tab выравнивается. Я просто привык писать так как понятно лишь себе. Я недавно перешел на вим
Снимок экрана 2023-10-04 в 21.17.33.png618 Кб, 2004x1296
251 2866286
>>2866280
убери в vimrc сточку set autoindent это автоиндент выравнивает по предыдущему отступу новые строки
alicerosexoxothefemaleversionofBillWeasleyb6a965ad-0a39-4242-a50b-53a2b472fe0a.png6,1 Мб, 2048x2048
252 2866332
>>2866152
Ах вот как это называется. Я просто думал может быть уже готовое есть на каком-нибудь ресурсе где можно писать свои exercises.
На литкоде можно писать свои упражнения, например?
253 2866345
>>2866332
не знаю, я не дрочу литкоды
может другие аноны подскажут
254 2866372
>>2866286
здоровья тебе, анон
255 2866385
>>2866332
На кодварс вроде должно быть можно
256 2866832
Где-то давно видел, что при обработке ошибки можно как-то вывести строку, в которой эта ошибка произошла. Как это сделать?
линух, gcc
257 2866837
>>2866832
насчет номера строки - такое не знаю, наверн только компилер умеет построчно
но вот вывести например имя функции в которой крашнулось можно макросами, а вообще ты наверное про стандартные потоки говоришь? поток ошибок stderr туда пишешь текст чо случилося и ретурнишь не ноль, в консоль автоматом выпадет вывод потока ошибок
258 2866914
>>2866832
>>2866837
Внезапно, номер строки можно вывести с помощью макроса __LINE__.

https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
259 2866923
>>2866914
ну я подозревал что это лоу левел проброс макровставкой по аналогии с __func__ или var но пощупать так и не довелось, не было повода, поэтому я и сказал честно что не знаю
260 2867050
>>2866914
Лучей добра тебе анончик. Уже пару дней не мог вспомнить про этот макрос, думал это как-то ещё реализовано и не получалось загуглить.
261 2867104
>>2866923
Да я тоже не пользовался, обычно имени функции хватает для отладки.

>>2867050
Если не секрет, для чего тебе понадобился вывод номера строки, Функции на 100500 строк?
262 2867261
>>2867104
Да ничего такого, просто тренируюсь работать с сокетами и когда реализовывал обработку ошибок вспомнил об этой фиче. Поичем до этого вообще встречал это на микроконтроллерах, то ли в коде FreeRTOS, то ли у LwIP.
263 2867422
>>2867261
Я такое вообще применял только пару раз, и только на мк, когда отладку применить вообще никак нельзя было. Один раз мультипроцессорная система стм+модем sim800 с EAT, обмен и синхронизацию через два терминала пасти. Второй раз нужно было портировать стм проект на нонейм китайский проц с высиранием отладки через усарт. Тот ещё гемор, но фича нужная, выручает, когда нет других вариантов.
264 2867676
Какая разница между пикрил 1 и 2? Можно пример, юзкейс этого const?
image.png54 Кб, 810x406
265 2867677
Анон, объясни где смотреть эту проблему?
image.png104 Кб, 1505x350
266 2867680
>>2867677
А все нашел. Как оно так работает? Оно прекомпилирует лайв? На макоси у меня вроде не было такого фукнционала. Пикрил на убунте.
267 2867713
Как мне самому увидеть этот result. Они написали result как бы зная, как оно работает, но на деле оно же просто бьет ошибку или можно как-то увидеть как выглядит код после исполнения include?
Screenshot from 2023-10-05 22-40-57.png94 Кб, 1071x886
268 2867775
>>2867713
И еще в этом примере, с этими дейфайнами в примерах всегда имя дефайна в формате имени файла, но вроде можно любое использовать и работает, например
#ifndef _2ch
#define _2ch
269 2869257
>>2867676
строковые литералы неизменяемы
>>2867677
>>2867680
почти все иде умеют блобить варнинги и ерроры просто перещелкивая паттерны и референсы
>>2867713
инклюд делает контрол це контрол вэ, сделай это сам и увидишь
>>2867775
это так, впрочем долго объяснять почему не стоит дефайнить хуйнюнейм и неймить вары в абцдиэфджи
270 2871741
Аноны, не пойму, почему этот код так криво инвертирует биты? Т.е., когда число равно степени двойки, то инвертирует всё вроде правильно, а всё остальное как-то криво. Что я делаю не так?

https://pastebin.com/7j5GaDtF
image.png161 Кб, 1058x1169
271 2871746
>>2871741

>замена пик 1


В предыдущем посте хуита не нужная стоит в условии цикла инвертирования.
272 2871770
>>2871741
>>2871746

>Что я делаю не так?


сравниваешь ксор с ненулем, если числа равны ксор дает ноль отсюда и пляши, иначе ты его сравниваешь с интовым литералом, происходят неявные касты, переносы битов вся хурма, нахуй эти танцы нужны?
сильно не вчитывался
273 2871779
а вообще тебе бы почитать особенности битовой математики твоей архитектуры
там были значительные отличия между цисками и рисками по сдвигам в знаковых
274 2871782
>>2871770
А, типа, надо сравнивать бит с битом, а у меня получается, что я сравниваю два числа?
Снимок экрана 2023-10-09 в 15.37.30.png1,4 Мб, 2412x1664
275 2871788
>>2871782
не, побитово сравнивать не получится, можно только числами (битовым набором минимальной адресной ячейки тобишь байтом)
просто ксоришь два числа и в элсе делаешь то что надо если они равны, а в мейн ветке ифа соответсвенно все остальное
276 2871799
>>2871788
Вот, смотри, анон, а это похоже на xor?
277 2871805
>>2871799
это похоже на битовую маску
миллиард наносекунд назад написал себе макросы для побитовой ебли и больше не парюсь с этим, могу поделиться
278 2871806
>>2871805

>могу поделиться


Давай!
279 2871817
>>2871806
https://github.com/gitPeregrin/bits
там в ридми примеры есть, думаю разберешься, хотя я конечно криво написал их
280 2871823
>>2871817
Спасибо!
281 2874699
Нужен опытный сишник, плачу 500$. Суть задачи - переписать часть кода с отвязкой от основного кода программы. Телега snap2ch
1111.png12 Кб, 392x234
282 2875443
Я с глупым вопросом: мне нужно использовать termios.h для проекта в CLion (Win10), cygwin64 установил, проверил что termios.h имеется, однако CLion его не находит. Не работает ни <termios.h>, ни <sys/termios.h>. В чём может быть дело?
283 2875631
Дедули, я понимаю, при Сталине у вас хуй стоял и все на сишке писали, хочется вернуться в свою молодость. Ну, так пишите для себя и друзей по дому престарелых в качестве хобби, зачем тащить миллиарды уязвимостей в проекты, которыми люди будут пользоваться? Когда уже на международном уровне ваше вредительство запретят?
284 2875646
>>2875443
в компилере твоей ИДЕ отсутствуют нужные пути до хидеров

>>2875631
у меня и сейчас стоит, будешь?
285 2875682
>>2875631
Старая народная поговорка.

> Есть два вида людей, кто делает и кто учит.


Та же поговорка под реалии 2023

> Есть два вида людей, кто делает и кто запрещает.

286 2875694
>>2875631
Назови норм альтернативу Си, я перекачусь.
287 2875745
>>2875694
Лучше не тревожить этого дебича! У него фетиш на почтенных стариков и нескрипто-макакные языки программирования. Сейчас, если этот дебич возбудится, то мы будем не в силах остановить его эякуляцию, которая выражается в огромных постах, посвящённых почтенным старцам и языку программирования Си.
288 2875838
>>2875631
О, вот и осеннее обострение как по графику.
289 2875910
>>2875694
Du Rust?
290 2875960
>>2875910

>си с доп проверками и потерей скорости исполнения из за них


нет спасибо
291 2876166
292 2876168
Сдвиги эффективнее обычного умножения/деления?
293 2876199
>>2876168
быстрее на децималах, а не эффективнее
294 2876392
>>2876166
Когда будет тред с хотябы сотней перекатов, тогда подумаю. А пока какая-то нонейм хуйня.
295 2876433
Да это жирнотроль, никакай альтернативы си нет, не было, и не будет по крайней мере в обозримой перспективе. Да и нужно оно.
296 2876434
>>2876433
Утечки памяти пофиксил, проблемы с налпионтером пофиксил? Что юзаешь вместо божественного cargo?
297 2876483
>>2876434
да, да, скобки
хуй будешь?
298 2876590
>>2875694
Чем тебя Python не устраивает?
299 2876720
>>2876434
Что нигерскоеиговно ты высрал? Ни о чем подобном не слышал.
писать кож гадо уметь да, это тебе не смузи попивать
300 2877815
>>2876434
Но раст тормоз по сравнению с си и памяти нужно на порядки больше, как я понял для выведения типов.

Насчет управления памятью, в си - гсс и тсс, есть боундс чекер и cleanup attr, если с autofree макро
char *buf autofree = malloc (10);
Не нужно free (buf), он освободится при выходе из видимости.
buf[20] = 1 словит боундс чекер, такой он умный, даже с маллок.

"фикс" для нулпоинтера, это через union type, в кристале например, компилятор тебе скажет, что ты забыл: if (buf != NULL) ..., но делается через выведение типов и тормознуто. В зиг как-то по другому.

Тсс, компилер для си, очен быстрый и у него даже есть: tcc -run your-prog.c. Когда этот этап быстр, то тест драйвен девелопмент быстрее.
301 2877820
>>2877815

>Но раст тормоз по сравнению с си и памяти нужно на порядки больше


Компилятор я имел ввиду.
302 2877850
>>2877815
О, ну всё, переписываю весь свой код на сишку, в ней смартпоинтеры придумали.
303 2877857
>>2877815

>char *buf autofree = malloc (10);


>Не нужно free (buf), он освободится при выходе из видимости.


Не работает нихуя, пиздабол
https://godbolt.org/z/q4cM3GfWc
304 2877926
>>2877815

>char *buf autofree = malloc (10);


ммм тут >>2877857 говорят что хуйня
а я подумал зачем эти штуки если можно освободить в деструкторе?
305 2877935
>>2877926

>деструкторе


А что это?
306 2877937
>>2877935
функция-прослойка вызывающаяся после завершения мейна и перед передачей управления ос
307 2877938
>>2877937
Звучит слишком удобно чтобы я тащил это говно в мой любимый, божественный, девственно-чистый силанг.
308 2877940
>>2877938
еще жирнее набрось, иначе я не поведусь
309 2877941
>>2877940
Да кому ты нужен
310 2877944
>>2877857
Там указатель на указатель
void free_memory(char ptr) { free (*ptr); };

>>2877850
Но тем не менее, есть вот такая фича. Но в остальном я писал, что выведение типов не дается просто так. Т.е. если тебе нужно частно ждать пока скомпилится, то это время можно потратить на что-то еще.

Насчет раст, может я соврал, посмотрел видео про тесты, вроде бы быстро.
311 2877946
>>2877944
Две звездочки после char, RTFM.
312 2877947
>>2877946
звезды в шапке

>>2877944
у раста доп проверки, это априори не может быть так же быстро
313 2877950
>>2876433
Уже давно есть, Zig называется.
314 2878168
>>2877815
Раст не намного тормознее сишки. Типы по бОльшей части выводятся при компайл тайме, по типу шаблонов в плюсах.
315 2878293
>>2877926
>>2877815
>>2877926
Про алоку слышали?
316 2878306
>>2878168

>Пайтон не намного тормознее сишки. Типы по бОльшей части выводятся при компайл тайме, по типу шаблонов в плюсах.

317 2878334
>>2878306
Большего бреда я давно не слышал, лол.
318 2878335
>>2878334
о том и речь
319 2878344
>>2878335
Сыглы. Для того, чтобы сравнивать компилируемый и интерпретируемый языки, надо быть гением.
320 2878350
>>2878344
все это частные случаи трансляции, но такое макакам не понять
321 2878552
>>2878293
Не.

>>2878344
Почему нет? Есть jit. awk, это такой интерп. яп, он сравним с си, в его задачах. Но авк как инструмент будет не удобен, елси нужно будет компилить. Си, так-как быстро компилится, ближе к этим яп чем к раст. В си нет таких проверок типов как в раст. Есть яп где проверка типов отдельно.

Так что если яп отличаются, это не тем, компилятся он или нет, но как быстро это происходит. И мой вопрос по раст, был про время компиляции. Когда кто-то говорит: валите с си в раст, там крутое выведение и проверка типов. Так раст, это другая штука, ты каждый раз тратишь время на проверку типов и нет опции это отключить. Совсем другой инструмент. Хотя раст компилятор не такой уж и тормоз, вроде бы, но гораздо тормознутее tcc.

Так у меня и не сложилось мнение по растам и проч. Было бы круто, если бы яп мог выполнятся или быстро компилиться, у него был бы репл, как в интер. яп. Но если хочется, то медленно с кучей проверок типов и т.д.
322 2878601
>>2840288
Не надо экономить строки, анон. Компактность кода достигается за счет грамотной архитектуры вместо монолитных процедур. А вот это вот несколько стейтментов в одну строку нахуй надо. Уноси.
323 2878673
Ня.
splint.png53 Кб, 663x737
324 2878680
>>2878673
Картинка не прицепилась. splint, линтер для си, детектит нуллпоинтер.
325 2878692
Скажется tsoding-у спасибо за популяризацию емакса и иосевки.
326 2878704
>>2878680
>>2878673
и чо?
подозреваю что пока тебе очередная мокрописька не высрет стену текста ты и не подумаешь врапперы сделать
327 2878706
>>2878552
Компайл тайм - небольшая плата за безопасность. А скорости раста и си очень даже сравнимы: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust-clang.html
328 2878720
>>2878706

>https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust-clang.html


странный какой то бенч, не вижу параметров железки на которой гоняли тесты
329 2878790
>>2878706
И зачем ждать жоп время компиляции каждый раз если splint находит эти ошибки и его можно зпустить 1 раз? Ну, может он не все находит, я не знаю. Но такое разделение - быстрый компилятор и чекер отдельно, позволяет писать скрипты на си, tcc -run, что на раст из-за тормознутости компилятора не получится.

>>2878704
Зачем это помнить если есть линтер? Забуду запутстиь лентер? Так что угодно можно забыть. Запускать же линтер каждый раз, принуждением, это добавляет время для сборки, это мое время.
330 2878810
>>2878790

>Зачем это помнить если есть линтер? Забуду запутстиь лентер? Так что угодно можно забыть. Запускать же линтер каждый раз, принуждением, это добавляет время для сборки, это мое время.


ты сам то понял чо ты высрал? таблетки прими подробнее подкатом
>Зачем это помнить
помнить что? как писать код?

>Забуду запутстиь лентер?


главное таблетки не забудь

>Так что угодно можно забыть.


системы сборки

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


а читать стену текста не твое время ясно понятно
331 2878896
>>2878810
Как насчет разобраться о чем идет речь. Т.е. упрек в том, что я си не знаю и все ошибки, по твоему, от не знания? Ну это глупо.

Не нужно запускать линтер каждый раз.
332 2879085
>>2878896
про какие ошибки идет речь то? в линтере ворнинг по поводу того что ты не юзаешь реутрнинг валуес от сисколов, не знаешь выхлоп своих действий а потому потенциально делаешь влепую и возможен нулпоинтер
но ты бы мог проконтролировать выхлопы врапперами как это обычно и делают, ну или хотя бы ифами
так что я вообще тебя не понимаю, чо ты несешь, при чем тут что то забыть или не знание языка если это вообще про саму суть коденга

>Не нужно запускать линтер каждый раз.


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

ты вроде паришься по поводу скорости компила, но как я вроде бы тебе ранее уже говорил это проблема архитектуры твоего проекта а не компилера или языка
333 2879161
Кста, кроме splint, есть gcc -fanalyzer.

>>2879085
Речь про ошибки безопасности которые связаны с управлением памятью. Забыть иф или что-то еще можно по разным причинам.

Речь про такие яп где линтер, или выведение типов и проверка, занимает ощутимое время. В си возможно прототипировать, быстро скомпилить и в конце запустить линтер и пофиксить. В тех яп нельзя отключить проверку.

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

Зависит от структуры программы, но скопилируй 10 раз hello world на раст и на си, сравни время.

Кроме tcc -run, это влияет так-же на то, как ты пишешь тесты.
334 2879192
>>2879161

>не являются заменой си


базанул
335 2879224
>>2879161

>Зависит от структуры программы, но скопилируй 10 раз hello world на раст и на си, сравни время.



Вангую, раст будет мб раза в 2 медленнее (типа 50мс против 100мс). Проверь сам и поделись результатами.

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

А вот еще, чтобы раст тебе код проверил, ничего запускать не надо, иде тебе сама подчеркнет где ты объебался. Так что аргумент типа бульк среньк медленно компилится аж в 2 раза медленнее можно засунуть себе в зад.
Где медленно компилится - так это в тайпскрипте ебаном, а ведь это интерпретируемый язык, лол. Я когда фронт пилил, просто заебывался ждать, пока он проект перекомпилит и тесты прогонит, реально до 10с доходило.
336 2879231
>>2879224

>я уже 100 раз напишу


а мог бы просто два джипега сложить в скратче и пойти ебаца в жёппы
337 2879367
>>2879224

>Пока ты будешь Си, я уже 100 раз напишу ...


Питон в другом треде. В загон, скот.
338 2879370
>>2879367
О, диду нечем крыть.
339 2879373
>>2879370
Питонахрюк уже даже не отроицает.
340 2879376
>>2879373
Зачем мне что-то отвечать душевнобольному, который у себя в черепной коробке что-то надумал, и вместо какого-либо мало-мальски конструктивного ответа высирает только оскорбления? Мог бы тебя нахуй послать, но я же цивилизованный человек, а не животное.
341 2879377
>>2879224

>чтобы раст тебе код проверил


Или не проверил лол.
342 2879383
>>2879376
кекнул с этих попыток
срыгни с треда имбецил
343 2879388
>>2879383
>>2879373
>>2879367
сорян за этого долбаеба, только позорит нас, мать его ебал
344 2879406
>>2879388
Да ладно, мне похуй в принципе, пусть лает. Я не то чтобы много, но достаточно проектов на расте, включая пару веб-серверов https://crates.io/crates/axum охуеннен кстати, а после того, как я чутка подразобрался в его кишках - так вообще познал дзен раста так сказать, чтобы речь вести тут. В принципе новые проектики, если возможно, стараюсь на расте писать, очень уж язык нравится системой типов и гарантиями безопасности.
Кстати, непонятно, чё это он так питон не любит? Охуенный язык так-то.
345 2879410
>>2879388
>>2879406
спешите видеть самоподдув растопетуха
346 2879413
>>2879410
В твоей пустой голове вечно дует.
347 2879417
>>2879413
рот закрой землю видно
348 2879420
>>2879413
>>2879417
бля, может вы поссоритесь поссоритесь, а потом поебетесь уже наконец? Сил нет уже эту хуйню читать
349 2879432
>>2879420
возьми таймаут на недельку, пока тут растоклоун срет нормального общения не будет
350 2879445
>>2879420
Хз, я натурал, а первым оскорблять кто-то из ваших начал. А может вам сперва стоит искоренить аггресивных геев-сишников из своего треда?
351 2879459
>>2879445
не верти жопой, растопетух, вот тут >>2875631 ты и начал, тебе и уябывать из треда сигоспод
352 2879471
>>2879459
Согласись уже, что растоуебок тебя заовнил, так как ни одного контраргумента от тебя не было да и иди отдохни уже
353 2879473
>>2879471
лишь в твоих фантазиях
в очередной раз необучаемая макака вбросила говна, в очередной раз на нее поссали, теперь она тут нутье разводит
ничего не меняется
354 2879514
>>2879473
Спок, обход санитаров скоро. Угомонись, бешеный пёс.
355 2879522
>>2879473
>>2879514
сап, заебал уже, весь тред провонял вкусом кала из твоего зловонного рыла
356 2879539
Ебать у вас весело
мимо жабобоярин
357 2879917
Какой смысл сравнивать Си и Раст, если Сишка - это топорность, примитивизм и простота, а Раст уже стал аналогом плюсов по сложности и раздутости?
358 2879948
>>2879917
он и был как плюсы, но макака никак не угомонится и забрасывает тред бесполезным форсом
по сабжу смысла сравнивать нет, си это макросы для ассемблера, если будет что то лучше в треде дадут знать
359 2880606
>>2879917

>а Раст уже стал аналогом плюсов по сложности и раздутости?


Не, если послушать растопетуха, то растопараша - это нераздутый простой язык, где по мановению руки решены все проблемы с мемори багами, некая достигнутая недостижимая серебрянная пуля.
360 2880625
>>2880606

>это нераздутый простой язык


Ну пускай докажет это! Пикрил 1 это пример того, как, примерно, выглядит vector из плюсов, и операции над ним pushback и popback, на языке Си, который решает рекурсивно задачку о порождении подмножеств. Собственно, пикрилл 2 это тот же пример, который написан на плюсах. Теперь, если растоман хочет доказать нам, что раст это ультракрутяк, то пускай напишет тот же пример на нём.
Снимок экрана 2023-10-16 в 10.02.01.png47 Кб, 990x102
361 2880649
>>2880625
ну тут триггер для АБ шиза
мимо хейтер параллельных вычислений
362 2880751
>>2880625
У растопетуха ряя ансейф от этого случится и конпелятор будет сыпать красным до тех пор пока жопа не сколапсирует.
363 2880807
Как отличить нужный язык от ненужного.
- У нужного языка есть IDE, у самого нужного их несколько.
- У ненужного языка есть блокнотик и "пук-среньк-нинужно".
364 2880837
>>2880649
>>2880751
Та я уже сам узнал, что растоман, на самом деле, обычный растопетуччило, которое любит много кудахтать. Когда мы увидим его решение, я ему это докажу. Осталось только, чтобы он принял вызов.
365 2880863
>>2880807
не знал что растопетухи в блокнотик пишут, чо реально нет идешки?
2023-10-16-122308452x531scrot.png30 Кб, 452x531
366 2880905
>>2880625
Фича раст, это борроу чекинг, у тебя его нет. Но для си есть чекер отдельно, пример пик,

1. нужно игогда подстказать линтеру комментариями @null@ - значит функция может вернуть null, и т.д., но не так много анатаций, как видно
2. если уберать assert -> чекер выдаст ошибку
3. забуду free, тоже
4. нет проверки if (numline->line) -> выдаст ошибку
5. если вместо free (numline->buf), написать free (buf) -> линтер тоже выдаст ошибку, так-как передал управление объектом на который ссылается buf в mainline->buf. Ну вот это что-то вроде борроу чекинга, как я понял.

malloc перед getline, потому что чекер/splint не знает или я не знаю, как указать что getline выделяет память.

Но я так понял мало кто юзает линтер. Не знаю насколько это близко к раст чекеру.
367 2880952
>>2880905
представляю как ты тикеты закрываешь если на задачу навелосипедить вектор высрал это
зато в 100 раз быстрее да?
368 2880975
>>2880905
Челибос, почему ты не в курсе про метки?
369 2880990
>>2880625

>Ну пускай докажет это!


Лол, какие-то детские выебоны. Типа а давай спорим на щелбан шо ты не дурак! Никто с нуля эти вектора не пишет, есть готовые библиотеки линейной алгебры. Есть миллион способов сделать это в rust, там есть небезопасный режим, в котором можно резервировать и освобождать память как вздумается. Там есть методы shrink_to(), shrink_to_fit() для массивов, есть метод truncate(), есть макросы, есть хитрожопые типы... Короче если нужна библиотека линейной алгебры, можешь посмотреть --> https://nalgebra.org/

мимо-проходил-раст-программер
370 2881055
>>2880990
Ха! Слился? Вот я дед для каждой своей олимпиадной программы пишу реализацию вектора с нуля! И смузи не пробовал никогда! Ууу эти хипстеры, пиздуйте нахуй из треда!
371 2881061

>никто велосипеды не пишет


Правильно, поэтому в маленький проект тянется огромная либа с кучей зависимойстей как в npm.
372 2881063
>>2880975
goto что-ли? Ну это же пример бороу чекинга, написал что будет если в конце заменить free (numline->buf) на free (buf).

Тред какая-то диверсия, уровень культуры, внимания к тому что пишут, ниже некуда,
373 2881066
Только дочитал ветку срача и почти ничего не понял. Поясните нюфаку что такое линтер? Знаю только про линкер немного.
374 2881080
>>2881063

>Тред какая-то диверсия, уровень культуры, внимания к тому что пишут, ниже некуда,


Растопитухи понабежали ажтрисет, второй день валерьянку пью
375 2881141
растоклоуны не осилили реализовать вектор и ударились в словоблудие
ничего нового
папущины
376 2881152
А поясните, почему на расте нельзя написать вектор? Это из-за особенностей компилятора или самого языка?
image.png19 Кб, 494x304
377 2881169
>>2880990

>есть готовые библиотеки линейной алгебры


Прошу написать структуру (вектор в плюсах), которая очень похожа на обычный динамический массив, но со своими некоторыми "приколами", а этот растопетуччило говорит про линейную алгебру!! Представили ебало этого погромизда, который пытается в системное программирование, не умея гуглить, и даже не имея любопытства, чтобы начать гуглить?

А ответ прост - раст это такое же перегруженное говнище, как и плюсы, которое ни в коем случае нельзя юзать для системных фишек!!! Но можно и удобно юзать, если надо сделать красивое манипулирование красивыми кнопочками! Растопетуччилло, чем отличается выделенная часть на пикрилле от того, что я привёл на плюсах?
378 2881333
>>2881169
полагаю он подумал что векторы из матеши надо написать, однако все равно мы не дождались никаих потугов от перекладываля джейсончиков
379 2881384
>>2881169
В чем проблема вектор-то написать? Один только вопрос: зачем? Ты так выебываешься, будто это невьебенно сакральное знание, я ору.
Лови кость: https://pastebin.com/NdYvffGD
380 2881389
>>2881384
Кста, накидал эту хуйню за полчасика после ужина. Уже смакую как этот клоун будет петушиться.
381 2881419
>>2881384

>ряя ансейф

16973394874580.png1,7 Мб, 1243x2133
382 2881425

>вектор


>почасика

383 2881436
>>2881384

>В чем проблема вектор-то написать? Один только вопрос: зачем? Ты так выебываешься, будто это невьебенно сакральное знание, я ору.


>https://pastebin.com/NdYvffGD


Ну, короче, что и требовалось доказать, куча какой-то ооп параши и свистоперделок.
384 2881465
>>2881384
Пиздец!! И эта простыня решает такую простую задачку, как нахождение подмножеств? Чел, во-первых, ты сравни объём кода, во-вторых, он ещё и по скорости проигрывает, просто потому что я тебе доказал предыдущим постом, что раст это перегруженное говнище. И теперь, включи голову и подумай за что ты топишь:

1) За то что увеличивает объём кода
2) За то что понижает скорость.

А теперь взвесь эти два аргумента, и съеби с треда, поняв, что у тебя тупо нет никаких аргументов против Си.
385 2881487

>https://pastebin.com/NdYvffGD


А в этой растопараше есть понятие null pointer constant? Если произойдёт какая-то ошибка, что вернёт std::alloc::alloc?
386 2881522
>>2881419
На низком уровне с рав пойнтерами только в ансейфе можно работать, потому что у компилятора нет способов убедиться, что у тебя в них лежит. Это даже имбейилк ясно. Обычно, если нужна работа с указателяии, пишут в ансейфе, обкладывают тестами и выставляют наружу сейф интерфейс.

>1) За то что увеличивает объём кода


В чем проблема? По-моему довольно читаемо. Там треть кода мейн + коменты + 2 геттера + пару хелперов.
Мы объемами кода меряемся? Мб письки еще измерим?

>2) За то что понижает скорость


На какой строке понижается скорость, можешь пояснить?

>>2881487
Да, std::alloc::null
В случае ошибки алллокауии вернется как раз null
387 2881540
>>2881522
Про "ряя ансейф" это была ирония, я думаю, все помнят историю с Коляном.

>если нужна работа с указателяии, пишут в ансейфе


Ансейф параша это про разименовывание raw указателя и вызов ансейф говна.
>>2881522

>довольно читаемо


Гораздо менее читаемо, чем листинг сипараши выше.

>2 геттера + пару хелперов


Нахуя это все было делать вообще?
388 2881548
>>2881540
Геттеры - чтобы юзер не мог сам шариться по структуре и менять приватные поля. Остальные приватные - ну мне так удобнее.
389 2881551
>>2881548

>юзер не мог сам шариться по структуре и менять приватные поля. Остальные приватные - ну мне так удобнее.


Ладно, что ты в нашем треде забыл любитель приватных полей?
390 2881561
>>2881551
Не вижу логической связи.
391 2881568
>>2881540

>Про "ряя ансейф" это была ирония, я думаю, все помнят историю с Коляном.


Бля, постоянно эта хуйня на языке вертится, но откуда пошло и что за Колян - не знаю)
392 2881587
>>2881561
Почему-то не удивлён.
grid0384N.webp102 Кб, 384x576
393 2881849
Смотрел давно уже видео и там чел юзал какой-то вебсервис и просто вбивал функцию С и printf и сразу видел вывод, как среда для запуска сниппетов, без хедеров без мейна, просто быстро потестить.
Не могу найти, но есть же такое?
394 2881919
>>2881849
Пайтонтутор?
395 2881931
>>2881522

> с рав пойнтерами


Сьебис в синагогу.
396 2882351
>>2881849
https://www.onlinegdb.com/online_c_compiler
Первая ссылка по поиску "c ide inline".
397 2882354
>>2882351
*online
image.png71 Кб, 930x848
398 2882499
>>2881919
Что они имеют ввиду под AI tutor? Я не нашел никакого AI tutor у них.
400 2883171
>>2883165

>Ctrl+F


>Visual Studio


>"No matches were found"


Переделывай.
401 2883497
Как из Сишной программы на Линуксе можно читать COM порт? Философия "Все есть файл" не очень помогает и обычными средствами читается как-то криво.
402 2883504
>>2883497
Его скорее всего настроить для начала надо, типо как через stty это деланшь, только набором библиотечных функций. Т.е. у тебя там не только read() будет вызываться, но и ещё какой-нибудь ioctl() с нужными параметрами для ком порта.
403 2883545
>>2883504
Ага, уже посмотрел пару статей в интернете. Ну и пиздос, конечно.
404 2883593
>>2883545
Обычное дело для работы с периферией. Скорее всего для работы с ком портом уже давно есть удобные либы, у меня так недавно с GPIO было, достаточно заинклудить gpiod.h и там уже все готовое для инициализации и работы есть. С uart вообще проблем быть не должно, потому что он слишком древний.
405 2883818
>>2883497
Вот, братан, я погуглил для тебя, может подойдёт:
https://stackoverflow.com/questions/6947413/how-to-open-read-and-write-from-serial-port-in-c
406 2883869
>>2883818
Ахуеть, то есть мы буквально открываем дейвайс на линуксе и пишем в него какие-то байты? Выглядит интересно. А на винде это как программируется, там ведь не всё файл, как в линуксе.
мимо
407 2883933
>>2883869

>мы буквально


буквально файл
что кстати очень удобно, можно $ ls -a /dev прочекать все устройства вотличие от
обмен инфой между процессами посредством сокетов так же буквально пишем в файл и читаем из него же
а вот про винду не знаю, анончики подскажу, я лет 15 уже на винде не был
408 2884041
>>2883818
Да, спасибо, еще раз.
Я уже находил эту статью и сейчас попробую по уму сделать.
409 2884081
>>2883818
Я, мб, дегенерат, но откуда эта функция взялась? Никак не могу нагуглить.
410 2884086
>>2884081
Возможно какая-то user defined, которую он не выложил.
411 2884159
>>2884081

>лгбт раскраска


>откуда эта функция взялась


>Я, мб, дегенерат


Бинго, зумер-дегенерат.
412 2884164
>>2884159
Ты, наверное, из тех кто и розовый цвет пидорским считает, верно?
413 2884184
>>2884159

>лгбт раскраска


Это буквально дефолтный цвет gcc.
16114289648180.mp4608 Кб, mp4,
434x360, 0:13
414 2884325
16872905380150.mp41,4 Мб, mp4,
1106x1080, 0:03
415 2884344
416 2884674
>>2884081
Скорее всего это макрос какой-то для логирования.
417 2886495
>>2884184
да он не про гцц же а про подсветку синтаксиса наверняка
418 2887330
>>2886495
Возможно, даже как-то не обратил внимания на подсветку синтаксиса, а вот гцц явно выделяется.
Крайне глупый вопрос 419 2888247
Пусть есть две программы:
prog1.c
#include<stdio.h>
int main(int a, charaa)
{
int a[20];
return 0;
}


prog2.c
#include<stdio.h>
int main(int a, char
aa)
{
int n;
scanf("%d",&n);
int a[n];
return 0;
}

Трюк с массивом, как во второй программе, проделаваю часто, но лишь сейчас возник вопрос: если в первой программе компилятор знает, сколько выделять место в стеке, то во второй как?
У меня была мысль, что если компилятор видит объявление массива и в квадратных скобках не константа, а переменная, то заменяет всё на строчку с malloc, но и к этому у меня несколько вопросов.
420 2888317
>>2888247
мой компилятор не пропустит второй вариант по причине нон статик вар ин статик аррэй
твой видимо волшебный
421 2888338
>>2888317
gcc спокойно пропустил. clang возмущался.
422 2888345
>>2888247
Ка бэ, не особо то и глупый вопрос!
Пикрилл 1 это дизассембл первой программы. Тут компилятор даже не ввёл массив, потому что он не задействован в проге. Если в твою прогу добавить цикл заполнения массива единицей, то он выглядит как пикрил 2, т.е. тут уже массив задействован.
Приколы начинаются, когда дизассемблишь вторую программу! Тут какие-то "финты ушами", после того как scanf вернула управление (пикрил 3-4). Обрати внимание, сколько регистров задействовано! Компилятор gcc.
423 2888356
>>2888345
Продолжение!
Пикрил 1 это, если использовать malloc после scanf. Пикрил 2 это реализация malloc на асме для линукса, чтобы сравнить объём кода, твоей проги 2 и проги, которая использует malloc. И мне кажется, что код с malloc гораздо компактнее и яснее.
424 2888586
>>2888247

>то во второй как?


Во время исполнения выделяет на стеке.

>то заменяет всё на строчку с malloc


>malloc


Нет, см дизасм с комментами.

https://pastebin.com/P2WFRUYU
425 2888601
>>2888345
>>2888356

>пикрилы


Это что?
426 2888668
>>2888601
Дизассембл программ на Си.
427 2888669
>>2888586

>Во время исполнения выделяет на стеке.


Ааа, он на стеке, получается, выделяет память.
428 2888681
>>2888586
Это получается, что, если во второй проге в сканф загнать значение большее значения стека (допустим, что стек 8 мегабайт), то прога упадёт?
429 2888691
Да, прога падает! Чёт у меня стек маленький, аноны!!! Всего 2 мегабайта в эрегированном состоянии!!! Есть рабочие способы увеличения стека? Или размер стека не важен?
430 2888713
>>2888691
У тебя средний стек, не волнуйся, а пиздаболам с двача не верь, у кого там по 8МБ.
431 2888731
У меня только что стек оверфлоу произошел от вашего юмора.
432 2888855
Почему тогда не могли придумать операционную систему, которая автоматически останавливала бы программу, если место в стеке кончается, и сигнализировала бы администратору поставить больше памяти в сервер, после чего продолжала бы работу? Можно было бы писать более гибкие программы.
433 2888900
>>2888855
чо несет
434 2889045
>>2888668
Так что за дизассембдлер?
>>2888691
>>2888713
>>2888731
>>2888855
Кринж.
435 2889063
>>2889045
Кринж это когда спрашивают, что такое дизассембл.
436 2889070
>>2889063
Ты ёбнутый?
437 2889087
>>2889070
Не рвись.
438 2889097
>>2889087

>-Что за дизасемблер на пике?


>-Дизассембл программ на Си. Кринж это когда спрашивают, что такое дизассембл


>-Ты ёбнутый?


>-Не рвись.


Нет сырья и кадров.
16872616647830.mp42,4 Мб, mp4,
576x1024, 0:16
439 2889150
>>2889097
проебали все полимеры
440 2889194
>>2889045
Дизассемблер, представленный в пикрилах этого >>2888345 и этого >>2888356 постов, это gui утилита на базе radare2. Если ты спрашиваешь о том, что вообще такое дизассембл, то советую загуглить. Если ты спрашиваешь про то, что конкретно я дизассемблил, то:

1) пикрил 1 (данного поста) это пикрил 1 этого поста >>2888345
2) пикрил 2 (данного поста) это пикрил 2 этого поста >>2888345
3) пикрил 3 (данного поста) это пикрилы 3-4 этого поста >>2888345
4) пикрил 4 (данного поста) это пикрил 1 уже вот этого поста >>2888356

2-й пикрил вот этого поста >>2888356 не имеет дизассембла, ибо код, представленный на данном пикриле (2-й вот этого поста >>2888356) уже сам написан на ассемблере, а это значит, что данную программу не имеет смысла дизассемблить.

зумеры...
441 2889397
>>2846510
Хз, книги его хорошо выстроены. Там есть все, чтобы с нулика подняться.
442 2889502
>>2889397
Ну, он даёт направление, а дальше сам. Например, асм по его книге выучить невозможно, потому что у него банально не показано то, как выводить на экран результат программы. В общем, если его книги совмещать с другими, но при этом придерживаться того порядка, в котором подаётся материал в его книгах, то с "нулика" подняться можно.
443 2889599
>>2883933

> буквально файл


Люди, которые бездумно повторяют восхваления этого «концептуального прорыва», забывают уточнить контекст. В шестидесятые-семидесятые годы какие, собственно, устройства подключались к большим и малым ЭВМ? Устройства хранения данных, каналы связи, терминалы. А какая была альтернатива? «Загрузите по адресу ABCD код команды, дождитесь установки статусного регистра устройства, получите статус операции по другому адресу, в течение 500 мкс отправьте данные для записи, если не успеете — состояние буфера не определено, сбрасывайте и читайте заново и так далее». Ну, или библиотека, в которой кто-то делает это всё за вас, и остаётся только функции вызывать в нужном порядке (который тоже требует понимания внутренностей). На этом фоне «ну типа пиши данные как в файл» было волшебной абстракцией.

Занятно, что персональные компьютеры проходили те же ступени эволюции, и в какой-то момент пользователи, желающие использовать крутейшую вещь — НЖМД, должны были сами в контроллере настраивать и цилиндры-головки-сектора, и задержки доступа (в буквальном смысле сколько нужно крутить мотор, чтобы при начале чтения или записи метка начала нужного сектора оказалась у головки, и сколько ждать после этого) в зависимости, например, от быстродействия чипов памяти, стоящих в компьютере, а потом объяснять то же самое программам, желающим общаться с диском. Потом это всё быстренько обернули в более удобные форматы, как аппаратные, так и программные. Подробности в видосиках про старые диски у https://www.youtube.com/watch?v=8LbFKV_pPAE
444 2889608
>>2889599
к чему этот длиннопост? хочешь сказать сейчас как то иначе делается с удаленной периферией? не дури нам голову, все так же как в 70х
445 2889717
>>2889608

> длиннопост


С пейджера читаешь? Что-то мне подсказывает, что длинных постов ты и не видал.

Представить программам таким образом устройства, которые логично было представлять в виде потока символов, было шагом вперёд. Устройства, имеющие сложное состояние, настраиваемое кучей способов, в файловую абстракцию не запихиваются. Для сети, например, взяли концепцию сокетов, а не какое-нибудь /dev/internet/tcp/192/168/5/5/666. Впрочем, были и другие абстракции вроде
https://en.wikipedia.org/wiki/X/Open_Transport_Interface
446 2890827
>>2889717

> С пейджера читаешь? Что-то мне подсказывает, что длинных постов ты и не видал.


Ты просто растекся мыслью без повода, а вывода никакого не привёл. Спрашивается, нахуя?
447 2891015
>>2889717

>Устройства, имеющие сложное состояние, настраиваемое кучей способов, в файловую абстракцию не запихиваются.


какой же поток хуйни от хабродебила я ебал это комментить
448 2893207
есть у вас package manager какой-нибудь? где либы искать?
449 2893266
>>2893207
Тебе с такими вопросами прямиком в пориджную.
450 2893369
>>2893207
Диды либы не ищут, диды для каждого проекта сами реализуют примитивы типа векторов с нуля и гордятся этим.
451 2893379
>>2893207
рубрика ответов чата-гпт

Для правильного поиска библиотек для языка C вы можете использовать следующие подходы:

1. Используйте пакетные менеджеры:
- Обратитесь к документации вашего дистрибутива Linux, чтобы определить, какой пакетный менеджер у вас установлен.
- Используйте команды поиска пакетов в вашем пакетном менеджере, такие как apt search, yum search, pacman -Ss, zypper search, в зависимости от вашего дистрибутива Linux.
- Введите ключевые слова, связанные с библиотекой C, которую вы ищете, и просмотрите результаты поиска для получения списка пакетов, содержащих эти библиотеки.

2. Посещайте сайты репозиториев:
- Многие дистрибутивы Linux имеют официальные репозитории, где вы можете искать и устанавливать библиотеки.
- Обратитесь к веб-сайтам вашего дистрибутива Linux и найдите раздел, посвященный репозиториям, чтобы получить доступ к списку библиотек и инструкциям по их установке.

3. Используйте онлайн-ресурсы:
- Существуют онлайн-ресурсы, такие как www.cplusplus.com, www.github.com и www.nongnu.org, где вы можете найти различные библиотеки для языка C.
- Используйте поисковые системы, чтобы выполнить поиск по ключевым словам, связанным с тем, что вы ищете. Например, "C libraries for networking", "C libraries for graphics", и т.д.

4. Коммуникация с сообществом:
- Обратитесь к сообществам программистов на языке C, форумам и IRC-каналам, где вы можете помощь в поиске конкретных библиотек или рекомендаций относительно задачи, которую вы пытаетесь решить.
- Задайте свой вопрос в соответствующих группах в социальных сетях или на специализированных платформах, таких как Stack Overflow, где сообщество может предложить вам конкретные рекомендации по библиотекам, основываясь на вашей задаче или потребностях.

Общий совет: перед установкой или использованием библиотеки, проведите некоторое исследование, чтобы убедиться в ее актуальности, надежности и соответствии вашим требованиям. Ознакомьтесь с документацией и оцените качество кода и отзывы сообщества перед тем, как интегрировать новые библиотеки в свой проект.
451 2893379
>>2893207
рубрика ответов чата-гпт

Для правильного поиска библиотек для языка C вы можете использовать следующие подходы:

1. Используйте пакетные менеджеры:
- Обратитесь к документации вашего дистрибутива Linux, чтобы определить, какой пакетный менеджер у вас установлен.
- Используйте команды поиска пакетов в вашем пакетном менеджере, такие как apt search, yum search, pacman -Ss, zypper search, в зависимости от вашего дистрибутива Linux.
- Введите ключевые слова, связанные с библиотекой C, которую вы ищете, и просмотрите результаты поиска для получения списка пакетов, содержащих эти библиотеки.

2. Посещайте сайты репозиториев:
- Многие дистрибутивы Linux имеют официальные репозитории, где вы можете искать и устанавливать библиотеки.
- Обратитесь к веб-сайтам вашего дистрибутива Linux и найдите раздел, посвященный репозиториям, чтобы получить доступ к списку библиотек и инструкциям по их установке.

3. Используйте онлайн-ресурсы:
- Существуют онлайн-ресурсы, такие как www.cplusplus.com, www.github.com и www.nongnu.org, где вы можете найти различные библиотеки для языка C.
- Используйте поисковые системы, чтобы выполнить поиск по ключевым словам, связанным с тем, что вы ищете. Например, "C libraries for networking", "C libraries for graphics", и т.д.

4. Коммуникация с сообществом:
- Обратитесь к сообществам программистов на языке C, форумам и IRC-каналам, где вы можете помощь в поиске конкретных библиотек или рекомендаций относительно задачи, которую вы пытаетесь решить.
- Задайте свой вопрос в соответствующих группах в социальных сетях или на специализированных платформах, таких как Stack Overflow, где сообщество может предложить вам конкретные рекомендации по библиотекам, основываясь на вашей задаче или потребностях.

Общий совет: перед установкой или использованием библиотеки, проведите некоторое исследование, чтобы убедиться в ее актуальности, надежности и соответствии вашим требованиям. Ознакомьтесь с документацией и оцените качество кода и отзывы сообщества перед тем, как интегрировать новые библиотеки в свой проект.
452 2893380
>>2893369
У скриптомакак ни пичот! Повторяю! ни пичот!!!
453 2893555
>>2889717

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


Диск никак не поток символов, он набор блоков с квазипроизвольным доступом. Нахуя его делать файлом? Томпсон головного мозга.
454 2894098
>>2893379
ну и говнище...
ладно я уже нашел Conan какой-то посмотрим чё там
455 2894272
image.png43 Кб, 710x451
456 2894310
Аноны, головоломка: как мне в этом коде запомнить подмассив с наибольшей суммой?
https://pastebin.com/xaaVT3St
457 2894446
>>2894310
А для чего у тебя указатель объявлен?
458 2894510
>>2894446
Чтобы сохранить подмассив.
459 2894529
460 2894543
>>2894529
Да, этот вариант подходит.
461 2895050
Какой си лучше учить c89 c95 c1488? Или тот си который компилятор поддерживает типа gnu c, msvc c, hui pizda c?
462 2895074
>>2895050
Учи Си.
463 2895456
>>2895050
Ну и бред.
464 2895689
>>2895456
По моему он тролит.
465 2895724
>>2895050
Учи последнюю версию и знай c89, чтобы максимально портируемое ПО под максимальное количество архитектур писать.
С отдельными диалектами и особенностями компилятора в процессе работы разберешься..но лучше на диалектах не писать
466 2896025
Анончики, привет.

Как заставить функцию main применять в качестве аргументов кириллицy? chcp 1251, chcp 65001, SetConsoleCP() и SetConsoleOutputCP() не помогают, пытался использовать LPWSTR, но тоже не помогло, OS -- windows 10, компилятор -- gcc
467 2896056
>>2835215

А я обычно, когда проект компилирую в консольное приложение или же исполняемый файл, то прости пишу так

gcc main.c functions.c global.c

main.с это собственно файл с главным циклом программы, функцией main.

functions.c — это функции написанные для работы алгоритма

global.c — это файл с константами, чтобы из было удобно изменять, не залезаю в .h , хотя его и можно в .h запихнуть

Совсем неправильно делаю или надо как Вы сначала скомпилировать объектные файлы, а уже потом их слинковать в один исполняемый файл?
468 2896057
>>2835215

А я обычно, когда проект компилирую в консольное приложение или же исполняемый файл, то прости пишу так

gcc main.c functions.c global.c

main.с это собственно файл с главным циклом программы, функцией main.

functions.c — это функции написанные для работы алгоритма

global.c — это файл с константами, чтобы из было удобно изменять, не залезаю в .h , хотя его и можно в .h запихнуть

Совсем неправильно делаю или надо как Вы сначала скомпилировать объектные файлы, а уже потом их слинковать в один исполняемый файл?
469 2896700
>>2896025
цел глав(цел аргч, симв @@аргв)
470 2896794
>>2896700
и нахуй ты мне заголовок main скинул, сволочь, смешно думаешь? Ты вообще не вчитывался вопрос видимо
471 2897856
>>2896056
>>2896057
у тебя теже этапы компила в объекты и линковка проходят под капотом, конечно лучше контролировать данный процесс
ведь не обязательно кажый раз рекомпилить глобалы пральна? поменялось чота в функциях - ты рекомпилишь все файлы, я рекомпилю только объектник функций
как проекты станут больше хеловорлдов разница станет ощутимой
472 2897860
>>2896794
побитово прочитай ввод и распарси по табличке
нейросети и языки программирования 473 2898798
Если C/C++ компилируются в то, что потом работает непосредственно на самом процессоре, логично предположить, что скорость работы на C/C++ будет значительно превосходить питон, но почему тогда разные исследования по искусственному интеллекту через нейросети опираются на питон и его бибмотеки?
Ведь обход какого-то крайне огромного графа(хоть в ширину, хоть в глубину) будет быстрее у C/C++, ведь многопоточность на си более настоящая, чем у питона.

Меня вообще смущает, что питон как-то более часто используется студентами/аспирантами/исследователями в написаниях и численных экспериментах. Ладно, допустим, что это за счёт кроссплатформенность, но почему тогда не джава(тоже кроссплатформенность)?
474 2898839
>>2898798
Так питон может либо на Си использовать не?
475 2898860
476 2898864
>>2898798

>Меня вообще смущает, что питон как-то более часто используется студентами/аспирантами/исследователями в написаниях и численных экспериментах.


Потому что питон используется как "клей" к числодробилкам на компилируемых языках, аля Си, плюсы, фортран. Питон - это язык более высокого уровня, который позволяет людям без особых навыков программирования относительно легко решать задачи предметной области.
Основную работу по вычислениям выполняют библиотеки на си/плюсах, как ты и сказал.
477 2898865
>>2898864
Алсо, питон можешь заменить любым другим скриптовым языком, аля R, Julia, Guile и т.д.
478 2898871
>>2898860
jit Только у pypy есть, у cpython никакого jit нет и не будет скорее всего.
479 2899650
>>2898798
Потому что нейросети это предметная область, как бухгалтерия. Бухгалтеры и ученые не программисты, их компьютер не интересует, им нужен язык для даунов чтобы проще было писать их алгоритмы не заморачиваясь ничем лишним. Поэтому они используют 1С и питон, так проще.

Кстати, раньше для этой нейромутатени использовали LISP, такая же высокоуровневая параша как питон, а может и хуже.
image.png46 Кб, 1253x650
480 2899654
На винде с visual studio code идет gcc?
Ставлю вот build tools в надежде, что там есть. Какие галки ставить?
481 2899724
>>2835039 (OP)
Как научиться читать? По отдельности гуглю каждую функцию и аргументы, но целиком строки не понимаю, не говоря уже о целых блоках.
Мимо вкаткун самоучка
482 2899732
>>2899724
1) Знать стандартную библиотеку (если такое вообще применимо к Си, лол)
2) Больше кодить
3) Больше чиать чужой код
4) Иметь хотя бы базовое представление о предметной области для которой написан код
483 2899733
>>2899654

>Какие галки ставить?


Вот эти:
https://www.msys2.org/
484 2901072
>>2899733
Это же под линукс типа эмуляцию виндовской среды?
485 2901159
>>2899654
Ставь Code Block портабельную версию и не еби свой моск.
image.png93 Кб, 772x612
486 2902163
Как ставить checkpoint как в gdb, чтобы можно было прыгнуть назад?
И какой дебаггер используется если я юзаю https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
пикрил
487 2902198
Продолжаю тему микрогайдов на примере функции fooДополним наш проект маунальными тестами.Удобно будет все же создать хидер с прототипами наших функций.proto.hint foovoid; // return int printfconst char⚹ format, ...; // std format outputДобавим в проект еще один сырец с мейномtest.c#include "proto.h"int mainvoid{int res = foo;ifres- return ;return ;}Не забудьте включить хидер proto.h в main.c заместо прототипов.У нас уже есть скомпиленный foo.o и нам для сборки тестов достаточно скомпилить test.o и собрать приложуню.gcc -c test.c -o test.ogcc test.o foo.o -o testsuite.exeТесты ничего не печатают на экран, но возвращают код операционке и это можно использовать в системах сборки. Например в makeMakefilemyapp: tests main.o foo.o proto.hgcc main.o foo.o -o myappmain.o: main.cgcc -c main.c -o main.ofoo.o: foo.cgcc -c foo.c -o foo.otest.o: test.cgcc -c test.c -o test.otests: testsuite./testsuitetestsuite: test.o foo.o proto.hgcc test.o foo.o -o testsuiteИтак myapp: tests main.o foo.o proto.hОбратите внимание, что основной релизный проект собирается только после того как успешно выполниться цель tests, тоесть если все тесты успешно выполнились мейк слинкует финальный экзешник. Если экзешник тестов вернет операционке не а любой другой код ошибки - мейк не станет выполнять эту цель по сборке финального экзешника и прерветься с ошибкой.Без автозамены функциями мейка выглядеть будет так. У мейка есть свои функции и переменные обработки текста, чтобы выкапывать имена файлов/каталогов и подставлять их куда нужно.
488 2902270
Есть какой-нибудь способ извлечь имена всех макросов и функций из заголовочного файла? По-простому не парсится: многострочники, скобки, переопределения всякие, суффиксы и я труба шатал это препроцесс васянский. Может какая утиль линуксовая выхлопнет мне списочек?
489 2902337
>>2902270

>имена всех макросов


gcc -dM -E header.h

> и функций


Как напечатать определения функций - хз. Если там инлайн функции, то

gcc -fdump-tree-all header.h

появится куча файлов, среди них будет что-то типа a-header.h.005t.original, там все увидишь
ккк.jpg97 Кб, 1280x720
490 2908749
сдаю код на проверку на сайт ВУЗа. Компилятор(Visual Studio 2010 (32 bit)) выдает такую ошибку: fatal error C1083: Cannot open include file: 'windows.h': No such file or directory. Как я понимаю , не может найти библиотеку windows.h. Подскажите как исправить плз
491 2908751
>>2908749
бамп
492 2908758
>>2908749
бамп
493 2908761
>>2908749
include — директива препроцессора, которая включает в текст программы содержимое указанного файла.

Эта директива имеет две формы:

— #include "имя файла";
— # include <имя файла>;

Имя файла должно соответствовать соглашениям операционной системы и может состоять либо только из имени файла, либо из имени файла с предшествующим ему маршрутом.

Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, а при его отсутствии в текущем каталоге.

Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых командой PATH.
494 2908832
Правильно ли я понимаю, что из-за того, что память выделяется "страницами" обычно по 4КБ, то даже выделив malloc'ом 100 байт, к примеру, процессу выделится пул 4КБ и последующие вызовы malloc, в случае если этого пула хватает на выделение, будут его использовать, а не требовать новую страницу? И как быть, если надо выделить 2МБ? Эти 2МБ будут разбиты на несколько страниц, или это будет 1 страница размером 2МБ? И в случае, если выделяется несколько страниц, то как будет происходить адресация? Условно говоря 1 часть массива может находиться на одной странице, а другая часть на другой.
495 2908848
как раз с угловыми кавычками и не сработало, я поменял на другие, думал дело в этом
496 2908852
>>2908761
как раз с угловыми кавычками и не сработало, я поменял на другие, думал дело в этом
497 2909984
>>2908832
Процессор предоставляет операционке возможность выстроить непрерывное адресное пространство на столько процессов, на сколько нужно. От 4КБ до 4МБ. Есть ещё 1ГБ. Ядро может тасовать эти страницы на своё усмотрение, редактируя специальную таблицу. Тем временем для обычного процесса пользователя ядро и компилятор могут абстрагировать этот механизм, дробя память кусками поменьше; но непрерывность в них уже будет обязательной, так как программы компилируются в бинарники с нативной адресацией процессора, и подменяться, как в механизме выше, уже не могут; да и не выгодно это будет в таком масштабе. Взглянуть на адреса переменных можно через printf "%p". Обычно их выравнивают на некоторую величину для оптимизации скорости доступа; даже рядом стоящие в одной структуре располагают не подряд, если те меньше машинного слова; как в стеке.
498 2909989
Короче, механизмом страничной адресации занимаются процессор и ядро. Аллокацией - ядро и компилятор. В зависимости от структуры ОС всё это может меняться. Ничто не препятствует тому, чтобы запустить загрузчик ОС до инициализации страничного механизма и работать со всей ОЗУ как есть, без каких-либо механизмов защиты и в однозадачном режиме.
499 2910017
>>2908832
твой вопрос завист как от того что за ОС, так и от типа архитектуры процессора в общем случае.
вообще можешь маллокнуть себе 100байт себе и посмотреть сколько процессу выделится в итоге.
500 2910381
https://compcert.org Как я понял, только у Си есть пруф-чекед компилятор.
501 2910763
>>2908832

>Правильно ли я понимаю, что из-за того, что память выделяется "страницами" обычно по 4КБ, то даже выделив malloc'ом 100 байт, к примеру, процессу выделится пул 4КБ и последующие вызовы malloc, в случае если этого пула хватает на выделение, будут его использовать, а не требовать новую страницу?



Да. Там все немного сложнее, есть арены, чанки, но суть верна. Если нужны подробности - https://sourceware.org/glibc/wiki/MallocInternals

>И как быть, если надо выделить 2МБ? Эти 2МБ будут разбиты на несколько страниц, или это будет 1 страница размером 2МБ?



Зависит от архитектуры и размера страницы на этой архитектуре
Подробнее - https://en.wikipedia.org/wiki/Page_(computer_memory) , таблица "Page sizes among architectures"

>И в случае, если выделяется несколько страниц, то как будет происходить адресация?



Если совсем упрощенно: в процессоре есть специальная таблица, которая сопоставляет "виртуальные" адреса, которые тебе выдала ОС и "физические" - те, которые есть в железе. ОС выделяет тебе несколько страниц для твоего массива, у них виртуальные адреса идут по порядку, но физические могут быть разбросаны как угодно

https://en.wikipedia.org/wiki/Virtual_memory
image.png710 Кб, 1080x745
502 2912694
>>2835039 (OP)
поясните по пику плиз
void * - это просто указатель на какую-то область памяти без привязки к типу данных, которые там находятся. так?
а что значит empty? это какое-то ключевое слово? или имя переменной?
503 2912699
>>2912694
Если ты про свой пик то эмпти просто имя указателя. А воид да это наше все.
505 2913922
>>2912694
Ну так это метамем, типа этот чел, который на переднем плане, может указывать вообще на любую хуиту, поэтому он void*. Только хз почему empty,? И почему у "указателя" нет глаз? И почему чел, на которого указывает "указатель" держит закрытыми глаза? Вообще, empty void можно перевести как "пустая пустота", типа, наверное, когда глаза закрыты или их нет, то перед глазами одна лишь темнота, что метафорически можно связать с пустотой, поэтому типа депрессивный такой мем, типа пустота указывает на пустоту.

А вообще, это хуита какая-то! Иди спроси у создателя мема, что этот долбоёб хотел сказать.
506 2914071
>>2913922
Никто указывает на ничто! Типа такая провокация, такой бунд, либо тупо защитная реакция (видать в каком-то из мемов с "указателем", автор узнал себя и подгорел), что типа тот, что не значит ничего, указывает на то, что не значит ничего, на то, что абсолютно неважно, что вообще не имеет никакого значения!!!
изображение.png83 Кб, 758x700
507 2916634
Почему пайпы закрываются до execlp?
изображение.png97 Кб, 749x729
508 2916636
>>2916634
Бля, ошибся с пиком. Вот
509 2916893
>>2916634
Насколько я помню, они закрываются для того, чтобы не наследовались процессом через exec. Вроде как есть какой-то флаг чтобы сами закрывались, CLOEXEC вроде или что-то такое.
510 2919410
Насколько будет обсёр с подливой если я буду учиться по книге 2000 года издания?
511 2919453
>>2919410
Пёс учись по книге 1978г.
512 2919593
>>2916636
Чтобы exec не унаследовал их дескрипторы, ну и просто чтобы не было дублирующихся дескрипторов, там же пайп переназначается на поток вывода в процессе-потомке.
513 2919627
>>2916893
Спасибо
514 2924748
Зачем функции типа memcpy возвращают значение первого аргумента? Он у меня и так есть, я же его ей и передал.
Ебал примеры в капче.
515 2924926
>>2924748
Могу предложить, что иногда так код лакончинее получается, когда в одну строчку можешь запихнуть вместо 2
516 2924971
>>2924748
Код ошиби. Если значение не равно твоему - случился говняк.
517 2925692
Как тян объяснить программирование, она говорит что похоже на заклинания.
518 2926357
Зачем существуют функции usleep() и nanosleep(), если они не могут обеспечить такую короткую задержку?
Да, они просто гарантируют, что задержка не будет меньше, но ведь в случае с nanosleep() она будет намного больше. Если я вызову nanosleep(100) в реальности пройдет минимум несколько сотен микросекунд или даже несколько миллисекунд, что намного больше 100 наносекунд. Мб они в спец железе применяются, где есть какие-то аппаратные таймеры? Но у нас ведь все равно время ограничивается частотой вызова шедулера.
519 2926393
>>2926357
Напиши свои
520 2926411
>>2925692
задумайся о смене тян, ведь эта знает как выглядят заклинания
521 2926415
>>2926357
Функции usleep() и nanosleep() предназначены для создания задержки в исполнении программы на определенный промежуток времени. Они могут быть полезны в различных сценариях программирования, но имеют свои особенности, когда речь идет о очень коротких задержках.

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

В операционных системах, где эти функции реализованы, существует выделенное время на выполнение задач, известное как квант времени (time slice). Квант времени является минимальным временным интервалом для выполнения задачи и может быть несколько миллисекунд.

Это означает, что если задержка, указанная в usleep() или nanosleep(), составляет менее кванта времени, то точность задержки может быть низкой. Например, если квант времени равен 10 миллисекундам, использование usleep() или nanosleep() с задержкой 1 микросекунда может быть не очень точным.

Также следует учитывать, что точность задержки может зависеть от аппаратной и операционной системы, на которой запущена программа. Различные системы могут иметь разные ограничения и реализации для таких функций.

Если вам требуется более точная и предсказуемая задержка, возможно, вам понадобятся другие методы, такие как использование аппаратных таймеров или библиотек с более высоким разрешением времени.
15937220896560.jpg107 Кб, 640x859
522 2926508
>>2926411
Сжечь ведьму нахуй!!!
523 2927581
Я вообще микроб, не способен даже тест на айсикью пройти, посоветуйте что почитать для вката. Хочу переводить игры для донди и сеги.
524 2928778

>int main()


>{


> char pid{[}255{]};


> fork();


Это что за лабуда скобочная? Первый раз в жизни вижу.
525 2929066
>>2926415
Ну нах ты сюда этот гпт кал притащил, вопрос в другом был.
526 2929096
>>2929066
Хлебушек? Не можешь выделить основное из многабукафф??

>В операционных системах, где эти функции реализованы, существует выделенное время на выполнение задач, известное как квант времени (time slice). Квант времени является минимальным временным интервалом для выполнения задачи и может быть несколько миллисекунд.



А остальное чисто для расширения кругозора.
527 2929099
>>2928778
Это хуита какая-то! Либо это какой-то неизвестный мне компилятор, который имеет свой "особый" синтаксис Си, либо просто ошибочная попытка объявить массив чаров в 255 элементов.
528 2929182
>>2929099
Да я читал статью с опеннета и наткнулся.
https://www.opennet.ru/docs/RUS/linux_parallel/node7.html
2004 год, может старые какие хаки. Не могу понять, чем обусловлено такое причудливое написание. Автор будто бы хотел обособить квадратную скобку от числа или имени переменной.
529 2930145
>>2929096
Хлебушек, я буквально это в своем вопросе написал другими словами, а ты вместо прочтения побежал кормить нейросетку.
530 2930496
>>2930145
Хлебушек, написано, что квант времени зависит от операционной системы. Если ты реализуешь операционную систему реального времени (без всяких твоих высокоуровневых-скриптомакакных шедулеров), где будет стоять приоритет на определённой задаче, т.е. произошло некое событие, которое само отправило сигнал прерывания процу, и проц переключился на то, что нужно, или "прыгнул" туда куда нужно. То в таком варианте почему не должны работать usleep() и nanosleep()?
531 2930693
Аноны, я отупел на галере. А тут нехуй делать.
Как вернуть навыки обратно?
532 2931756
533 2931941
>>2930496
Приведи пример ОСРВ без скриптомакакного шедулера/планировщика с поддержкой usleep и nanosleep.

> где будет стоять приоритет на определённой задаче


А приоритет между задачами по твоему кто распределяет? Не шедулер?
534 2932120
>>2931941
Да, анон, я хуиту написал! Я себе по-другому принцип работы ОСРВ представлял.
image.png63 Кб, 1119x233
535 2937171
Норм? Не могу сидеть и читать мат хуйню, мозг сразу отключаестя.
536 2937354
молодые люди, извините за врожденную тупость, как проверить, ввёл ли я с помощью scanf натуральное число или хрен знает что вместо него?
537 2937581
>>2937354
Посмотри, что возвращает сканф и обрабатывай это значение.
538 2938071
Хочу embedetdom стать. Мужики,направьте на материал пожалуйста!
На инглише - легко
Знаю си,базу плюсов и алгоритмов. Физика давалась в школе так себе, но щас повторил школьный курс.
Куда копать?
539 2938903
>>2937581
а как проверить натуральность значения? делил по модулю на 1, не работает
540 2939618
>>2938903
Себя на натуральность проверь лучше, и в случае отрицательного результата оформи срыгос на жаваскрипт.
541 2939634
>>2939618
Почему у вам всегда такие абстраетные ответы? Если бы я знал как проверить я бы и не спрашивал? И при чом тут жава если тред по си
542 2940192
>>2937354
>>2939634
Ну потому что странный вопрос! Какой тип данных ты указал при вводе данных, такой тип тебе и вернёт сканф.
543 2940225
>>2940192
А как он поймет какой тип данных? Любые данные это ведь просто двоичный код, что целые числа, что дробные, что строки
544 2940244
>>2940225

>А как он поймет какой тип данных?


Тип данных зависит от спецификаторов, которые ты указываешь, что сканфу, что принтфу.
Во-первых, почитай эту статью:
https://metanit.com/c/tutorial/2.3.php

Во-вторых, после первой статьи, приобщись к этим двум статейкам:
https://kaf401.rloc.ru/Informatics/formats.htm
https://www.c-cpp.ru/content/scanf

После этого, думаю, станет яснее!
А вообще, чтобы сразу дать правильный старт по Си, советую эту книгу:
Stephen Prata "C Primer Plus, 6th Edition"
Также есть русский перевод, достаточно достойный перевод!
на торрентах тоже есть и ру и англ.
545 2940527
>>2940244
Опять куча ссылок вместо однозначного ответа...
546 2940575
>>2940527
Отвечаю однозначно ты дае́шь понять что считать.
547 2940806
>>2940575
Опять слишком абстрактно!
image.png182 Кб, 713x830
548 2940948
>>2940244

>вместо однозначного ответа


А это что:

>Тип данных зависит от спецификаторов, которые ты указываешь, что сканфу, что принтфу.


?

Если хочешь ещё более однозначно, то, все "числа", которые ты вводишь с клавы, это, на самом деле, просто символы из таблицы ASCII (если бы я тебе так однозначно ответил бы, то ты бы, наверное, совсем охуел бы, поэтому в надежде на то, что ты не будешь "сюда" наводиться, я уберу эту часть пста под спойлер, ибо, если ты сейчас это прочтёшь, то совсем охуеешь!!!), которые являют собой, ничто иное, как двоичное число с разрядностью в 8 бит, только, для обозначения первых 128 символов таблицы ASCII, в число которых входят и цифровые символы, используют первые 7 бит этого двоичного числа (надеюсь, что ты таки не навёлся сюда, ибо сейчас ты можешь совсем охуеть от этой инфы!!!). Числа, которые ты ввёл с клавы, на самом деле строка символов (сишники такие строки называют массив чаров с нулём (нуль в данной ситуации это самый первый символ из таблицы ASCII, который имеет код 0х00 в шестнадцатеричной системе счисления (почему шестнадцатеричная система?, да потому что так компактнее обозначать двоичные данные (т.к. в шестнадцатеричной системе (надеюсь, всё-таки что ты не навёлся сюда, в противном случае ты, наверное, сейчас совсем охуеваешь) каждая цифра представляет 4 бита (2^4 = 16 (т.е. можно уместить алфавит в 16-ть цифр (0, 1, 2, 3, 4, 5, 6, 7 , 8, 9, A, B, C, D, E, F)), т.е. каждая цифра это полубайт (8 / 2 = 4)), следовательно, обозначения символов из таблицы ASCII в шестнадцатеричной системе занимают всего два символа (надеюсь, что всё-таки ты не навёлся...) заместо 8 в двоичной, либо трёх в восьмеричной и десятичной))) на конце), которую преобразуют в число, исходя из следующего алгоритма: подсчитывают кол-во разрядов (т.е. количество символов в числе (например, в числе 45 - два символа ( 410^1 + 510^0), а в числе 456 - три символа ( 410^2 + 510^1 + 6*10^0))), это можно делать при вводе символов (надеюсь, что ты сюда всё-таки не навёлся, ибо, если ты навёлся и сейчас читаешь это, то ты совсем охуел, и мне тебя жаль) с клавиатуры, как бы организуя цикл, который работает до тех пор, пока, например, не введён символ 0x0A, который обозначает перевод строки; и до тех пор, пока не введён символ, обозначающий конец ввода, можно подсчитывать в переменной (обычно этот подсчёт идёт в регистре (обычно употребляется rcx)) кол-во разрядов; после чего из строки символов достаётся по одному символу (можно с начала, а можно с конца строки, это неважно (т.к. у нас есть инфа о кол-ве разрядов, следовательно, мы можем использовать её для организации цикла)), из которого вычитается код символа '0' (т.е. 0х30 (т.е. 48 в десятичной системе (т.е., так как коды символов цифр идут подряд, то, чтобы получить, допустим, 5, мы от кода символа '5' (0х35 (т.е. 53 в десятичной)) отнимаем код символа '0' (т.е. 0х30 (т.е. 48 в десятичной)), следовательно 53-48 = 5))) и разница умножается на 10-ку, степень которой соответствует данному разряду (допустим, исходя из того, какое значение в данный момент времени находится в rcx), а результат складывается в переменную (обычно это регистр rax (и естественно, что весь процесс происходит в двоичных числах)), который в данный момент времени обозначает число, которое ввёл юзверь. Можно также организовать схему Горнера (пикрил 1(она выполняется быстрее, потому что требует меньшее суммарное кол-во операций)), но от этого алгоритма ты можешь совсем-совсем охуеть, поэтому не стоит (я всё-таки надеюсь, что ты не навёлся на этот спойлер, поэтому ты это не читаешь и не охуеваешь). Также неважна система счисления, также неважно какое число ты вводишь - целое, или вещественное, ибо алгоритм тот же, только способ хранения (различные там стандарты IEEE 754, всякие там дополнительные коды (но это уже совсем для полнейшего охуевания (надеюсь ты это не читаешь))) отличается, но получение числа из массива чаров одно и то же.
После того, как мы получили число из массива чаров, процессор его схороняет в участке памяти, который ты выделил для хранения своей переменной в нужном формате.
image.png182 Кб, 713x830
548 2940948
>>2940244

>вместо однозначного ответа


А это что:

>Тип данных зависит от спецификаторов, которые ты указываешь, что сканфу, что принтфу.


?

Если хочешь ещё более однозначно, то, все "числа", которые ты вводишь с клавы, это, на самом деле, просто символы из таблицы ASCII (если бы я тебе так однозначно ответил бы, то ты бы, наверное, совсем охуел бы, поэтому в надежде на то, что ты не будешь "сюда" наводиться, я уберу эту часть пста под спойлер, ибо, если ты сейчас это прочтёшь, то совсем охуеешь!!!), которые являют собой, ничто иное, как двоичное число с разрядностью в 8 бит, только, для обозначения первых 128 символов таблицы ASCII, в число которых входят и цифровые символы, используют первые 7 бит этого двоичного числа (надеюсь, что ты таки не навёлся сюда, ибо сейчас ты можешь совсем охуеть от этой инфы!!!). Числа, которые ты ввёл с клавы, на самом деле строка символов (сишники такие строки называют массив чаров с нулём (нуль в данной ситуации это самый первый символ из таблицы ASCII, который имеет код 0х00 в шестнадцатеричной системе счисления (почему шестнадцатеричная система?, да потому что так компактнее обозначать двоичные данные (т.к. в шестнадцатеричной системе (надеюсь, всё-таки что ты не навёлся сюда, в противном случае ты, наверное, сейчас совсем охуеваешь) каждая цифра представляет 4 бита (2^4 = 16 (т.е. можно уместить алфавит в 16-ть цифр (0, 1, 2, 3, 4, 5, 6, 7 , 8, 9, A, B, C, D, E, F)), т.е. каждая цифра это полубайт (8 / 2 = 4)), следовательно, обозначения символов из таблицы ASCII в шестнадцатеричной системе занимают всего два символа (надеюсь, что всё-таки ты не навёлся...) заместо 8 в двоичной, либо трёх в восьмеричной и десятичной))) на конце), которую преобразуют в число, исходя из следующего алгоритма: подсчитывают кол-во разрядов (т.е. количество символов в числе (например, в числе 45 - два символа ( 410^1 + 510^0), а в числе 456 - три символа ( 410^2 + 510^1 + 6*10^0))), это можно делать при вводе символов (надеюсь, что ты сюда всё-таки не навёлся, ибо, если ты навёлся и сейчас читаешь это, то ты совсем охуел, и мне тебя жаль) с клавиатуры, как бы организуя цикл, который работает до тех пор, пока, например, не введён символ 0x0A, который обозначает перевод строки; и до тех пор, пока не введён символ, обозначающий конец ввода, можно подсчитывать в переменной (обычно этот подсчёт идёт в регистре (обычно употребляется rcx)) кол-во разрядов; после чего из строки символов достаётся по одному символу (можно с начала, а можно с конца строки, это неважно (т.к. у нас есть инфа о кол-ве разрядов, следовательно, мы можем использовать её для организации цикла)), из которого вычитается код символа '0' (т.е. 0х30 (т.е. 48 в десятичной системе (т.е., так как коды символов цифр идут подряд, то, чтобы получить, допустим, 5, мы от кода символа '5' (0х35 (т.е. 53 в десятичной)) отнимаем код символа '0' (т.е. 0х30 (т.е. 48 в десятичной)), следовательно 53-48 = 5))) и разница умножается на 10-ку, степень которой соответствует данному разряду (допустим, исходя из того, какое значение в данный момент времени находится в rcx), а результат складывается в переменную (обычно это регистр rax (и естественно, что весь процесс происходит в двоичных числах)), который в данный момент времени обозначает число, которое ввёл юзверь. Можно также организовать схему Горнера (пикрил 1(она выполняется быстрее, потому что требует меньшее суммарное кол-во операций)), но от этого алгоритма ты можешь совсем-совсем охуеть, поэтому не стоит (я всё-таки надеюсь, что ты не навёлся на этот спойлер, поэтому ты это не читаешь и не охуеваешь). Также неважна система счисления, также неважно какое число ты вводишь - целое, или вещественное, ибо алгоритм тот же, только способ хранения (различные там стандарты IEEE 754, всякие там дополнительные коды (но это уже совсем для полнейшего охуевания (надеюсь ты это не читаешь))) отличается, но получение числа из массива чаров одно и то же.
После того, как мы получили число из массива чаров, процессор его схороняет в участке памяти, который ты выделил для хранения своей переменной в нужном формате.
16996513139890.mp47,3 Мб, mp4,
800x656, 0:15
549 2940990
550 2941198
>>2940948
Опять кучу бессмысленного текста зафигачили вместо ответа!

Задача такая. С помощью функции сканф я присваиваю какое то значение переменной
Если стоит спецификатор для типа данных int, значит и будет хранится она как int (вроде наверно, хз крч) то есть буквы и прочая шелуха тоже будет прочитана как int
Задача в том, что бы когда я вводил со своей шершавой клавиатуры, что угодно, кроме натурального числа, выскакивала ошибка и программа закрывалась. Для этого нужно что бы компьютер понял, что я ввел не натуральное число, но спецификатор любой символ сводит к какому то натуральному числу, так ведь?(его двоичному представлению) ПОЛУЧАЕТСЯ ЗАМКНУТЫЙ КРУГ
551 2941286
>>2941198
Ну тогда тебе нужно читать не инт, через спецификатор %d, а строку (%s) и проверять её:
Если в строке есть символы, которые не из диапазона 48-57 (т.е. '0' - '9', кроме символа ноль (но это должно быть условие проверки в цикле - закончилась строка или нет), т.е., если по ходу цикла выполняется условие:

if (str < 48 || str > 57), то break с ошибкой.
552 2941291
>>2941286
СПАСИБО!!!
image.png3 Кб, 346x54
553 2941292
>>2941291

Вот так правильно!

ёбынный двач жрёт указатели в любом их проявлении!!!!!!
554 2941360
return buf[--bufp];

Правильно ли я понимаю, что тут сначала происходит возвращение элемента из массива buff по индексу bufp, а потом индекс bufp уменьшается на единицу?
555 2941420
>>2941360

>Правильно ли я понимаю


Нет, не правильно! Он первым делом уменьшает bufp, а потом делает ретёрн. Также, если сделать bufp--, только в этом случае, он сначала кладёт значение bufp в один регистр, затем его же в другой регистр, уменьшает этот другой регистр и кладёт по адресу bufp, но все операции, которые предшествуют новому изменению bufp, он проводит с тем регистром, в который он первым положил bufp. Но возврат из функции будет произведён, что в постфиксной, что в префиксной форме, с уменьшенным значением bufp, т.е., он тебе вернёт то значение, которое располагается в массиве buf на одну "клетку" ближе к началу массива.
556 2941436
>>2941420
так зачем придумали index++ и ++index если оно делает одно и то же?
557 2941494
>>2941436
это разное, погугли
558 2941512
>>2941436
Что значит одно и тоже? Я же написал в чём разница!
Ещё раз, в цикле это хорошо видно!
Вот, глянь на пикрил 2, вот тут хорошо видна разница. Результат это пикрил 3. А пикрил 1 это то, что происходит! То, что я выделил на пикрил 1 это ключевая! разница между префиксной формой и постфиксной. В первом цикле видно, что мы сначала прыгаем jmp на инструкцию, которая прибавляет по адресу переменной i единицу, а потом сразу же идёт сравнение этой переменной с 4, и, если меньше или равно, то прыгаем jle в ту часть кода, где идёт вызов ф-ции printf.
Во втором цикле видно, что мы сначала прыгаем на инструкцию, которая сохраняет значение переменной в регистре eax, после чего в edx помещаем значение, которое равно значению в eax, но увеличенное на 1, после чего значение из edx сохраняем по адресу переменной, и уже после этого сравниваем значение в eax с 4, и, если меньше или равно, то печатаем.
Разница в том, что, если используем ++i, то вся "работа" (арифметические действия, логические действия, и так далее) происходит с уже увеличенным значением переменной i на единицу, тогда, как в случае i++ вся работа происходит с, как бы, предыдущим значением переменной i. Если конечно предполагается какая-либо работа, допустим, есть наличие цикла. Но, если ф-ции нужно вернуть значение, то, как бы, сама инструкция ретёрн предполагает, что "работа" окончена и нужно вернуть конечный результат.

я чёт подзаёбся это объяснять! надо эту инфу со скринами сразу в шапку треда кидать.
image.png49 Кб, 947x959
559 2941739
>>2941286
Как сделать, чтобы сканфнутое значение в свиче срабатывало только на один "правильный" символ, а не на кашу после первого правильного? Если я введу Y123huy, то он пустит в case 'Y', а мне надо, чтобы в default.
560 2941800
>>2941739
Поменять местами дефолт и 'Y'?
561 2941819
>>2941800
Ну то есть, поменять местами принтф и ретёрн.
562 2941866
Аноны, есть советы по грамотному использованию этого сайта?
https://elixir.bootlin.com/linux/latest/source
563 2941868
если я учу си, паралельно стоит и в ассемблер вкатываться?
564 2941881
>>2941868
Да! Без асма сложно. Асм позволяет дизассемблить любые ф-ции на Си, и смотреть, что в них происходит.
565 2942164
>>2941881
типа если у меня процессор такой то и такой то модели, надо учить ассемблер именно для этой модели?
566 2942322
>>2942164
Это тут причём? Конечно, нужно учитывать архитектуру, если ты кодишь на асме какие-нибудь системные штуки, но тебе это не нужно на первых порах изучения Си. Загугли что такое дизассемблировани, и тогда ты поймёшь для чего желательно изучать ассемблер, чтобы проще было освоить базу Си.
567 2942488
>>2941512
анон я макак, в регистрах не шарю, то есть в более смузихлёбских языках это аналоuг цилка repeat {} while ?
image.png423 Кб, 1920x1080
568 2942624
типы данных справа, это какие то "обьективные" типы?
Которые просто переиначены на свой лад в каждом языке программирования?
569 2942643
>>2942488
Ну получается, что, если оно в условии цикла, то работает оно, как цикл с постусловием. Но, если тебе нужен именно цикл с постусловием, то лучше применять do{}while(условие), чтобы указать, что тут нужен именно этот вариант.

>>2942624
Гугли что такое машинное слово. Тут именно этот контекст.
А вообще, лучше чекни ещё из чего состоит, допустим, регистр rax.
image.png46 Кб, 989x949
570 2942756
>>2941800
Вот так сделяль. Карочи оператор switch ето говно. Он проверяет только первый символ и сразу пускает в кейз. Прикиньте я бы логинку на домофон писал, а он бы дверь открыл после первого верного символа, забив хуй на остальной пароль.
>>2941739
571 2942762
>>2942756

> Карочи оператор switch ето говно. Он проверяет только первый символ


С подключением. Ты с нуля вкатываешься или с другого языка пришёл?
572 2942765
>>2942762
Я только на Си
573 2943047
>>2942643
А разрядность процессора это максимальный размер машинного слова?
574 2943073
>>2943047
Да, так и есть! Только учти, что в асме dw, dd, dq, что в Си short, int, long, long long соответствуют отталкиваются не о разрядности, а от совместимости, поэтому dw (как бы word) это не 64 бита в архитектуре х86-64, а всего 16 бит. Также и в Си int необязательно должен соответствовать 64-м битам - всё зависит от компилятора. Но корни растут именно от машинного слова. Так что тут проще сайзоффать в Си, а на асме знать разрядность проца и особенности архитектуры.
image.png20 Кб, 871x507
575 2943548
после компиляции это будет одно и тоже?
576 2944131
>>2943548
Чел, у тебя указатель на переменную и сама переменная, как это может быть одно и тоже? После компиляции указатель будет указывать на ту область памяти, в которой хранится переменная, и, естественно, если ты изменишь переменную, а после разыменовав указатель, то ты увидишь изменённое значение переменной.
image.png189 Кб, 1425x793
577 2944643
578 2944871
>>2944643
Это намёк на то, что нужно курить матчасть?
579 2946199
дано:
sizeof( unsigned short ) равен 2, а sizeof( int ) равен 4 ;
gcc -ansi -Wall .

сурс:
int main(void) {
unsigned short var = 257;
return (int)var;
}

Почему выполнение этой программы завершается с кодом 1, а не с кодом 257?
580 2946233
>>2944871
очень смешно
не пиши сюда ничего больше тварь
581 2946297
Здраствуйте, помогите разобратся
Вот этот человек говорит что не все указатели можно друг с другом сравнивать
Но как я понял из другого видео, указатели - это просто какие то целые числа, показыавающие адрес переменной. Так почему нельзя сравнивать целые числа?
Screenshot20231202-084455.png775 Кб, 1920x1080
582 2946298
image.png129 Кб, 500x300
583 2946310
>>2946233
Выслал тебе подарочек по почте, прими, тварь!
584 2946386
>>2946297
А для чего нужно сравнивать указатели? Какой в этом смисл?
585 2946408
>>2946386
если честно я даже смысл самих указателей понять не могу
586 2946459
>>2946408
Что значит смысл? Для чего они нужны или как они работают?
587 2946467
>>2946459
типа зачем создавать указатели для переменных, если можно сразу обращатся к переменным
588 2946486
>>2946199
Кстати, если var сделаешь 258, то прога вернёт 2. Подсказку тебе дал, поэтому думай.

>>2946467
Ну можно исходить из того, что в Си очень часто приходиться использовать функции, если это не учебная прога, то ф-ции мастхэв. Также надо исходить из того, что в Си массивы/строки/структуры это тупо непрерывный участок памяти с N ячеек, устроенный определённым способом, который имеет определённый "вес" в байтах. Допустим, что у тебя есть целочисленный массив (int) размером в 1000 ячеек, каждая ячейка в этом массиве весит 4 байта, следовательно весь массив весит 4к байт. Теперь, представь, что тебе нужно передать этот массив в ф-цию, это получается получается, что тебе нужно копернуть 4к байт в отдельную копию, т.к. в Си при передачи аргументов в ф-цию создаётся копия значений каждого аргумента ф-ции. Поэтому в ф-цию тупо передаётся указатель на массив, который весит не больше 8 байт, в зависимости от системы. Во-вторых, если тебе нужно менять значение какой-либо переменной в ф-ции, то передав эту переменную в кач-ве аргумента, эта ф-ция не изменит значение этой переменной, потому что у ф-ции копия значения этого аргумента. Поэтому в ф-цию передают указатель на эту переменную, чтобы ф-ция могла бы "напрямую" работать с переменной. В-третьих, указатели позволяют строить сложные структуры данных, типа как массив структур, либо связные списки, деревья различные и т.д.
Есть хорошие видосы в ютубе, которые помогают понять, что такое указатели. Без понимая этого фундамента невозможно понять что-либо, что чуть сложнее задачек в пределах main(). Это мастхэв!!!
589 2946736
>>2946486
Спасибо за развернутый ответ.
590 2946990
>>2946486
красавчик
591 2947041
>>2946486
Я бы тебе дала!
592 2947287
как написать программу которая блокирует экран?
593 2947294
>>2946736
>>2946990
>>2947041
Сёма, спок.
594 2947296
типа пока не нажму какую то комбинацию клавиш компьютер никак не должен реагировать
595 2947327
>>2946486

>если var сделаешь 258, то прога вернёт 2



Выяснил это до того, как запостить свой первоначальный вопрос.

Благодарю за отклик.
Самому трудно понять, что на самом деле происходит.
Гугление не помогло.
Пока самостоятельно выяснил, что преобразование типов осуществляется без ошибок.
Проверял такое: int main() { return 257; } И int main() { return -1; }
После этих проверок могу лишь предполагать, что та функция, обёрткой которой main() является, возвращает значения типа unsigned char.
Не знаю, верно ли это предположение. А если оно верно, то непонятно, почему так сделано.
596 2947678
>>2947294
все чем ты можешь помочь людям
597 2947717
>>2947296
>>2947287
Всё уже написано до вас, были на ХРюше такие программки шутки типа кнопка на экране тык на неё экран блокируется.
598 2947727
>>2947327
Гугли исходник _exit
599 2947911
>>2947717
а я сам хочу
600 2949137
Как отслеживаются утечки динамической памяти? Есть ли способ запросить количество свободной/занятой памяти?
Если что, пишу под микроконтроллер.
То что в программах под микроконтроллер лучше не юзать динамическую память знаю и без вас.
601 2950626
когда я инициализирую и присваиваю значение переменной, память выделяется не только для хранения значения, но также и для хранения названия переменной, так ведь? например если название содержит три символа, то где то выделится ещё 6 битов для хранения массива символов названия?
602 2950630
(то есть 6 байтов)
603 2950763
>>2950626
Возьми указатель и посмотри.
604 2950949
Какие есть ещё способы обнуления всей уже существующей структуры, кроме вызова мемсет? Мне для полноты багажа.
memset(structpointer, 0, sizeof(structtype));
605 2960024
Как сделать кложу в C, чтобы портируемо/безопасно, без расширений GCC, ебли со стеком, сторонних библиотек и прочего?

Допустим, у меня есть массив указателей на функции, и мне нужно каждую из них заменить функцией-обёрткой, которая совершает какое-то действие и только после вызывает оригинальную функцию. Не приходит в голову, как в скоупе функции-обёртки получить адрес функции, которую нужно вызвать. Возможно потому что это просто невозможно.
При этом я ограничен тем, как сторонняя библиотека вызывает эти функции, то есть я не могу, например, сделать как здесь
https://stackoverflow.com/questions/63395637/get-address-of-a-function-inside-of-the-function-in-c-c

Пример того, как это не может выглядеть:
https://pastebin.com/MzrnZq6t
606 2960029
>>2960024
Другая ссылка, с исправлениями.
https://pastebin.com/6VUtVTu3
607 2960998
Когда перекат?
608 2961281
>>2960998
Сделай сам.
609 2961306
>>2961281
Я только вкатываюсь в Си. Перекачу не так - будут недовольные.
610 2961640
Хочу написать функцию, которая получает массив и выводит его в консоль. Но массив может быть int, float, etc., а перебор идёт в цикле идёт через указатель, который должен быть того же типа, что и массив.

Неужели для каждого типа массива свою функцию делать или есть более интересный способ?

https://ideone.com/MVBCIv
весьма глупый вопрос 612 2962123
Данный вопрос не только про c, но и про c++


Вопрос такой: на чем основан gtk+?
Поверх какой библиотеки работает это?
За счёт чего делается графика?
Помогите перейти на более низкий уровень в си в области графики.
613 2969600
привет, есть ли какие то принятые у програмистов способы проверки, не переполнится ли переменная после арифметической операции?
изображение.png33 Кб, 1269x423
614 2969625
Объясните тупому че и как? Я люблю с железками возится а не дрочить код. Не считает и пиздец. Куда цифры вставить?
615 2969639
>>2969625
Всё должно нормально считать. Ты на компе у себя запускаешь или через форму эту? Может они \n хотят после суммы?
616 2969640
Через их форму. ВУЗ чудной, нельзя даже добавлять комментарии и текст. Хз как быть((
617 2970785
>>2969625
Строки 3-5 нужно раскомментировать
618 2973834
>>2969625
А в каком вузе это?
619 2976161
int htol(char hstr)
{
int i = -1;

while (hstr[++i] != '\0')
;

int decimal = 0;
int power = 0;

while (hstr[--i] != 'x')
{
const char c = hstr;

if (!(c >= '0' && c <= '9' || c >= 'a' && c <= 'f'))
return 0;

int number;

if (c >= 'a' && c <= 'f')
number = (c - 'a') + 10;
else
number = c - '0';

decimal += number
pow(16, power);
power++;
}

return decimal;
}


Капец меня упражнение в K&R приложило. Это и есть ваш си блять?
619 2976161
int htol(char hstr)
{
int i = -1;

while (hstr[++i] != '\0')
;

int decimal = 0;
int power = 0;

while (hstr[--i] != 'x')
{
const char c = hstr;

if (!(c >= '0' && c <= '9' || c >= 'a' && c <= 'f'))
return 0;

int number;

if (c >= 'a' && c <= 'f')
number = (c - 'a') + 10;
else
number = c - '0';

decimal += number
pow(16, power);
power++;
}

return decimal;
}


Капец меня упражнение в K&R приложило. Это и есть ваш си блять?
620 2976544
Тупой, наверное вопрос. Но как в си сделать две структуры, которые друг о друге знают?

Ну. Допустим.

struct event {
eventSource* source;
}

struct eventSource{
int published;
event publishedEvents[1024];
}

Я хочу, чтобы структура event знала кто ее опубликовал, и чтобы эвентсорс - знал какие эвенты он опубликовал и сколько сейчас там эвентов.

Вот как мне такого добиться?

Просто сколько гуглю, везде с простыми примерами типа точка, имя-фамилия. Открыл K&R - там еще ноды показали, но все равно вот такой вот фигни, когда две структуры друг про друга знают - не вижу. Но ведь не может быть что это такой уж редкий пример и никто такого не использует.
168265829757.jpg67 Кб, 736x981
621 2977294
>>2976161
какая страница?
622 2977377
>>2977294
Упражнение 2.3
623 2980817
Привет зд🎁вуйте
Программирую в кодблокс, заметил две странности, во первых, после завершеия программы, консоль не закрывается автоматически (недавно узнал, что по идее она должна закрываться). Во вторых, работают функции, которые не должны работать без подключения библиотек (например getch() работает без conio)
Это какие то правки компилятора?
624 2982017
>>2835039 (OP)
Всем добра!

Пишу в этот тред, так как более подходящего не нашел, скорее вопрос по ОС.

В общем ситуация следующая:
- есть пачка работающих процессов бд написанных на С (postgres) около 3-4к
- есть 64 GB ram и 4 swap
- ось redhat8, виртуалка wmvare

При выставлении overcommit_memory в 2 и overcommit_ratio в 95 - процессы при суммарной аллокации в примерно 66 GB начинают ожидаемо падать - при попытке аллоцировать новые куски с ошибкой couldn't allocate memory.

Далее фокус: при выставлении overcommit_memory в 0 - для того чтобы позволить overcommit и в надежде словить oom_killer, процессы чудесным образом перестают запрашивать 66GB и их аллокация держится в районе 61-62 GB

Могут ли быть какие-то причины еще, помимо логики кода, для такого поведения. В самом коде явных отсылок к overcommit_memory не нашел и логике основанной на нем не нашел. Но смотрел не глубоко.

Речь идет о значениях commited_as из /proc/meminfo
Резидентной памяти не касаемся, ее утилизация не доходит и до половины имеющегося объема
1dc5264e1e9e40a8afd4f952f8f8f325.jpg18 Кб, 200x300
625 2982937
>>2835039 (OP)

>Paul Deitel, Harvey Deitel


Кто-нибудь изучал по их книгам С? годнота или нет? Нужны отзвывы
626 2983455
>>2982937
Мммм авторвы которые хуячат книги по всем языкам программирования. Лучше сололеарн пробеги для начала
627 2983543
>>2976544
Нормальный будет вопрос, если разберёмся с понятиями. Что значит структура "знает" о другой структуре?
Если eventSource "публикует" новый event, то он будет содержаться в event.source? Если event опубликован, он будет добавлен в eventSource.publishedEvents, а eventSource.published будет увеличен на 1? Ну так это же тривиально: ты в любом случае будешь определять функции для работы с твоими структурами, например event_set_source(event, eventSource) и publish_event(eventSource, event). В одной ты присвоишь значение полю event.source, в другой добавишь event в eventSource.publishedEvents, заинкрементишь eventSource.published и вызовешь event_set_source(event, eventSource).
628 2984458
>>2983543

> Нормальный будет вопрос, если разберёмся с понятиями. Что значит структура "знает" о другой структуре?



Ну. То и значит.
Опять же, другой пример:

struct Employe {
struct Departament* departament
...
}

struct Departament {
struct Employe employees[1024]
...
}

Если я вот так вот напишу - мне компилятор ругается, что не знает никакого департамента. Поменяю местами - не знает никаких работников. Как мне написать, я так и не понял. Я так понимаю, надо как-то сначала определить имена для этих структур, а дальше где-то уже описать как эти структуры собственно выглядят. Но примеров такого не нашел. Или так вообще нельзя в Си? Ну, если нельзя, то как делать, кроме как указателем на void - не знаю.
629 2984579
>>2984458
А, вот ты о чём.
Да, тебе нужно задекларировать Department перед определением другой структуры, которая содержит поле типа Department, который ещё не определён.

struct Department;

struct Employe {
__struct Departament* departament;
__...
}

struct Departament {
__struct Employe employees[1024];
__...
}
630 2984880
>>2982937
Я прочел. Но все книги хуита. Там просто разбирают по частям циклы, структуры и либы. А прогать не учат.
631 2985110
>>2984880
А что делать тогда
632 2985195
>>2985110
просто пишешь код, открывай кернел модули в си и пытайся понять.
633 2985232
вопрос не про си, но тем не менее, почему таблица аски всего на 128 символов? у них же ещё 1 бит был неиспользованный для кодирования...
634 2985405
>>2985232
https://en.wikipedia.org/wiki/ASCII#Bit_width
The committee considered an eight-bit code, since eight bits (octets) would allow two four-bit patterns to efficiently encode two digits with binary-coded decimal. However, it would require all data transmission to send eight bits when seven could suffice. The committee voted to use a seven-bit code to minimize costs associated with data transmission. Since perforated tape at the time could record eight bits in one position, it also allowed for a parity bit for error checking if desired.[3]:217 §c,236 §5 Eight-bit machines (with octets as the native data type) that did not use parity checking typically set the eighth bit to 0.[30]
image.png15 Кб, 418x391
635 2988339
здраствуйте, почему строка не переносится?
если поменять \n в if Letter == '\n' на 13, то она перенесётся, а так нет
image.png15 Кб, 420x209
636 2988348
и почему латиница и кирилица кодируется одинаковым количеством байт?
637 2988515
>>2988339
Скорее всего задействуется виндовая последовательность символов переноса строки \r\n, а не просто линуксовая \n
image.png5 Кб, 309x144
638 2988542
>>2988515
действительно, через \r сработало
а \n получается попадает в буфер после считывания \r и ждёт там?
639 2988555
>>2988542
Чтобы узнать, попробуй очистить буфер чтением из него (поставь до или после вызова getche):
while((Letter = getchar()) != '\n' && Letter != EOF);
Не забудь про ; в конце while т.к. цикл пустой.
kmk1.mp4291 Кб, mp4,
640x360, 0:08
640 2989489
-- Каретку мне, каретку!
А прикольно, что мы до сих пор с ней носимся. _)
641 2989639
А почему нигде нет инфы про перенос каретки на предедущую строку? Как это вообще сделать?
642 2990586
Что почитать/посмотреть, чтобы ответить на вопросы "awareness of some fundamental concepts, such as system calls and multithreading". Очень подробно не надо. На втором курсе мы многое на асме писали, в том числе системные вызовы, но мне лень пересматривать подробные лекции. Сейчас хватит чего то обзорного
643 2990587
>>2988348
Потому что ascii
644 2996804
>>2989639
Покрутить ручку справа на телетайпе.
645 2997217
>>2996804

чо за телетайпе где купить
646 2999914
>>2962123
Ну для линукса всякие QT, GTK и прочее это обёртка над X11 или Wayland

Те в свою (вроде) уже оборачивают собой все возможные драйвера под различные видеокарты

А дальше уже железо начинается
image.png19 Кб, 871x300
647 3003479
он реально вернул то что там лежало, или это ошибка такая?
648 3003992
>>3003479
0xC0000005 это код ошибки, а именно access violation. Я хз, как в винде память устроена, но по адресу 0x5 ничего доступного твоему приложению точно не может лежать.
Снимок экрана 2024-01-16 в 20.34.55.png47 Кб, 411x310
649 3005646
Что выведет код?
Он выведет число 37. Схуяли?
650 3005849
>>3005646
порядок выполнения постфиксного инкремента больше чем у разыменования
651 3007060
Расскажите, почему когда я в линуксе компилирую gcc простые программы в обычный бинарный файл, на выходе возникают некие Dynamic Symbols для названий функций, которые не объявлялись как extern и вообще не должны бы ни с чем связываться. Это финальные объекты, не динамические библиотеки.

Заметил, что у многих системных программ та же история.
Конечно за исключением если их специально не скомпилили через gcc -s или не обработать через strip.
652 3008509
Добрый день, камрады.
Я classical web monkey. Хотел перейти на что-то серьезное. Аноны с треда про раст кинули в си, сказали для начала нужно начать с этого. Сколько месяцев нужно, чтобы отдуплить за идею си Разбираться, понимать.
Вводные:
У меня нет никакого понимаю о низкоуровневом программирование.
Честно говоря, я не совсем понимаю для чего мне понадобится си. Наверное, мозг засорен высокоуровневым программированием. Думаю, в процессе написать какой-нибудь пет проект, куда войдут все изученные темы.
653 3009818
>>3008509
Да ни для чего.
Придется тебе придумывать свои охуительные обучающие идеи.
Благо в старых книжка по Си таких было куча.

Разумеется, в серьезных проектах нужны программисты,но ты просто не поймешь эти программы из-за высокой сложности не связанной непосредственно с Си, а просто созданной из-за сути задачи
654 3009984
>>3008509

>что-то серьезное


С Паскаля тогда начни.

>Честно говоря, я не совсем понимаю для чего мне понадобится си


Тогда тебе си точно не нужен.

>Аноны с треда про раст


Раст проще си.
655 3011938
Друзья, а кастить указатель на функцию к void - UB? А char к указателю на функцию?
656 3011940
вместо void и char - указатели соответсвенно. Хз, как их тут экранировать
Тред утонул или удален.
Это копия, сохраненная 22 января в 01:27.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски