Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 660 119 210
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному /clang/ Аноним 09/09/23 Суб 20:52:50 2835039 1
image.png 102Кб, 792x1023
792x1023

⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
Пожалуйста, пользуйтесь 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
Аноним 09/09/23 Суб 21:05:15 2835050 2
image.png 19Кб, 454x436
454x436
Почему код не собирается?
Аноним 09/09/23 Суб 21:07:41 2835054 3
>>2835050
Это вся твоя программа?
Аноним 09/09/23 Суб 21:08:28 2835056 4
Аноним 09/09/23 Суб 21:09:49 2835059 5
>>2835056
Чел, тебе бы начать изучать язык Си с самых основ лол.
Аноним 09/09/23 Суб 21:11:48 2835061 6
image.png 29Кб, 1147x496
1147x496
>>2835059
А что я не так делаю?
Аноним 09/09/23 Суб 21:13:07 2835062 7
>>2835059
Ну. Т.е. красненьким ничего не светится. А не собирается...
Аноним 09/09/23 Суб 21:18:15 2835069 8
>>2835061
>>2835062
Блять, чел! У тебя нет мэйна. Это всё, что тебе для начала нужно знать. В шапке есть много достойной лит-ры, и даже краткое описание того, что стоит ждать от того или иного учебника. Бери любой этот учебник и через пару недель ты сможешь сам понять, в чём ты неправ.
Аноним 09/09/23 Суб 21:39:04 2835089 9
>>2835069
Так если я библиотечку для себя делаю, как мне ее скомпилировать? Или в библиотеке тоже нужен main?
Аноним 09/09/23 Суб 21:45:24 2835099 10
>>2835089
Нет, для библиотеки не нужен мэйн. Ты же мне ответил, что то, что ты кинул скриншотом это и есть вся твоя программа. А, для библиотек и других сторонних ф-ций тебе нужно разобраться с хэдерами. Начни отсюда: https://otus.ru/journal/programmirovanie-po-modulyam-v-si/
Аноним 09/09/23 Суб 22:32:03 2835173 11
Аноним 09/09/23 Суб 22:37:00 2835176 12
Снимок экрана 2[...].png 34Кб, 2240x54
2240x54
Что за рофлянка? Чем больше модификаторов тем сильнее константность? Керниган, ты за это ответишь, мгась!
Аноним 09/09/23 Суб 22:37:22 2835177 13
Хуита
Аноним 09/09/23 Суб 22:40:01 2835179 14
>>2835177
Уже нет!!! В этот раз текст читать гораздо легче - звёзды не ебут так глаза, как в прошлом (удалённом) треде. Зато теперь "поинтеров" хватит на всех и на все случаи (до 500-го пста).
Аноним 09/09/23 Суб 22:40:53 2835180 15
>>2835056
>gcc src/array.c
Так либа не собереться.
Тебе надо .so объекттник собирать если хочешь именно статик либу компильнуть, с флагом -shared
Но можешь потрениться на классических эльфах и компильнуть .o

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

Итак допустим у нас есть описание функции 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 но и знает как она работает.
Поздравляю вы красавчик.
Аноним 09/09/23 Суб 23:04:55 2835198 19
>>2835195
>printf("foo: %d\n",);
printf("foo: %d\n",result);

Команд по сборке бывает много, рекомендую освоить утилиту make для автоматизации сборки проектов. Make ультрапростой и в нем заложены удобные принципы, он будет рекомпилить только те участки проекта, которые подверглись изменениям.
Аноним 09/09/23 Суб 23:59:12 2835215 20
16935513172400.mp4 3375Кб, 1280x720, 00:00:19
1280x720
>>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 а любой другой код ошибки - мейк не станет выполнять эту цель по сборке финального экзешника и прерветься с ошибкой.

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

Чел, ты это лучше в пастбине (с коментами напротив важных строк) оформи и кинь ссылку, и те люди, которые не шарят в библиотеках, будут тебе безмерно благодарны. А то сейчас, блять, хочется только материться!!!!!
Аноним 10/09/23 Вск 01:06:15 2835242 23
>>2835241
>А то сейчас, блять, хочется только материться!!!!!
Почему? Вроде все читабельно. Макаба херит табуляцию, что критично только для мейкфайла, но думаю синтаксис мейкфайлов погуглить - минутное дело. Там все сводится к комментарию типа:
цель : зависимости
таб действия
Аноним 10/09/23 Вск 01:33:22 2835245 24
А, вообще, знаете, почему нам, сишникам, так трудно отыскать исходники "процедур" из стандартной библы?
А всё из-за того, что стандартная библа написана закройте глаза: (если не хотите, чтобы ваш мир перевернулся) на асме...
А вы думали, блять, почему программа начинает прыгать по неизведанным областям памяти, когда совершается вызов библичной ф-ции из дебагера?

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


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

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

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

Получается, что Кернинган и Ричи попилили бюджет асашая!
Аноним 10/09/23 Вск 01:43:41 2835246 25
>>2835242
>Вроде все читабельно.
Хз, анон, возможно, что ты настроил макабу таким образом, что, каждый пост, который содержит какой-либо код, то макаба определяет ЯП, а после этого выводит тебе его синтаксис.

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

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

>>2835246
Тебе зачем подсветка синтаксиса в тривиальном примере функции всегда возвращающей число 42? Боишься ошибиться?
Но раз так просишь как нибудь залью статью на пастбин и линкану сюда.
Аноним 12/09/23 Втр 16:08:53 2838730 27
image.png 66Кб, 296x170
296x170
Очередной опрос тулчейнов. Пишите свой тулчейн, что юзаете.

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

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

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

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

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

'''
>Создаёшь переменную типа array
array b:
>твоя инициализация переменной

>в конце возвращаешь ее копию
return b;
'''
Аноним 13/09/23 Срд 08:19:55 2839282 33
>>2839277
> Чтобы вернуть указатель на объект типа array из функции, тебе надо создать объект сначала, только не в коем случае не на стеке, как ты обычные переменные объявляешь
Кривовато немного выразился. Если тебе надо возвращать именно адрес переменной, которая создаётся внутри этой же функции, то пользуйся маллоком обязательно, либо static переменными, если переменная у тебя может быть только одна на всю программу. Если надо обязательно на стеке ее создать, то можно выкрутиться так.

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

void (array *p_array, size_t foo, size_t bar)
> Здесь заполняешь структуру, как ты и делал
p_array->foo = ...
p_array->bar = ...
> Далее ничего не делаешь, структура b у тебя уже поменялась
'''
Аноним 13/09/23 Срд 12:46:55 2839548 34
Дорогие друзья. Посоветуйте чем дэбажить под виндой, кроме гнушных и майковских утилит. Чем меньше - тем лучше. Лучше без gui. Поскольку еще малолетний и не все понимаю - желательно, с возможностью скакать по строкам. Пользовал Turbo C через VDM под XP, щас перешел на 11 и юзаю TCC и micro.
Аноним 13/09/23 Срд 14:21:16 2839660 35
>>2839548
Был некогда отличный, идеальной softice, но масдайки убили его. Есть ollydbg, но он для 32 битных прог. Есть x96dbg, попытка оживить ollydbg, не знаю удачная ли, надо пробовать.
Аноним 13/09/23 Срд 14:21:47 2839662 36
>>2839660
А, они все гуишные, забыл добавить. без gui думаю сложно найти будет, тем более под виндовс.
OpenGL Аноним 13/09/23 Срд 15:07:20 2839715 37
Аноны, такая фигня: написал маленькую игру на opengl и winapi, на моём компе под спермёркой работает просто супер, но на дриснятке и на шпалах игра очень медленно работает, а на шпалах вообще цвета другие. В Си я ещё маслёнок, надо под отдельные системы по разному собирать или как? Что делать?
Аноним 13/09/23 Срд 15:16:29 2839728 38
Аноним 13/09/23 Срд 15:23:56 2839732 39
Аноним 13/09/23 Срд 16:12:25 2839791 40
>>2839548
Есть x64dbg. Опенсурс, под винду, но с гуем. Под винду без гуя ничего и нету скорее всего.
Аноним 13/09/23 Срд 16:19:18 2839808 41
>>2839662
>>2839791
ну в винде под консоль чота делать непрофитно, там система построения процессов завязана на принцип - все процессы это окно, тоесть надо изъебываться чтобы отрисовывать вывод в консоль

в юниксах обратная ситуация
Аноним 13/09/23 Срд 16:22:46 2839817 42
>>2839808
Ну в винапи достаточно богатый набор функций для консоли, тот же фар очень красиво и интерактивно выглядит, он полностью на этом апи построен, HIEW как пример ещё, hteditor - все они консольные, просто так сложилось что окна с кнопками более распространены в винде.
Аноним 13/09/23 Срд 16:31:52 2839836 43
>>2839817
>просто так сложилось
вот причину этого "сложилось" я тебе и говорю
Аноним 13/09/23 Срд 20:20:03 2840146 44
Аноны, посоветуйте гайд для освоения valgrind.
Аноним 13/09/23 Срд 21:50:45 2840288 45
image.png 29Кб, 619x400
619x400
Помогите.
Как переписать, чтобы не было так всрато?
Аноним 13/09/23 Срд 22:09:41 2840304 46
Аноним 13/09/23 Срд 22:30:52 2840335 47
>>2840288
фу бля что за шрифт, уноси это нахуй отсюда.
Аноним 13/09/23 Срд 22:54:22 2840364 48
>>2840288
На do..while замени, (перенеся инкремент в while в постфиксной форме), чтобы не повторять 3 строчки в конце. Естественно, дополнив: if(it == ' ' || it == '\0').
Аноним 13/09/23 Срд 22:56:03 2840372 49
>>2840364
Спасибо!
Я чет вообще забываю про do...while
Аноним 14/09/23 Чтв 13:09:45 2840911 50
Аноним 14/09/23 Чтв 17:57:28 2841334 51
Аноним 14/09/23 Чтв 20:07:04 2841549 52
Аноним 14/09/23 Чтв 21:14:48 2841614 53
Аноним 14/09/23 Чтв 21:26:28 2841622 54
Пацаны. У меня тупой вопрос.

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

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

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

typedef struct emp {
departament* dep;
} emp;

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


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

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

Так попробуй.
Аноним 14/09/23 Чтв 21:53:15 2841646 56
Аноним 14/09/23 Чтв 21:59:32 2841652 57
>>2841622
а неча по гайдам с ютюба язык учить
нахерачил типдефы сам не знаешь нахуя и зачем
книжку кернигана почитай лучше
Аноним 14/09/23 Чтв 22:02:38 2841656 58
>>2841652
А там про это есть?
Я просто читал ее еще во времена вуза и нифига не помню на самом деле.
Я си просто решил "повспоминать" в свободное от работы время. И чет вот такие моменты - меня заставляют ловить тупень. А как гуглить - даже не знаю.
Аноним 14/09/23 Чтв 22:07:52 2841663 59
Я такое прозрение сейчас получил, когда научился парсить в голове всякую муть типа:
int ((foo)(const void *))[3]
Аноним 14/09/23 Чтв 22:15:27 2841668 60
>>2841656
в инстиках вроде плюсы у всех были
сишник ето другое, местами похоже
мимо ирит
Аноним 14/09/23 Чтв 22:26:38 2841684 61
>>2841663
ето просто поинтер на функцию же а не муть
муть вота

int a = printf("huypizda"), for(int i =0; i<3; i++) puts("chemu ravna a?"), 10;
Аноним 14/09/23 Чтв 22:27:12 2841685 62
>>2841668
У нас первый курс был си. Ну. Т.е. да, там говорили, что это СиПлюсПлюс. Но какой это СиПлюсПлюс, если мы все делали через printf, и писали приложухи в Borland C++ через DosBox(потому что нужно было graphics.h а оно не хотело на семерке работать никак)?
На втором - с ООП уже да, были плюсы. Не хочу вспоминать как я с них горел. Вот типа тебе говорят: cout<<"Hello world"<<endl; И вот что это мать его за запись? Что она делает? ПОЧЕМУ ЭТО РАБОТАЕТ? Хуй, пиши давай лабы и не выебывайся.
Аноним 14/09/23 Чтв 22:48:33 2841702 63
>>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;}
Аноним 14/09/23 Чтв 22:59:25 2841709 64
>>2841685
>cout<<"Hello world"<<endl;
мне кстати только этой механикой работы с потоками плюсы и нарвились
остальная оопэшная хуйня кал ебучий, вот типа сишник да? но ты постоянно кодишь на каких то хайлевел абстракциях не задумываясь как там под капотом все это крутится, прям жаба какая то
Аноним 14/09/23 Чтв 23:03:26 2841710 65
>>2841709
еще в сишке прям не хватает неймспейсинга, чтобы свои велосипеды писать и не ебаться с отключением линковки стл
Аноним 14/09/23 Чтв 23:17:43 2841727 66
>>2841710
Мне в си много чего не хватает. Но я не буду про это ныть тут.
Хотя вру. Буду.
Не хватает удобной модульности.
Не хватает возможности в многопроходную компиляцию. Чтобы можно было как во всех современных языках:
void foo(){ bar(); }
void bar(){ // чет делать}

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

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

Аноним 15/09/23 Птн 00:23:00 2841770 67
>>2841727
>Не хватает удобной модульности.
это есть
>Не хватает возможности в многопроходную компиляцию.
хуйня какая то зумерская. сначал снимаем свитер потом срем
>Не хватает человеческих строк.
хуйня какая то зумерская
>Не хватает лямбд.
хуйня какая то зумерская
>JSON'а, работы с сетью
биндер в роде не в стл но то есть как и стл сокеты
>ты мог только те что должны использоваться использовать
сам то понял?
>Не хватает асинхронности в стандарте.
мультипроцессинг по дефолту асинхронный же или чо те не хватает
>Просто мне си - нравится как-бы.
но ты очень хочешь питон, да?
Аноним 15/09/23 Птн 05:44:03 2841845 68
Я прочитал K&R но не могу написать хорошей утилиты для юникса. Что еще читать?
Аноним 15/09/23 Птн 06:52:22 2841860 69
>>2841845
А какую ты хочешь написать? K&R по-моему дают достаточно практических примеров, ккак писать как раз такие утилиты. Охуенная книга.
Можешь порешать задачки на всяких leetcode, чтобы привыкнуть к языку.
Аноним 15/09/23 Птн 07:12:08 2841872 70
>>2841860
Поддерживаю оратора там упражнений до жопы крутых я даже помню некоторые до сих пор, с непривычки от некоторых срака горела по нубству но потом нормально
Аноним 15/09/23 Птн 09:27:40 2841956 71
>>2841860
Ну например свой генератор пакетов или альтернативу cat/grep.
Аноним 15/09/23 Птн 12:09:01 2842125 72
image.png 185Кб, 1625x1117
1625x1117
image.png 188Кб, 1616x1116
1616x1116
image.png 39Кб, 927x214
927x214
image.png 31Кб, 887x245
887x245
Аноны, подскажите, пожалуйста, что не так???
В варианте пик1 всё работает.
В варианте пик2, т.е., когда мы не знаем точной длины массива структур и добавляем realloc(), то программа падает с ошибкой: malloc(): corrupted top size
И ещё непонятно, почему компилятор ругается пик3, когда я ему передаю указатель на массив структур пик4.
Аноним 15/09/23 Птн 12:44:42 2842193 73
>>2842125
Аноны, я разобрался с этим
>В варианте пик2, т.е., когда мы не знаем точной длины массива структур и добавляем realloc(), то программа падает с ошибкой: malloc(): corrupted top size
надо, оказывается, в realloc() указывать ещё и размер структуры. Я думал, что, если ты даёшь realloc() уже саму динамическую переменную, то м.б. он уже должен сам понять, какого размера должна быть одна "ячейка" памяти, поэтому ему нужно просто указать общее кол-во этих "ячеек" памяти вторым аргументом.
Но я чёт всё также не понимаю, почему я не могу обращаться к полям структуры, указатель на которую я передаю в ф-цию, через "стрелочку".
Аноним 15/09/23 Птн 13:35:11 2842272 74
image.png 88Кб, 865x874
865x874
image.png 17Кб, 336x284
336x284
>>2842125
>И ещё непонятно, почему компилятор ругается пик3, когда я ему передаю указатель на массив структур пик4.
ЧЯДНТ?
Аноним 15/09/23 Птн 13:50:31 2842296 75
image.png 34Кб, 1001x249
1001x249
>>2842272
>>2842193
>>2842125
Всё, аноны, разобрался! Вот так пик1 всё робит через "стрелочки". Чёт в голове витает объяснение этой разницы, но пока не могу сформулировать.
Аноним 15/09/23 Птн 14:23:27 2842313 76
>>2842296
Получается, что
(⚹p).index == p->index, следовательно, p.index == (⚹(p+i)).index == (p+i)->index, а, эта конструкция p->index тогда ровна (⚹(⚹(p+i))).index.
Она ((⚹(⚹(p+i))).index), наверное, сработает в каком-нибудь массиве указателей на массив структур.
Аноним 15/09/23 Птн 14:24:35 2842315 77
>>2842313
p.index == (⚹(p+i)).index == (p+i)->index

быстрофикс
Аноним 15/09/23 Птн 14:28:43 2842321 78
image.png 20Кб, 782x226
782x226
>>2842315
Бляяятьь!!! Макаба совсем охерела - теперь не только указатели жрёт, но ещё и квадратные скобки!!!!!
Аноним 15/09/23 Птн 14:34:43 2842330 79
>>2842321
Тут чё вставки кода нет? Ниверю аряя
Аноним 15/09/23 Птн 14:36:27 2842337 80
>>2842330
Не, нету. Обычно всё на пастбин кидаем.
Аноним 15/09/23 Птн 14:40:57 2842347 81
>>2842337
Ну как же так. Даже в /math/ латех завезли
Аноним 15/09/23 Птн 16:06:59 2842497 82
>>2835050
Потому что вот так вот:
void (хget_data) (int n, const char хstr);

хранят указатели на вызовы, с обязательным перечислением аргументов, а указатель на данные просто: void хdata;
без скобичек
Аноним 15/09/23 Птн 16:08:57 2842500 83
Снимок экрана 2[...].png 567Кб, 2004x1302
2004x1302
>>2842313
>>2842315
>>2842321
нахуй ты обращение к полям структур парсишь?
почему ты не можешь книжку почитать?

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

хуетой какой то занимаешься чес слово
Аноним 15/09/23 Птн 16:49:31 2842583 84
>>2842500
Так у меня массив структур и передаю я указатель на этот массив структур, и тут не так всё просто, как ты описываешь:

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

Мне тоже так казалось изначально, а по факту получается, что нельзя перебарщивать со скобками и звёздочками перед ними.
Аноним 15/09/23 Птн 17:07:25 2842624 85
Снимок экрана 2[...].png 576Кб, 2004x1302
2004x1302
>>2842583
ебани алиасы если запутался
Аноним 15/09/23 Птн 17:45:07 2842698 86
>>2842624
Спасибо, анонче! Я с этим уже разобрался, т.е. лучше стал пынямать что такое вообще точка и "стрелочка" в этих ваших структурах. Сейчас у меня другая проблема - я теперь прыгаю в ф-цию, которая подбирает мне нужный индекс через другую ф-цию, которая разделяет иксы на меньше нуля и больше нуля, и соответственно, подставляет массивы структур с положительными и "отрицательными" индексами. Всё робит хорошо, т.е. в итоге я получаю необходимый результат, и он выводится на экран, но беда в том, что когда я запуская свою прогу в валгринде, то он просто ахеревает от этой моей программы - сначала слегка подвисает, потом говорит, что моя програ достигла лимита в десять миллионов ошибок лол, после чего улетает в бесконечность, пукнув на последок о том, что точный расчёт общего кол-ва ошибок невозможен.
Аноним 15/09/23 Птн 18:30:37 2842785 87
Хм.
Я сам не сишник. Но сегодня от нехуй делать - полез на работе по репкам коллег из других отделов.
Собственно. Че я увидел и нифига не понял.
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. Какая-то магия с тем, что никаких тредов, но судя по комментариям там как-то парралельно работа ведется. Это я вообще не понял. Там что-то было про какие-то прерывания чи еще что-то но в душе не представляю, что там происходит, типа вот вроде синхронный код, а написано, что между этим делом откуда-то могли прийти команды остановки и надо почистить сектора флешки.

В общем. Че курить чтобы понимать это все?
Аноним 15/09/23 Птн 18:36:52 2842788 88
Снимок экрана 2[...].png 629Кб, 2004x1302
2004x1302
>>2842785
не знаю анонче, кодстайл такой хули ты нас спрашиваешь спроси данов которые это писали вы же там рядом

ну я про функции
старые стандарты все равно другую запись имеют, хз зачем они именно так пишут
Аноним 15/09/23 Птн 18:40:46 2842791 89
>>2842788
Я боюсь спросить.
Во-первых, я не должен иметь доступ к этому коду, потому что он СЕКРЕТНЫЙ.
Во-вторых, боюсь выглядеть самозванцем, я то на java пишу. И тут к дедам с 20+ годами опыта пойду спрашивать, на меня посмотрят как на говно, начнут говорить, что вот, понабрали, они там в эти годы в космос запускали штуки, а я вот такое не знаю. В общем да.
Аноним 15/09/23 Птн 18:43:03 2842793 90
>>2842791
>СЕКРЕТНЫЙ
тогда закрой и не парься
Аноним 15/09/23 Птн 18:44:32 2842795 91
>>2842793
Так интересно же. Особенно 6й момент. Как можно в однопоточной программе что-то сделать пока выполняется какая-то функция, не завершив ее.
Аноним 15/09/23 Птн 18:55:33 2842803 92
Аноним 15/09/23 Птн 19:18:33 2842827 93
>>2842785
1) Стандарт ANSI/C89
2) Битовые поля, возможно там рядом где-то ещё union есть
3) Судя по коду, проект для контроллера, там нежелательно юзать динамическое выделение памяти из-за риска её фрагментации
4) Просто кодстайл такой
5) Глобальные переменные объявлять нормально, но осторожно. В эмбедед частая практика
6) Пушо ядро одно, тут либо вытесняющая многозадачность, либо никак

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

Спасибо за совет. Почитаю. А то каким-то неполноценным себя почувствовал от того что половниу времени - приходилось просто угадывать.
Аноним 15/09/23 Птн 20:30:35 2842916 96
>>2842895
Вместо Праты можно Кернигана с Ричи. Он компактнее и лаконичнее.
Аноним 15/09/23 Птн 20:41:49 2842935 97
>>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. Выделить всю структуру в памяти (вместе с данными), и через указатели разделить структуру и данные, но это уже неараствый хак, да и все очищать придется.
Аноним 15/09/23 Птн 20:52:02 2842952 98
>>2842935
>Нельзя передавать локальные данные ссылкой на стек выше
да ваще можно если принять ручное управление стеком через асмавставки, но это сейчас то же немодно и лютый хак

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

в остальном сыглы
Аноним 15/09/23 Птн 21:13:25 2842989 99
>>2842935
>struct array arr;
>init_array(&arr, size_t c, size_t n);

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

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

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

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

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

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

Как разделить это сходу не напишу, но если нет необходимости хранить структуру в памяти то не надо так делать, тем более я не уверен можно ли это очищать кусочками или надо сохранить где то указатель d
Аноним 16/09/23 Суб 05:40:43 2843485 101
>>2842952
А хотя нет, на e2k будет работать, там для манипуляции со стеком есть команды getsp и setsp (stack pointer) и в регистр через который возвращается значение из функции вполне наверное можно затолкать указатель из стека ниже.
Аноним 16/09/23 Суб 05:59:48 2843488 102
>>2843485
значение из стека ниже можно затолкать и обычным модификатором static
нахуй так изъебываться то
Аноним 16/09/23 Суб 06:04:15 2843489 103
>>2842989
>Ну я, в принципе, так и делаю. Объявляю массив в мэйне и в ф-ции передаю указатель на него. В ф-циях выделяю под него память и заполняю его данными, и всё через указатели.
так разве ты не выделяешь память под массив в мейне? получается два раза выделаешь
прокинь поинтер и ковыряй память уровнем ниже через поинтер

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

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

типа в мейне

static array[];
foo(array);

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

Вот поэтому все это путает и не надо злоупотреблять указателями и их передачей туда сюда неявными методами.
Тем более что указатель объявлен как array[]
А foo может принимать
void foo(void*ptr);
И записывать в указатель что угодно и компилятор это сожрет.
Аноним 16/09/23 Суб 08:43:04 2843538 107
>>2835039 (OP)
>⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
У жопаскриптеров шапка лучше выглядит. Как Си скатилися в такое говно?
Аноним 16/09/23 Суб 08:47:54 2843540 108
>>2843489
>так разве ты не выделяешь память под массив в мейне? получается два раза выделаешь

Да, тот вариант проги, который я закинул в тред, выделяет в мейне. Сейчас же я переписал прогу, и там всё в ф-циях происходит.
Аноним 16/09/23 Суб 10:12:40 2843606 109
image.png 104Кб, 1200x225
1200x225
Где тот петуччило, который утверждал когда-то, что нет никаких ячеек в памяти? Ты ещё тут, петуччило?
Аноним 16/09/23 Суб 12:33:03 2843748 110
>>2843503
джавист ты чо несешь
array это уже поинтер на первый элемент массива
Аноним 16/09/23 Суб 12:47:51 2843759 111
16898711106840.mp4 2390Кб, 576x1024, 00:00:16
576x1024
>>2843538
иноагент из узбекистана по кличке Абу подрывает имидж кодерской имиджборды
Аноним 16/09/23 Суб 13:52:43 2843849 112
>>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;
}
Аноним 16/09/23 Суб 13:56:12 2843854 113
>>2843849
чот ты тут изъебываешься ради нихуя, как не прокидывал наверх так и не прокидываешь
крч, хуеплет, нахуй иди ок да?
научишься на стек прокидывать аррэй - пиши
Аноним 17/09/23 Вск 17:40:22 2845594 114
Пацаны, пилю pmbus, нужно преобразовать int в linear11, может подкинет кто готовый вариант, в гугле забанили, сам дрочу уже два дня, вроде простая операция, а я такой тупой, что не раздуплю никак.
Аноним 17/09/23 Вск 17:47:37 2845604 115
Снимок экрана 2[...].png 239Кб, 1988x1030
1988x1030
>>2845594
>linear11
ну судя по этой инфе тут два байта каких то флагов
запиши флаги в каждый бит вручную
Аноним 17/09/23 Вск 18:29:42 2845630 116
>>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 лучше.
Аноним 17/09/23 Вск 19:21:35 2845702 117
>>2845630
Как установить биты я знаю, но сначала надо преобразовать число в показатель и мантиссу, основная проблема в этом.
Аноним 17/09/23 Вск 19:56:27 2845754 118
>>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;
}

Вот, как-то так пока сделал, теперь бы ещё придумать, что делать с дробными числами.
Аноним 17/09/23 Вск 21:01:54 2845839 119
>>2845702
Так а что значит преобразовать int?
Тебе надо целое число в вещественное преобразовать и взять мантиссу или что?
Аноним 17/09/23 Вск 21:15:21 2845852 120
Аноним 17/09/23 Вск 22:15:48 2845909 121
>>2843606
У всех регионаж Росиии йододеицит. Не удително что ты такой.
Аноним 18/09/23 Пнд 00:45:00 2846037 122
Сап. Похвалите или покритикуйте трехтомник Столярова.
Аноним 18/09/23 Пнд 01:40:35 2846051 123
>>2846037
Хвалю трехтомник Столярова.
Аноним 18/09/23 Пнд 03:36:09 2846080 124
>>2846037
Критикую трехтомник Столярова.
Аноним 18/09/23 Пнд 06:53:51 2846113 125
>>2846037
Ещё не читал трёхтомник Столярова.
Аноним 18/09/23 Пнд 08:52:22 2846136 126
>>2846037
Чел, он хорош, но два единственных и огромных минуса в том, что многие проги даны просто как отдельные ф-ции, плюс ко всему у него совсем нет упражнений (то что иногда встречается то, что это для раздумий читателя, это нещитово). Короче, эту книгу надо совмещать с чем-то ещё. Если ты совсем нуб, то не советую.
Аноним 18/09/23 Пнд 08:56:07 2846142 127
image.png 109Кб, 299x168
299x168
>>2845909
>У всех регионаж Росиии йододеицит. Не удително что ты такой.








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

Вообще, для вката в Си советую эту книгу, плюс, если ту же тему прочитывать у Столярова, естественно не забывая решать задачки, то, в принципе, Си можно освоить на достаточно хорошем уровне.
Аноним 18/09/23 Пнд 12:29:54 2846307 132
6226929110.jpg 269Кб, 1061x1500
1061x1500
6c5279c4f6c98aa[...].jpg 199Кб, 1600x740
1600x740
>>2846156
Тоже Ван Гуйа на английском купил. Кратко пробежался (выборочно) по части асм в первом томе и показалось, что тема не полностью раскрыта. Возможно в других томах она раскрывается подробнее, но все равно решил купить отдельный учебник.

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

Кто-нибудь в пик 2 играет?)
Аноним 18/09/23 Пнд 12:37:07 2846311 133
>>2846307
>что тема не полностью раскрыта
Так это для начинающих книга, но она самое то, чтобы вкатиться в асм. Дальше уже можно обмазываться Крисом Касперски.
Аноним 18/09/23 Пнд 12:38:31 2846314 134
>>2846180
>>2846184
Спасибо за ответ!

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

Кстати, за сколько по времени прочитал все тома?
Аноним 18/09/23 Пнд 13:14:41 2846363 135
>>2845839
На входе у меня float или int, на выходе linear11 - 16 битное с плавающей точкой, если упрощённо. 5-битная знаковая мантисса и база 11-битная база, тоже со знаком. В общем странный формат, я с ним не сталкивался раньше. Пока сделал грязный хак, который работает только с целыми положительными, но вообще хочу найти что-то нормальное.
Находил один алгоритм на стэковерфлоу, но он ещё хуже работал, до 1023 только работал.
Аноним 18/09/23 Пнд 14:42:13 2846459 136
>>2846314
Читал в то время не только Столярова, но с периодическими перерывами прочитал примерно за 4 месяца.
Аноним 18/09/23 Пнд 14:44:32 2846464 137
>>2846459
Ну и читал я его после Праты и небольшого опыта в Си, поэтому при прочтении уже была в голове какая-то база.
Аноним 18/09/23 Пнд 15:04:14 2846510 138
Чтобы перестать читать Столярова достаточно посмотреть на код его программ. Не которые в учебниках, а которые он сам для себя пишет. А потом еще раз подумать чему может научить такой человек.
Аноним 18/09/23 Пнд 15:16:35 2846533 139
>>2846510
А где можно посмотреть? У него свой гит есть?
Ну да, проблема столярика в том, что он по сути всю жизнь только преподавал и у него нет норм коммерческого опыта. Отсюда и его ебанутые заскоки в некоторых областях.
Аноним 18/09/23 Пнд 15:19:57 2846541 140
Аноним 18/09/23 Пнд 15:32:52 2846564 141
>>2846464
>поэтому при прочтении уже была в голове какая-то база.
Вот это, кстати, роляет, когда читаешь его книги, при этом черпаешь интересные нюансы, без слома мозга, если пытаешься осилить его книги, читая без подготовки.
Аноним 18/09/23 Пнд 16:05:15 2846610 142
>>2846533
> проблема столярика в том, что он по сути всю жизнь только преподавал и у него нет норм коммерческого опыта. Отсюда и его ебанутые заскоки в некоторых областях
> @
> Слышь, двач, посоветуй, что почитать про Си. Нет, мне не нужно писать программы, не нужен реальный опыт, мне надо книжек почитать
> @
Ебало)))
Аноним 18/09/23 Пнд 16:27:31 2846663 143
>>2846610
Уже передергивания пошли, для изучения языка с нуля он нормально подходит.
Аноним 18/09/23 Пнд 16:28:45 2846666 144
>>2846610
И чего тебя так разорвало?
Аноним 18/09/23 Пнд 17:47:47 2846787 145
>>2846037
не читал, но критикую
Аноним 18/09/23 Пнд 18:30:56 2846872 146
Аноним 18/09/23 Пнд 20:36:04 2847141 147
Дописал небольшую прогу на С, которая извлекает из текста токены, и понял, что я пришёл к слайсам строк. Посему, решил немного вгрузиться в зиг и переписать то же самое на нем (слайсы там нативные всё-таки) и язык прям меня приятно удивил. Там реально есть интересные фишки: comptime, охуенные ошибки, nullable типы, слайсы, defer-ы, errordefer-ы, всякие плюшки в std либе (json к примеру), возможность в 3 строчки подключать С либы...
У языка огромный потенциал, кмк.
Аноним 18/09/23 Пнд 20:36:41 2847144 148
>>2846872
Глыба калла

мимо, поправил
Аноним 18/09/23 Пнд 20:45:24 2847162 149
>>2847141
патенцивал стать очередной жабахуетой с бесконечным набором блекбоксов и роадмапами освоения zig.hail.core в 7 лет и ЕЕ спецификаций еще длинною в 15.
Аноним 18/09/23 Пнд 21:09:16 2847210 150
>>2847162
Хз при чем тут жаба.
Аноним 18/09/23 Пнд 21:48:56 2847246 151
>>2847210
последователь судьбы руби он рейлс кмк
хайп пройдет и все жидко пукнут как всегда это бывает
Аноним 18/09/23 Пнд 22:01:38 2847255 152
Аноним 18/09/23 Пнд 22:07:09 2847259 153
>>2847255
>патенцивал
>не хайп
ладно ты утомил, пойду своими делами займусь, не хватало еще срачь раздувать в копилку форса очередного говна
Аноним 18/09/23 Пнд 22:09:03 2847261 154
>>2847259
Я вообще мимокрок, лол) Просто забавно видеть слова "зиг" и "хайп" вместе.
Хайпится как раз раст сейчас.
Аноним 18/09/23 Пнд 22:12:20 2847262 155
Аноним 18/09/23 Пнд 22:15:13 2847265 156
15868023492550.jpg 879Кб, 1280x1142
1280x1142
Аноним 19/09/23 Втр 05:53:45 2847462 157
>>2847261
Раст мне не нравится, слишком анальные правила борров чекера, а вот зиг очень даже. По сути тот же самый С, но с плюшками.
Аноним 19/09/23 Втр 09:24:24 2847523 158
>>2847462
Олимпиаднику всё равно какой язык, для него язык как шлюхе наряд, любой модный нравится.

А вот если ты реальный программист пишущий реальные программы, то расты с зигами и прочей шушерой будет вызывать только отвращение, потому что интеграция с реальными апи ос отсутствует, а программа это в первую очередь апи ос и дальнейшие надстройки в виде библиотек, иначе ничего не напишешь кроме олимпиадного хеллоуворлда в вакууме.
Аноним 19/09/23 Втр 10:24:34 2847574 159
Screenshot 2023[...].png 48Кб, 569x500
569x500
Screenshot 2023[...].png 362Кб, 692x330
692x330
>>2847523
Хуй знает что ты высрал. Разве не является пик1 интеграцией с апи ОС? Разве не является компилятор зига, компилящий сам себя, реальной программой, способной при этом компилировать крос-платформенно с линукса на винду (пик2) и выдавать мне няшный 22 КБайтный файл?
Аноним 19/09/23 Втр 11:04:24 2847598 160
>>2847574
>Разве не является пик1
Является, хеллоуворлдом, олимпиадным говном без задач. Как раз про это и сказал же.
Аноним 19/09/23 Втр 11:21:37 2847640 161
>>2847462
>>2847574
Чел, и раст и зиг это хорошие системные языки, если твой проект начинается с нуля, и, если этот твой проект какой-нибудь стартап (все высокопроизводительные блокчейны пишутся на расте), то дрочи раст/зиг. Но это маленький процент от всего айти мира, поэтому чаще всего высокопроизводительные штуки пишутся на Си или плюсах, т.к., чаще всего эти высокопроизводительные штуки есть продолжение либо производная от того, что уже хорошо себя зарекомендовало, и используется значительное время. Поэтому, если ты стартапер, то изучай раст/зиг, если ты просто хочешь стабильную работу, то изучай Си и плюсы.
Чому такие простые вещи в этом треде приходится объяснять каждый месяц?
Аноним 19/09/23 Втр 11:37:14 2847662 162
>>2847640
При чем тут это? Чел назвал зиг шушерой, потому что отсутствует интеграция с системным апи, но по факту он может вызвать и слинковаться с любой С-совместимой либой, а также компилить С-совместимые либы. Я сгорел от того, что он высрал что-то, обосравшись с подливой.
Аноним 19/09/23 Втр 11:43:07 2847668 163
>>2847662
>слинковаться с любой С-совместимой либой, а также компилить С-совместимые либы
Ну и кому это надо, какому-нибудь особому прошивщику микроконтрроллеров? Но там нет ос и нет апи.
На ос без крестов как минимум делать нечего, потому что без объектов ты напишешь только хелолоруворд, олимпиадное говно без задач.
Аноним 19/09/23 Втр 11:52:04 2847682 164
>>2847668
Ты это Торвальду Линуксу скажи.
Аноним 19/09/23 Втр 11:52:44 2847683 165
>>2847668
Какой же ты долбоеб, г-ди...
Аноним 19/09/23 Втр 12:08:50 2847705 166
Аноним 19/09/23 Втр 12:26:43 2847722 167
>>2847705
Да, с долбоебов, которые утверждают, что без объектов нельзя написать ничего, кроме олимпиадных задач, лол. Ну по его логике С тоже олимпиадный язык получается, так как в нем нет объектов.
Чтобы не быть лицемером, пусть выкидывает тогда свои гаджеты и пека, так как ядра в них написаны на С, в котором нет объектов АХАХАХ БЛЯТЬ КАКАЯ ЖЕ ЭТО ХУЙНЯ. А на ассемблере кстати тоже нет объектов. Как же тогда была написана первая ОС? Непонятно. Мы пользуемся олимпиадным софтом, господа.
А почему кстати он так не любит олимпиадников? Мозгов не хватает на алгоритмы, видать.
Аноним 19/09/23 Втр 13:04:31 2847757 168
>>2847668
Freertos и другие чибиосы на микроконтроллерах тебе шутка чтоли? И апи там есть и драйверы и фрэймворки. Да и под винду вполне себе пишу клиенты на си-labwindows, с потоками, очередями и вот этим всем.
Короче этот не шарит, впрочем все уже и так это поняли.
Аноним 19/09/23 Втр 13:17:09 2847770 169
вы чо тут цирк устроили , клоуны? идите в зиготред зиги свои кидайте, форсеры говна всякого
Аноним 19/09/23 Втр 13:52:20 2847815 170
Аноним 19/09/23 Втр 14:11:46 2847847 171
Аноним 19/09/23 Втр 14:27:30 2847867 172
Аноним 19/09/23 Втр 14:35:46 2847871 173
>>2847770
Та залётный клоун попутал, пришёл и мутит воду.
Аноним 19/09/23 Втр 15:19:44 2847907 174
>>2847871
Так намутил, что завсегдатай треда обдристался с подливой.
Аноним 19/09/23 Втр 15:53:21 2847944 175
image.png 921Кб, 1000x1000
1000x1000
>>2847907
кто? крестовик? вам обоим по пикрилу
Аноним 19/09/23 Втр 17:15:00 2848044 176
Я что-то не понял как языки, имеющие адекватную интеграцию с Си, не могут использоваться для написания системного софта и дергания АПИшек?
Аноним 19/09/23 Втр 17:33:57 2848079 177
>>2847141
Двачую, охуенный язык. Мало того, его компилер еще и является компилером с/с++. Ну а комптайм вкусный еще и тем, что и сам код, и комптайм, и билдскрипты на одном языке, а не на портянке с макросами/шаблонами и мейкфайлами написанными инопланетянами.
Кто от него может бомбить итт? Только пердежи которые отстаивают UB через UB да только винапи знают, застряли в развитии в 90х.
Аноним 20/09/23 Срд 01:22:09 2848513 178
image.png 29Кб, 424x594
424x594
https://pastebin.com/inagsWvD

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

Почему в функции x64_call_show_hello_world при вызове CALL RAX (код 0xFF 0xD0) программа наебывается и падает? В 32-разрядной версии команда CALL EAX отрабатывает успешно, а на 64 битах не хочет.
Аноним 20/09/23 Срд 03:49:32 2848528 179
>>2848513
Очевидно, в отладчике поставить брейкпоинт перед вызовом сгенерированного кода, проверить, что он правилен, затем пошагово выполнять инструкции, чтобы записать, в какой момент выдаётся ошибка, и какова она. Потом проверить, какие ещё методы защиты от эксплоитов есть в твоей системе, как должны оформляться вызовы функций и возвращение из них на стеке, если программа на самом деле завершается при попытке вернуться.
Аноним 20/09/23 Срд 04:07:18 2848534 180
>>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) приводит к краху. Про эксплоиты не понимаю ничего.
Аноним 20/09/23 Срд 04:45:56 2848539 181
>>2839808
> ну в винде под консоль чота делать непрофитно, там система построения процессов завязана на принцип - все процессы это окно, тоесть надо изъебываться чтобы отрисовывать вывод в консоль

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

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

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

Машинные коды твои я пока даже не разбирал.
Аноним 20/09/23 Срд 06:35:16 2848547 183
>>2848539
> Только недавно им пришлось ради удержания разработчиков на винде делать с нуля Windows Terminal и новое API
Так вот зачем они решили сделать консольку с закосом под линух
>делать с нуля Windows Terminal и новое API
Тоесть в 11 шинде ТРИ блядских терминала?
Аноним 20/09/23 Срд 07:31:59 2848559 184
>>2848547
Нет, там два вида консоли, старая и новая, и два командных интерпретатора, товарищ Комманд Ком и Помершелл. Плюс сбоку линуксовые в своей подсистеме.
Аноним 20/09/23 Срд 08:18:25 2848601 185
Windows Terminal неплох, кстати говоря. Даже выезжать сверху умеет по win~.
Аноним 20/09/23 Срд 10:12:25 2848752 186
Аноним 20/09/23 Срд 10:21:36 2848761 187
>>2848601
Windows Terminal это ничто, просто оболочка для терминалов, в одном окошке со вкладками.

А вот тот же PowerShell напердоленный OhMySh в легкую дает на ротан zsh от которого взяли идею. Пердосрали слили даже в конкуренции консолей, кек.
Аноним 20/09/23 Срд 10:47:03 2848784 188
>>2848761
Пути уже прописал вротдаватель?
Аноним 21/09/23 Чтв 10:18:41 2849917 189
>>2846541
И что тут такого ужасного?
Аноним 22/09/23 Птн 20:12:14 2851796 190
Тут же были аноны, которые Си под винду изучают. Посоветуйте пожалуйста, что почитать по winsock.h? Желательно книжку или справочник, чтобы был доступ офлайн.
Аноним 23/09/23 Суб 09:25:40 2852118 191
Как можно выйти из вложенного цикла больше, чем на один порядок без использования goto? Просто не вижу другого варианта т.к. нюфак.
Аноним 23/09/23 Суб 09:46:41 2852125 192
>>2852118
Обычно под "не использовать goto" подразумевается реализация алгоритмов таким образом, что бы этот уродливый инструмент не требовался. Например использование функций и конструкции switch.

Мало кто знает, но в javascript тоже есть goto (По крайней мере был в стандарте ES5). И слава богу как то без него обходились, потому что функциональность языка позволяла реализовать все необходимое и даже больше. Ну или просто не знали про него, что тоже неплохо.
Аноним 23/09/23 Суб 10:01:53 2852137 193
>>2852125
Понимаю, что в идеале надо так алгоритм планировать, чтобы таких ситуаций не возникало. Но просто интересно, что делать именно в контексте данной ситуации. Мне приходит только решение расставлять флаги и по ним делать break из каждого вложенного цикла, с каждым флагом продвигаясь наверх.
Аноним 23/09/23 Суб 10:12:49 2852140 194
>>2852137
Такой юзкейс описан ещё в K&R был. Не вижу ниче страшного так делать, если в итоге и читат и понимать проще
Аноним 23/09/23 Суб 10:26:31 2852150 195
>>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. Оно сложней и испоььзует только функции заложенные в не-позикс операционку. Тогда как баш это сам себе операционная система.
Аноним 23/09/23 Суб 10:34:23 2852158 196
>>2852150
>Тогда как баш это сам себе операционная система
че
Аноним 23/09/23 Суб 12:26:10 2852247 197
>>2852158
Но он прав: bash - это клей для системных тулзов и демонов в линухах. OS это не только ядро
Аноним 23/09/23 Суб 12:36:55 2852251 198
Аноним 23/09/23 Суб 18:00:00 2852599 199
>>2852137
оберни циклы в функцию и делай ретурн
Аноним 24/09/23 Вск 13:49:15 2853340 200
>>2852118
Выдели в функцию и return
Аноним 26/09/23 Втр 15:13:50 2855937 201
>>2852118
Принудительно выставить счётчики циклов так, чтобы сработало условие выхода.
Аноним 27/09/23 Срд 15:46:54 2857601 202
image.png 21Кб, 772x297
772x297
Аноны, чёт не понимаю! Как так получается, что я вызываю ф-цию, которая подчёркнута красной линией на пикриле, а возврат происходит не "под неё", а на ф-цию, которая отмечена чёрными квадратными скобками на пикриле?
Аноним 27/09/23 Срд 17:16:19 2857775 203
>>2857601
Так сходу не скажу, но я не вообще не вижу путей выхода из функции search(), просто бесконечная рекурсия т.к. нету условия выхода.
Аноним 27/09/23 Срд 18:59:38 2857883 204
image.png 301Кб, 1924x1138
1924x1138
image.png 288Кб, 1892x1151
1892x1151
image.png 312Кб, 1896x1151
1896x1151
image.png 288Кб, 1894x1145
1894x1145
>>2857775
Мне вот что непонятно: мы нашли первое подмножество и вызвали себя ещё раз теперь уже с соблюдением условия if (k == n + 1), соответственно можем выводить это подмножество на экран (пикрилл 1). Выводим его, потом возвращаемся "под" вызывавшую инструкцию, после чего уменьшаем размер следующего подмножества, и готовы вызвать себя ещё раз (пикрилл 2). Вызвали себя с соблюдением условия, поэтому готовы вывести на экран очередное подмножество (пикрилл 3). И, по идее, после вывода на экран должны вернуться "под" вызывавшую ф-цию (на пикрилле 3 есть уточнения откуда вызвали и куда должны вернуться). Но мы почему-то сразу возвращаемся в ф-цию, которая вызвала вызывавшую ф-цию, т.е. мы как бы перескочили через ретёрн. Почему так?

Лови ещё код, там всё норм робит - нет никаких бесконечных ф-ций.
https://pastebin.com/Ht8Vmyyt
Аноним 27/09/23 Срд 20:16:08 2857956 205
>>2857883
Ничего что под else к k два раза 1 прибавляется?
Аноним 27/09/23 Срд 20:18:23 2857957 206
>>2857883
>3
куда сюда? тут ничего нет
Аноним 27/09/23 Срд 20:19:19 2857961 207
>>2857883
Чё за гуи странны, ты на темплеОС что ли лол?
Аноним 27/09/23 Срд 20:42:02 2857979 208
>>2857956
А что тут такого? Первая ф-ция набирает первое, самое большое подмножество, а дальше уже следуют из него исключения, когда ф-ция прыгает обратно из состояния k == n + 1. Т.е. когда ф-ция возвращает управление, то подмножество уменьшается на единицу, и следует очередной вызов ф-ции с к k + 1.
Аноним 27/09/23 Срд 20:43:47 2857983 209
>>2857957
Но у меня почему-то в некоторых программах управление возвращается на это скобку, после чего уже идёт возврат в предыдущую ф-цию. Поэтому я и бугурчу, не понимая как так получается.
Аноним 27/09/23 Срд 20:44:22 2857984 210
>>2857961
На убунте, а это дебагер ddd.
Аноним 27/09/23 Срд 21:01:46 2857998 211
1
Аноним 27/09/23 Срд 21:12:04 2858006 212
>>2857984
Пиздец, ГНУтый софт как всегда дизайном поражает умы неискушенных. На такое реально страшно смотреть, лучше обычным консольным GDB пользоваться.
Аноним 27/09/23 Срд 21:29:00 2858038 213
>>2858006
>лучше обычным консольным GDB пользоваться
Не, это пердол ещё тот! ddd построен на gdb, т.е. в консоле ddd можно управлять командами gdb, только тут фичи в том, что можно окошки с переменными, аргументами, либо участки памяти с энтым кол-вом ячеек (от байта до 64 байт) выставить в панеле, и наблюдать за тем как они меняются, в процессе дебага. А в дефолтном gdb, чтобы проверить переменную/аргумент/участок памяти приходиться каждый раз исполнять команду с адресами/именами переменных, что заёбывает пиздос!!!!! Особенно, когда не особо шаришь, что делаешь и что вообще перед тобой происходит.
Аноним 28/09/23 Чтв 16:11:26 2858726 214
Аноним 28/09/23 Чтв 16:40:03 2858761 215
Любую мокропиську накатят лишь бы емаксом не пользоваться. Хех, мда.
Аноним 28/09/23 Чтв 20:42:20 2859097 216
>>2858761
пускай накатывают чо хотят и смотрят как протоны на окисленных кремниевых пластинках в жопы ябуца, но не так как они планировали
чем бы дитя не тешилось...
Аноним 28/09/23 Чтв 21:17:12 2859135 217
>>2858726
Хз, я об этом первый раз слышу.
Аноним 29/09/23 Птн 06:51:00 2859354 218
>>2857883
Проверил, в gdb выходит из функции как обычно, приземляется на следующую строчку после search().
Аноним 29/09/23 Птн 10:33:25 2859473 219
image.png 24Кб, 541x188
541x188
image.png 723Кб, 2044x972
2044x972
image.png 483Кб, 2328x1112
2328x1112
>>2859354
Я уже разобрался! Дизассембл помог! Когда мы подходим к ф-ции (пикрилл 1), то мы уже находимся в "третьей" ф-ции сёрч, следовательно, после выполнения инструкции "очередной вызов самих себя", в "третьей" ф-ции сёрч больше нечего выполнять, поэтому она готовится к возврату. На пикрилле 2 видно, что, когда мы выходим из вызываемой ф-ции (то есть последняя инструкция в "третьей" ф-ции сёрч), то у вызвавшей ф-ции адрес выполнения следующей инструкции совпадает с подготовкой к ретёрну, т.е. она готовится отдать управление "второй" ф-ции сёрч. Пикрилл 3 показывает состояние стека, когда мы вернулись из "четвёртой" ф-ции; заодно он показывает, что следующая инструкция у "третьей" ф-ции сёрч это поготовка к ретёрну.

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

Энивей, моя сфера деятельности несколько примыкает к эмбеддед-разработке, так что нужный инструментарий есть, всем чмаки в этом чати, пойду я отсюда, извините за беспокойство.
Аноним 30/09/23 Суб 15:51:32 2860888 223
>>2860849
>и что начинать лучше не с сей
И с чего лучше начинать?
Аноним 30/09/23 Суб 19:44:58 2861286 224
Есть что-то реально годное почитать про графику в линуксе? drm\kms вся хуйня. Пока что одно говно какое-то смог нагуглить
Аноним 30/09/23 Суб 21:02:40 2861435 225
>>2861286
Только подумал скинуть тебе все, что я нашел за некоторое время, но решил не кидать. Пошёл нахуй, лодырь.
Аноним 01/10/23 Вск 00:44:36 2861671 226
>>2835039 (OP)
> Visual Studio 2017
Мужик, ты шесть лет провёл в анабиозе и сбежал на двач от санитаров?
Аноним 02/10/23 Пнд 23:35:16 2864097 227
image.png 99Кб, 196x257
196x257
Анон, что насчет учебника Дейтелов, yay, or nay?
Аноним 04/10/23 Срд 09:58:20 2865383 228
>>2864097
Зачем тебе эта книга? Есть же
>Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.

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

Чёт не улавливаю сути - когда глобальная переменная это хорошо, а когда глобальная переменная это плохо?
Аноним 04/10/23 Срд 17:06:32 2865909 237
>>2865908
Чето ты по-моему сам на свой вопрос ответил
Аноним 04/10/23 Срд 17:13:27 2865915 238
>>2865908
глобалки это выгодно если:
надо разгрузить стек
надо делать ретурн из макроса

в остальном выгоднее локалки
Аноним 04/10/23 Срд 17:14:40 2865916 239
>>2865915
Понял, анон! Спасибо!
Аноним 04/10/23 Срд 17:14:55 2865918 240
>>2865915
Объясните дебилу что значит "разгрузить стек". Куча и стек в одну сторону растут, если ты из стека в кучу переложишь не одна хуйня будет? Или это какие-то компьютационные выгоды имеет
Аноним 04/10/23 Срд 17:16:53 2865925 241
>>2865918
стек не вечный а на винде еще и выравнивание ебанутое в 32 бита вот и думай
глобалки не в куче лежат если что
Аноним 04/10/23 Срд 17:18:22 2865928 242
>>2865925
>глобалки не в куче лежат если что
А ну кстати пошёл я нахуй
Аноним 04/10/23 Срд 17:20:28 2865929 243
16114289648180.mp4 608Кб, 434x360, 00:00:13
434x360
>>2865928
>А ну кстати пошёл я нахуй
Чёт разорвало на ровном месте!
Аноним 04/10/23 Срд 19:38:37 2866133 244
>>2865908
При чтении советов надо всегда понимать, на каком уровне они даются. Тут объясняется начинающим, что такое хорошо и что такое плохо. Онтогенез здесь повторяет филогенез: когда-то, при появлении высокоуровневых языков, людям, привыкшим к более простым решениям, и программирующим по наитию новичкам тоже приходилось объяснять, что не стоит валить в начале программы все переменные (по примеру тех языков, в которых альтернатив не было), а потом в нужный момент глубоко внутри вызовов глобальный коэффициентик убавлять или прибавлять, и что функция не просто метка для GOTO, а логическая единица, и чем больше она напоминает чёрный ящик, при работе не открывающий и не закрывающий файлы и не переключающий краны на трубах с серной кислотой, чтобы налить чуть-чуть себе в бидончик, тем удобнее ей пользоваться и судить о работе программы.

Если у тебя модуль-объект-что-угодно является чёрным ящиком и внутренними функциями меняет своё состояние, то всё в порядке. Понятно, что на предложение в сложной многопоточной системе с кучей уровней абстракции для удобства завести переменную, чтобы хранить число подключений к базе данных, тебе сразу объяснят, что код окажется в библиотеке или каком-нибудь COM-объекте, и выполняться будет сферически в вакууме.
Аноним 04/10/23 Срд 19:57:28 2866148 245
В школе была платформа где автопроверялись задания на паскале. Кто-нибудь может запилил exercises from K&R в формате литкода?
Аноним 04/10/23 Срд 19:58:12 2866149 246
lg0-JXcRcx2Hqxi[...].jpeg 2757Кб, 3840x2160
3840x2160
Аноним 04/10/23 Срд 19:59:32 2866152 247
>>2866148
всмысле юнит тесты на хеловорлды написать?
напиши сам
Аноним 04/10/23 Срд 20:40:18 2866234 248
как сделать чтоб в виме { это херня не уравнивалась, типа автокоррекция. я люблю писать все некрасиво
Аноним 04/10/23 Срд 20:47:20 2866239 249
>>2866234
по-русски скажи что ты хочешь
мимо юзаю вим
Аноним 04/10/23 Срд 21:15:48 2866280 250
>>2866239
Типа когда пишешь { она автоматически на tab выравнивается. Я просто привык писать так как понятно лишь себе. Я недавно перешел на вим
Аноним 04/10/23 Срд 21:18:05 2866286 251
Снимок экрана 2[...].png 618Кб, 2004x1296
2004x1296
>>2866280
убери в vimrc сточку set autoindent это автоиндент выравнивает по предыдущему отступу новые строки
Аноним 04/10/23 Срд 21:59:34 2866332 252
alicerosexoxoth[...].png 6271Кб, 2048x2048
2048x2048
>>2866152
Ах вот как это называется. Я просто думал может быть уже готовое есть на каком-нибудь ресурсе где можно писать свои exercises.
На литкоде можно писать свои упражнения, например?
Аноним 04/10/23 Срд 22:10:30 2866345 253
>>2866332
не знаю, я не дрочу литкоды
может другие аноны подскажут
Аноним 04/10/23 Срд 22:33:55 2866372 254
>>2866286
здоровья тебе, анон
Аноним 04/10/23 Срд 22:46:21 2866385 255
>>2866332
На кодварс вроде должно быть можно
Аноним 05/10/23 Чтв 11:25:15 2866832 256
Где-то давно видел, что при обработке ошибки можно как-то вывести строку, в которой эта ошибка произошла. Как это сделать?
линух, gcc
Аноним 05/10/23 Чтв 11:30:22 2866837 257
>>2866832
насчет номера строки - такое не знаю, наверн только компилер умеет построчно
но вот вывести например имя функции в которой крашнулось можно макросами, а вообще ты наверное про стандартные потоки говоришь? поток ошибок stderr туда пишешь текст чо случилося и ретурнишь не ноль, в консоль автоматом выпадет вывод потока ошибок
Аноним 05/10/23 Чтв 12:21:30 2866914 258
Аноним 05/10/23 Чтв 12:29:49 2866923 259
>>2866914
ну я подозревал что это лоу левел проброс макровставкой по аналогии с __func__ или var но пощупать так и не довелось, не было повода, поэтому я и сказал честно что не знаю
Аноним 05/10/23 Чтв 13:43:41 2867050 260
>>2866914
Лучей добра тебе анончик. Уже пару дней не мог вспомнить про этот макрос, думал это как-то ещё реализовано и не получалось загуглить.
Аноним 05/10/23 Чтв 14:05:05 2867104 261
>>2866923
Да я тоже не пользовался, обычно имени функции хватает для отладки.

>>2867050
Если не секрет, для чего тебе понадобился вывод номера строки, Функции на 100500 строк?
Аноним 05/10/23 Чтв 15:49:09 2867261 262
>>2867104
Да ничего такого, просто тренируюсь работать с сокетами и когда реализовывал обработку ошибок вспомнил об этой фиче. Поичем до этого вообще встречал это на микроконтроллерах, то ли в коде FreeRTOS, то ли у LwIP.
Аноним 05/10/23 Чтв 17:27:33 2867422 263
>>2867261
Я такое вообще применял только пару раз, и только на мк, когда отладку применить вообще никак нельзя было. Один раз мультипроцессорная система стм+модем sim800 с EAT, обмен и синхронизацию через два терминала пасти. Второй раз нужно было портировать стм проект на нонейм китайский проц с высиранием отладки через усарт. Тот ещё гемор, но фича нужная, выручает, когда нет других вариантов.
Аноним 05/10/23 Чтв 21:05:31 2867676 264
image.png 13Кб, 392x130
392x130
image.png 12Кб, 392x130
392x130
Какая разница между пикрил 1 и 2? Можно пример, юзкейс этого const?
Аноним 05/10/23 Чтв 21:08:09 2867677 265
image.png 54Кб, 810x406
810x406
Анон, объясни где смотреть эту проблему?
Аноним 05/10/23 Чтв 21:10:52 2867680 266
image.png 104Кб, 1505x350
1505x350
>>2867677
А все нашел. Как оно так работает? Оно прекомпилирует лайв? На макоси у меня вроде не было такого фукнционала. Пикрил на убунте.
Аноним 05/10/23 Чтв 21:37:51 2867713 267
image.png 69Кб, 1104x811
1104x811
image.png 31Кб, 685x181
685x181
Как мне самому увидеть этот result. Они написали result как бы зная, как оно работает, но на деле оно же просто бьет ошибку или можно как-то увидеть как выглядит код после исполнения include?
Аноним 05/10/23 Чтв 22:44:50 2867775 268
Screenshot from[...].png 94Кб, 1071x886
1071x886
>>2867713
И еще в этом примере, с этими дейфайнами в примерах всегда имя дефайна в формате имени файла, но вроде можно любое использовать и работает, например
#ifndef _2ch
#define _2ch
Аноним 07/10/23 Суб 08:43:22 2869257 269
>>2867676
строковые литералы неизменяемы
>>2867677
>>2867680
почти все иде умеют блобить варнинги и ерроры просто перещелкивая паттерны и референсы
>>2867713
инклюд делает контрол це контрол вэ, сделай это сам и увидишь
>>2867775
это так, впрочем долго объяснять почему не стоит дефайнить хуйнюнейм и неймить вары в абцдиэфджи
Аноним 09/10/23 Пнд 15:03:06 2871741 270
image.png 169Кб, 1183x1183
1183x1183
image.png 11Кб, 1025x73
1025x73
image.png 11Кб, 1011x70
1011x70
image.png 12Кб, 1012x75
1012x75
Аноны, не пойму, почему этот код так криво инвертирует биты? Т.е., когда число равно степени двойки, то инвертирует всё вроде правильно, а всё остальное как-то криво. Что я делаю не так?

https://pastebin.com/7j5GaDtF
Аноним 09/10/23 Пнд 15:06:46 2871746 271
image.png 161Кб, 1058x1169
1058x1169
>>2871741
>замена пик 1
В предыдущем посте хуита не нужная стоит в условии цикла инвертирования.
Аноним 09/10/23 Пнд 15:31:04 2871770 272
>>2871741
>>2871746
>Что я делаю не так?
сравниваешь ксор с ненулем, если числа равны ксор дает ноль отсюда и пляши, иначе ты его сравниваешь с интовым литералом, происходят неявные касты, переносы битов вся хурма, нахуй эти танцы нужны?
сильно не вчитывался
Аноним 09/10/23 Пнд 15:35:12 2871779 273
а вообще тебе бы почитать особенности битовой математики твоей архитектуры
там были значительные отличия между цисками и рисками по сдвигам в знаковых
Аноним 09/10/23 Пнд 15:35:53 2871782 274
>>2871770
А, типа, надо сравнивать бит с битом, а у меня получается, что я сравниваю два числа?
Аноним 09/10/23 Пнд 15:39:20 2871788 275
Снимок экрана 2[...].png 1484Кб, 2412x1664
2412x1664
>>2871782
не, побитово сравнивать не получится, можно только числами (битовым набором минимальной адресной ячейки тобишь байтом)
просто ксоришь два числа и в элсе делаешь то что надо если они равны, а в мейн ветке ифа соответсвенно все остальное
Аноним 09/10/23 Пнд 15:45:00 2871799 276
image.png 30Кб, 553x330
553x330
image.png 12Кб, 1119x72
1119x72
>>2871788
Вот, смотри, анон, а это похоже на xor?
Аноним 09/10/23 Пнд 15:48:17 2871805 277
>>2871799
это похоже на битовую маску
миллиард наносекунд назад написал себе макросы для побитовой ебли и больше не парюсь с этим, могу поделиться
Аноним 09/10/23 Пнд 15:49:18 2871806 278
>>2871805
>могу поделиться
Давай!
Аноним 09/10/23 Пнд 15:52:07 2871817 279
Аноним 09/10/23 Пнд 15:53:23 2871823 280
Аноним 11/10/23 Срд 15:26:28 2874699 281
Нужен опытный сишник, плачу 500$. Суть задачи - переписать часть кода с отвязкой от основного кода программы. Телега snap2ch
Аноним 11/10/23 Срд 22:26:23 2875443 282
1111.png 12Кб, 392x234
392x234
Я с глупым вопросом: мне нужно использовать termios.h для проекта в CLion (Win10), cygwin64 установил, проверил что termios.h имеется, однако CLion его не находит. Не работает ни <termios.h>, ни <sys/termios.h>. В чём может быть дело?
Аноним 12/10/23 Чтв 02:39:13 2875631 283
Дедули, я понимаю, при Сталине у вас хуй стоял и все на сишке писали, хочется вернуться в свою молодость. Ну, так пишите для себя и друзей по дому престарелых в качестве хобби, зачем тащить миллиарды уязвимостей в проекты, которыми люди будут пользоваться? Когда уже на международном уровне ваше вредительство запретят?
Аноним 12/10/23 Чтв 04:15:45 2875646 284
>>2875443
в компилере твоей ИДЕ отсутствуют нужные пути до хидеров

>>2875631
у меня и сейчас стоит, будешь?
Аноним 12/10/23 Чтв 07:02:35 2875682 285
>>2875631
Старая народная поговорка.
> Есть два вида людей, кто делает и кто учит.
Та же поговорка под реалии 2023
> Есть два вида людей, кто делает и кто запрещает.
Аноним 12/10/23 Чтв 08:06:24 2875694 286
>>2875631
Назови норм альтернативу Си, я перекачусь.
Аноним 12/10/23 Чтв 09:49:11 2875745 287
>>2875694
Лучше не тревожить этого дебича! У него фетиш на почтенных стариков и нескрипто-макакные языки программирования. Сейчас, если этот дебич возбудится, то мы будем не в силах остановить его эякуляцию, которая выражается в огромных постах, посвящённых почтенным старцам и языку программирования Си.
Аноним 12/10/23 Чтв 11:16:29 2875838 288
>>2875631
О, вот и осеннее обострение как по графику.
Аноним 12/10/23 Чтв 11:58:13 2875910 289
Аноним 12/10/23 Чтв 12:28:05 2875960 290
>>2875910
>си с доп проверками и потерей скорости исполнения из за них
нет спасибо
Аноним 12/10/23 Чтв 14:31:59 2876166 291
Аноним 12/10/23 Чтв 14:32:35 2876168 292
Сдвиги эффективнее обычного умножения/деления?
Аноним 12/10/23 Чтв 14:57:35 2876199 293
>>2876168
быстрее на децималах, а не эффективнее
Аноним 12/10/23 Чтв 17:04:42 2876392 294
>>2876166
Когда будет тред с хотябы сотней перекатов, тогда подумаю. А пока какая-то нонейм хуйня.
Аноним 12/10/23 Чтв 17:40:55 2876433 295
Да это жирнотроль, никакай альтернативы си нет, не было, и не будет по крайней мере в обозримой перспективе. Да и нужно оно.
Аноним 12/10/23 Чтв 17:42:10 2876434 296
>>2876433
Утечки памяти пофиксил, проблемы с налпионтером пофиксил? Что юзаешь вместо божественного cargo?
Аноним 12/10/23 Чтв 18:27:28 2876483 297
>>2876434
да, да, скобки
хуй будешь?
Аноним 12/10/23 Чтв 19:19:43 2876590 298
>>2875694
Чем тебя Python не устраивает?
Аноним 12/10/23 Чтв 20:08:03 2876720 299
>>2876434
Что нигерскоеиговно ты высрал? Ни о чем подобном не слышал.
писать кож гадо уметь да, это тебе не смузи попивать
Аноним 13/10/23 Птн 18:34:45 2877815 300
>>2876434
Но раст тормоз по сравнению с си и памяти нужно на порядки больше, как я понял для выведения типов.

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

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

Тсс, компилер для си, очен быстрый и у него даже есть: tcc -run your-prog.c. Когда этот этап быстр, то тест драйвен девелопмент быстрее.
Аноним 13/10/23 Птн 18:35:50 2877820 301
>>2877815
>Но раст тормоз по сравнению с си и памяти нужно на порядки больше
Компилятор я имел ввиду.
Аноним 13/10/23 Птн 18:50:52 2877850 302
>>2877815
О, ну всё, переписываю весь свой код на сишку, в ней смартпоинтеры придумали.
Аноним 13/10/23 Птн 18:55:23 2877857 303
>>2877815
>char *buf autofree = malloc (10);
>Не нужно free (buf), он освободится при выходе из видимости.
Не работает нихуя, пиздабол
https://godbolt.org/z/q4cM3GfWc
Аноним 13/10/23 Птн 19:53:59 2877926 304
>>2877815
>char *buf autofree = malloc (10);
ммм тут >>2877857 говорят что хуйня
а я подумал зачем эти штуки если можно освободить в деструкторе?
Аноним 13/10/23 Птн 20:05:08 2877935 305
>>2877926
>деструкторе
А что это?
Аноним 13/10/23 Птн 20:07:22 2877937 306
>>2877935
функция-прослойка вызывающаяся после завершения мейна и перед передачей управления ос
Аноним 13/10/23 Птн 20:10:41 2877938 307
>>2877937
Звучит слишком удобно чтобы я тащил это говно в мой любимый, божественный, девственно-чистый силанг.
Аноним 13/10/23 Птн 20:12:27 2877940 308
>>2877938
еще жирнее набрось, иначе я не поведусь
Аноним 13/10/23 Птн 20:13:44 2877941 309
Аноним 13/10/23 Птн 20:15:56 2877944 310
>>2877857
Там указатель на указатель
void free_memory(char ptr) { free (*ptr); };

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

Насчет раст, может я соврал, посмотрел видео про тесты, вроде бы быстро.
Аноним 13/10/23 Птн 20:17:28 2877946 311
>>2877944
Две звездочки после char, RTFM.
Аноним 13/10/23 Птн 20:20:13 2877947 312
>>2877946
звезды в шапке

>>2877944
у раста доп проверки, это априори не может быть так же быстро
Аноним 13/10/23 Птн 20:31:50 2877950 313
>>2876433
Уже давно есть, Zig называется.
Аноним 13/10/23 Птн 23:02:24 2878168 314
>>2877815
Раст не намного тормознее сишки. Типы по бОльшей части выводятся при компайл тайме, по типу шаблонов в плюсах.
Аноним 14/10/23 Суб 02:26:25 2878293 315
Аноним 14/10/23 Суб 05:59:32 2878306 316
>>2878168
>Пайтон не намного тормознее сишки. Типы по бОльшей части выводятся при компайл тайме, по типу шаблонов в плюсах.
Аноним 14/10/23 Суб 07:54:06 2878334 317
>>2878306
Большего бреда я давно не слышал, лол.
Аноним 14/10/23 Суб 07:59:47 2878335 318
Аноним 14/10/23 Суб 08:44:47 2878344 319
>>2878335
Сыглы. Для того, чтобы сравнивать компилируемый и интерпретируемый языки, надо быть гением.
Аноним 14/10/23 Суб 09:07:56 2878350 320
>>2878344
все это частные случаи трансляции, но такое макакам не понять
Аноним 14/10/23 Суб 15:01:21 2878552 321
>>2878293
Не.

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

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

Так у меня и не сложилось мнение по растам и проч. Было бы круто, если бы яп мог выполнятся или быстро компилиться, у него был бы репл, как в интер. яп. Но если хочется, то медленно с кучей проверок типов и т.д.
Аноним 14/10/23 Суб 16:00:16 2878601 322
>>2840288
Не надо экономить строки, анон. Компактность кода достигается за счет грамотной архитектуры вместо монолитных процедур. А вот это вот несколько стейтментов в одну строку нахуй надо. Уноси.
Аноним 14/10/23 Суб 17:37:57 2878673 323
Ня.
Аноним 14/10/23 Суб 17:44:41 2878680 324
splint.png 53Кб, 663x737
663x737
>>2878673
Картинка не прицепилась. splint, линтер для си, детектит нуллпоинтер.
Аноним 14/10/23 Суб 17:51:22 2878692 325
Скажется tsoding-у спасибо за популяризацию емакса и иосевки.
Аноним 14/10/23 Суб 18:04:04 2878704 326
>>2878680
>>2878673
и чо?
подозреваю что пока тебе очередная мокрописька не высрет стену текста ты и не подумаешь врапперы сделать
Аноним 14/10/23 Суб 18:05:18 2878706 327
Аноним 14/10/23 Суб 18:18:35 2878720 328
Аноним 14/10/23 Суб 18:50:58 2878790 329
>>2878706
И зачем ждать жоп время компиляции каждый раз если splint находит эти ошибки и его можно зпустить 1 раз? Ну, может он не все находит, я не знаю. Но такое разделение - быстрый компилятор и чекер отдельно, позволяет писать скрипты на си, tcc -run, что на раст из-за тормознутости компилятора не получится.

>>2878704
Зачем это помнить если есть линтер? Забуду запутстиь лентер? Так что угодно можно забыть. Запускать же линтер каждый раз, принуждением, это добавляет время для сборки, это мое время.
Аноним 14/10/23 Суб 18:58:43 2878810 330
>>2878790
>Зачем это помнить если есть линтер? Забуду запутстиь лентер? Так что угодно можно забыть. Запускать же линтер каждый раз, принуждением, это добавляет время для сборки, это мое время.
ты сам то понял чо ты высрал? таблетки прими подробнее подкатом
>Зачем это помнить
помнить что? как писать код?
>Забуду запутстиь лентер?
главное таблетки не забудь
>Так что угодно можно забыть.
системы сборки
>Запускать же линтер каждый раз, принуждением, это добавляет время для сборки, это мое время.
а читать стену текста не твое время ясно понятно
Аноним 14/10/23 Суб 19:29:37 2878896 331
>>2878810
Как насчет разобраться о чем идет речь. Т.е. упрек в том, что я си не знаю и все ошибки, по твоему, от не знания? Ну это глупо.

Не нужно запускать линтер каждый раз.
Аноним 14/10/23 Суб 21:12:24 2879085 332
>>2878896
про какие ошибки идет речь то? в линтере ворнинг по поводу того что ты не юзаешь реутрнинг валуес от сисколов, не знаешь выхлоп своих действий а потому потенциально делаешь влепую и возможен нулпоинтер
но ты бы мог проконтролировать выхлопы врапперами как это обычно и делают, ну или хотя бы ифами
так что я вообще тебя не понимаю, чо ты несешь, при чем тут что то забыть или не знание языка если это вообще про саму суть коденга

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

ты вроде паришься по поводу скорости компила, но как я вроде бы тебе ранее уже говорил это проблема архитектуры твоего проекта а не компилера или языка
Аноним 14/10/23 Суб 22:25:38 2879161 333
Кста, кроме splint, есть gcc -fanalyzer.

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

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

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

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

Кроме tcc -run, это влияет так-же на то, как ты пишешь тесты.
Аноним 14/10/23 Суб 22:38:17 2879192 334
>>2879161
>не являются заменой си
базанул
Аноним 14/10/23 Суб 22:59:48 2879224 335
>>2879161
>Зависит от структуры программы, но скопилируй 10 раз hello world на раст и на си, сравни время.

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

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

А вот еще, чтобы раст тебе код проверил, ничего запускать не надо, иде тебе сама подчеркнет где ты объебался. Так что аргумент типа бульк среньк медленно компилится аж в 2 раза медленнее можно засунуть себе в зад.
Где медленно компилится - так это в тайпскрипте ебаном, а ведь это интерпретируемый язык, лол. Я когда фронт пилил, просто заебывался ждать, пока он проект перекомпилит и тесты прогонит, реально до 10с доходило.
Аноним 14/10/23 Суб 23:04:00 2879231 336
>>2879224
>я уже 100 раз напишу
а мог бы просто два джипега сложить в скратче и пойти ебаца в жёппы
Аноним 15/10/23 Вск 06:50:50 2879367 337
>>2879224
>Пока ты будешь Си, я уже 100 раз напишу ...
Питон в другом треде. В загон, скот.
Аноним 15/10/23 Вск 07:26:49 2879370 338
>>2879367
О, диду нечем крыть.
Аноним 15/10/23 Вск 07:57:35 2879373 339
>>2879370
Питонахрюк уже даже не отроицает.
Аноним 15/10/23 Вск 08:17:28 2879376 340
>>2879373
Зачем мне что-то отвечать душевнобольному, который у себя в черепной коробке что-то надумал, и вместо какого-либо мало-мальски конструктивного ответа высирает только оскорбления? Мог бы тебя нахуй послать, но я же цивилизованный человек, а не животное.
Аноним 15/10/23 Вск 08:27:54 2879377 341
>>2879224
>чтобы раст тебе код проверил
Или не проверил лол.
Аноним 15/10/23 Вск 08:52:25 2879383 342
>>2879376
кекнул с этих попыток
срыгни с треда имбецил
Аноним 15/10/23 Вск 09:10:15 2879388 343
Аноним 15/10/23 Вск 10:10:39 2879406 344
>>2879388
Да ладно, мне похуй в принципе, пусть лает. Я не то чтобы много, но достаточно проектов на расте, включая пару веб-серверов https://crates.io/crates/axum охуеннен кстати, а после того, как я чутка подразобрался в его кишках - так вообще познал дзен раста так сказать, чтобы речь вести тут. В принципе новые проектики, если возможно, стараюсь на расте писать, очень уж язык нравится системой типов и гарантиями безопасности.
Кстати, непонятно, чё это он так питон не любит? Охуенный язык так-то.
Аноним 15/10/23 Вск 10:17:16 2879410 345
>>2879388
>>2879406
спешите видеть самоподдув растопетуха
Аноним 15/10/23 Вск 10:20:48 2879413 346
>>2879410
В твоей пустой голове вечно дует.
Аноним 15/10/23 Вск 10:26:37 2879417 347
>>2879413
рот закрой землю видно
Аноним 15/10/23 Вск 10:39:49 2879420 348
>>2879413
>>2879417
бля, может вы поссоритесь поссоритесь, а потом поебетесь уже наконец? Сил нет уже эту хуйню читать
Аноним 15/10/23 Вск 10:53:15 2879432 349
>>2879420
возьми таймаут на недельку, пока тут растоклоун срет нормального общения не будет
Аноним 15/10/23 Вск 11:33:17 2879445 350
>>2879420
Хз, я натурал, а первым оскорблять кто-то из ваших начал. А может вам сперва стоит искоренить аггресивных геев-сишников из своего треда?
Аноним 15/10/23 Вск 11:48:38 2879459 351
>>2879445
не верти жопой, растопетух, вот тут >>2875631 ты и начал, тебе и уябывать из треда сигоспод
Аноним 15/10/23 Вск 12:00:00 2879471 352
>>2879459
Согласись уже, что растоуебок тебя заовнил, так как ни одного контраргумента от тебя не было да и иди отдохни уже
Аноним 15/10/23 Вск 12:06:00 2879473 353
>>2879471
лишь в твоих фантазиях
в очередной раз необучаемая макака вбросила говна, в очередной раз на нее поссали, теперь она тут нутье разводит
ничего не меняется
Аноним 15/10/23 Вск 12:41:35 2879514 354
>>2879473
Спок, обход санитаров скоро. Угомонись, бешеный пёс.
Аноним 15/10/23 Вск 12:48:32 2879522 355
>>2879473
>>2879514
сап, заебал уже, весь тред провонял вкусом кала из твоего зловонного рыла
Аноним 15/10/23 Вск 12:59:11 2879539 356
Ебать у вас весело
мимо жабобоярин
Аноним 15/10/23 Вск 17:06:34 2879917 357
Какой смысл сравнивать Си и Раст, если Сишка - это топорность, примитивизм и простота, а Раст уже стал аналогом плюсов по сложности и раздутости?
Аноним 15/10/23 Вск 17:25:42 2879948 358
>>2879917
он и был как плюсы, но макака никак не угомонится и забрасывает тред бесполезным форсом
по сабжу смысла сравнивать нет, си это макросы для ассемблера, если будет что то лучше в треде дадут знать
Аноним 16/10/23 Пнд 09:10:45 2880606 359
>>2879917
>а Раст уже стал аналогом плюсов по сложности и раздутости?
Не, если послушать растопетуха, то растопараша - это нераздутый простой язык, где по мановению руки решены все проблемы с мемори багами, некая достигнутая недостижимая серебрянная пуля.
Аноним 16/10/23 Пнд 09:39:17 2880625 360
image.png 153Кб, 926x1179
926x1179
image.png 79Кб, 643x719
643x719
>>2880606
>это нераздутый простой язык
Ну пускай докажет это! Пикрил 1 это пример того, как, примерно, выглядит vector из плюсов, и операции над ним pushback и popback, на языке Си, который решает рекурсивно задачку о порождении подмножеств. Собственно, пикрилл 2 это тот же пример, который написан на плюсах. Теперь, если растоман хочет доказать нам, что раст это ультракрутяк, то пускай напишет тот же пример на нём.
Аноним 16/10/23 Пнд 10:02:57 2880649 361
Снимок экрана 2[...].png 47Кб, 990x102
990x102
>>2880625
ну тут триггер для АБ шиза
мимо хейтер параллельных вычислений
Аноним 16/10/23 Пнд 11:04:25 2880751 362
>>2880625
У растопетуха ряя ансейф от этого случится и конпелятор будет сыпать красным до тех пор пока жопа не сколапсирует.
Аноним 16/10/23 Пнд 11:36:49 2880807 363
Как отличить нужный язык от ненужного.
- У нужного языка есть IDE, у самого нужного их несколько.
- У ненужного языка есть блокнотик и "пук-среньк-нинужно".
Аноним 16/10/23 Пнд 12:08:07 2880837 364
>>2880649
>>2880751
Та я уже сам узнал, что растоман, на самом деле, обычный растопетуччило, которое любит много кудахтать. Когда мы увидим его решение, я ему это докажу. Осталось только, чтобы он принял вызов.
Аноним 16/10/23 Пнд 12:27:41 2880863 365
>>2880807
не знал что растопетухи в блокнотик пишут, чо реально нет идешки?
Аноним 16/10/23 Пнд 12:46:31 2880905 366
2023-10-16-1223[...].png 30Кб, 452x531
452x531
>>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 выделяет память.

Но я так понял мало кто юзает линтер. Не знаю насколько это близко к раст чекеру.
Аноним 16/10/23 Пнд 13:28:19 2880952 367
>>2880905
представляю как ты тикеты закрываешь если на задачу навелосипедить вектор высрал это
зато в 100 раз быстрее да?
Аноним 16/10/23 Пнд 13:49:49 2880975 368
>>2880905
Челибос, почему ты не в курсе про метки?
Аноним 16/10/23 Пнд 14:00:34 2880990 369
rust-alloc.png 62Кб, 903x497
903x497
shrink.png 109Кб, 1041x740
1041x740
truncate.png 96Кб, 1034x682
1034x682
>>2880625
>Ну пускай докажет это!
Лол, какие-то детские выебоны. Типа а давай спорим на щелбан шо ты не дурак! Никто с нуля эти вектора не пишет, есть готовые библиотеки линейной алгебры. Есть миллион способов сделать это в rust, там есть небезопасный режим, в котором можно резервировать и освобождать память как вздумается. Там есть методы shrink_to(), shrink_to_fit() для массивов, есть метод truncate(), есть макросы, есть хитрожопые типы... Короче если нужна библиотека линейной алгебры, можешь посмотреть --> https://nalgebra.org/

мимо-проходил-раст-программер
Аноним 16/10/23 Пнд 14:56:22 2881055 370
>>2880990
Ха! Слился? Вот я дед для каждой своей олимпиадной программы пишу реализацию вектора с нуля! И смузи не пробовал никогда! Ууу эти хипстеры, пиздуйте нахуй из треда!
Аноним 16/10/23 Пнд 15:03:54 2881061 371
>никто велосипеды не пишет
Правильно, поэтому в маленький проект тянется огромная либа с кучей зависимойстей как в npm.
Аноним 16/10/23 Пнд 15:05:36 2881063 372
>>2880975
goto что-ли? Ну это же пример бороу чекинга, написал что будет если в конце заменить free (numline->buf) на free (buf).

Тред какая-то диверсия, уровень культуры, внимания к тому что пишут, ниже некуда,
Аноним 16/10/23 Пнд 15:06:16 2881066 373
Только дочитал ветку срача и почти ничего не понял. Поясните нюфаку что такое линтер? Знаю только про линкер немного.
Аноним 16/10/23 Пнд 15:11:44 2881080 374
>>2881063
>Тред какая-то диверсия, уровень культуры, внимания к тому что пишут, ниже некуда,
Растопитухи понабежали ажтрисет, второй день валерьянку пью
Аноним 16/10/23 Пнд 15:36:54 2881141 375
растоклоуны не осилили реализовать вектор и ударились в словоблудие
ничего нового
папущины
Аноним 16/10/23 Пнд 15:42:14 2881152 376
А поясните, почему на расте нельзя написать вектор? Это из-за особенностей компилятора или самого языка?
Аноним 16/10/23 Пнд 15:49:26 2881169 377
image.png 19Кб, 494x304
494x304
>>2880990
>есть готовые библиотеки линейной алгебры
Прошу написать структуру (вектор в плюсах), которая очень похожа на обычный динамический массив, но со своими некоторыми "приколами", а этот растопетуччило говорит про линейную алгебру!! Представили ебало этого погромизда, который пытается в системное программирование, не умея гуглить, и даже не имея любопытства, чтобы начать гуглить?

А ответ прост - раст это такое же перегруженное говнище, как и плюсы, которое ни в коем случае нельзя юзать для системных фишек!!! Но можно и удобно юзать, если надо сделать красивое манипулирование красивыми кнопочками! Растопетуччилло, чем отличается выделенная часть на пикрилле от того, что я привёл на плюсах?
Аноним 16/10/23 Пнд 18:01:03 2881333 378
>>2881169
полагаю он подумал что векторы из матеши надо написать, однако все равно мы не дождались никаих потугов от перекладываля джейсончиков
Аноним 16/10/23 Пнд 18:22:27 2881384 379
>>2881169
В чем проблема вектор-то написать? Один только вопрос: зачем? Ты так выебываешься, будто это невьебенно сакральное знание, я ору.
Лови кость: https://pastebin.com/NdYvffGD
Аноним 16/10/23 Пнд 18:25:15 2881389 380
>>2881384
Кста, накидал эту хуйню за полчасика после ужина. Уже смакую как этот клоун будет петушиться.
Аноним 16/10/23 Пнд 18:39:09 2881419 381
Аноним 16/10/23 Пнд 18:44:52 2881425 382
16973394874580.png 1700Кб, 1243x2133
1243x2133
>вектор
>почасика
Аноним 16/10/23 Пнд 18:50:41 2881436 383
>>2881384
>В чем проблема вектор-то написать? Один только вопрос: зачем? Ты так выебываешься, будто это невьебенно сакральное знание, я ору.
>https://pastebin.com/NdYvffGD
Ну, короче, что и требовалось доказать, куча какой-то ооп параши и свистоперделок.
Аноним 16/10/23 Пнд 19:11:42 2881465 384
>>2881384
Пиздец!! И эта простыня решает такую простую задачку, как нахождение подмножеств? Чел, во-первых, ты сравни объём кода, во-вторых, он ещё и по скорости проигрывает, просто потому что я тебе доказал предыдущим постом, что раст это перегруженное говнище. И теперь, включи голову и подумай за что ты топишь:

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

А теперь взвесь эти два аргумента, и съеби с треда, поняв, что у тебя тупо нет никаких аргументов против Си.
Аноним 16/10/23 Пнд 19:30:09 2881487 385
>https://pastebin.com/NdYvffGD
А в этой растопараше есть понятие null pointer constant? Если произойдёт какая-то ошибка, что вернёт std::alloc::alloc?
Аноним 16/10/23 Пнд 19:53:20 2881522 386
>>2881419
На низком уровне с рав пойнтерами только в ансейфе можно работать, потому что у компилятора нет способов убедиться, что у тебя в них лежит. Это даже имбейилк ясно. Обычно, если нужна работа с указателяии, пишут в ансейфе, обкладывают тестами и выставляют наружу сейф интерфейс.

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

>2) За то что понижает скорость
На какой строке понижается скорость, можешь пояснить?

>>2881487
Да, std::alloc::null
В случае ошибки алллокауии вернется как раз null
Аноним 16/10/23 Пнд 20:08:13 2881540 387
>>2881522
Про "ряя ансейф" это была ирония, я думаю, все помнят историю с Коляном.
>если нужна работа с указателяии, пишут в ансейфе
Ансейф параша это про разименовывание raw указателя и вызов ансейф говна.
>>2881522
>довольно читаемо
Гораздо менее читаемо, чем листинг сипараши выше.
>2 геттера + пару хелперов
Нахуя это все было делать вообще?
Аноним 16/10/23 Пнд 20:15:58 2881548 388
>>2881540
Геттеры - чтобы юзер не мог сам шариться по структуре и менять приватные поля. Остальные приватные - ну мне так удобнее.
Аноним 16/10/23 Пнд 20:18:36 2881551 389
>>2881548
>юзер не мог сам шариться по структуре и менять приватные поля. Остальные приватные - ну мне так удобнее.
Ладно, что ты в нашем треде забыл любитель приватных полей?
Аноним 16/10/23 Пнд 20:22:57 2881561 390
>>2881551
Не вижу логической связи.
Аноним 16/10/23 Пнд 20:24:18 2881568 391
>>2881540
>Про "ряя ансейф" это была ирония, я думаю, все помнят историю с Коляном.
Бля, постоянно эта хуйня на языке вертится, но откуда пошло и что за Колян - не знаю)
Аноним 16/10/23 Пнд 20:32:57 2881587 392
>>2881561
Почему-то не удивлён.
Аноним 17/10/23 Втр 02:03:45 2881849 393
grid0384N.webp 102Кб, 384x576
384x576
Смотрел давно уже видео и там чел юзал какой-то вебсервис и просто вбивал функцию С и printf и сразу видел вывод, как среда для запуска сниппетов, без хедеров без мейна, просто быстро потестить.
Не могу найти, но есть же такое?
Аноним 17/10/23 Втр 08:41:20 2881919 394
Аноним 17/10/23 Втр 08:56:52 2881931 395
>>2881522
> с рав пойнтерами
Сьебис в синагогу.
Аноним 17/10/23 Втр 15:16:14 2882351 396
Аноним 17/10/23 Втр 15:17:06 2882354 397
Аноним 17/10/23 Втр 17:07:55 2882499 398
image.png 71Кб, 930x848
930x848
>>2881919
Что они имеют ввиду под AI tutor? Я не нашел никакого AI tutor у них.
Аноним 18/10/23 Срд 04:33:28 2883165 399
Аноним 18/10/23 Срд 05:05:30 2883171 400
>>2883165
>Ctrl+F
>Visual Studio
>"No matches were found"
Переделывай.
Аноним 18/10/23 Срд 13:39:21 2883497 401
Как из Сишной программы на Линуксе можно читать COM порт? Философия "Все есть файл" не очень помогает и обычными средствами читается как-то криво.
Аноним 18/10/23 Срд 13:42:49 2883504 402
>>2883497
Его скорее всего настроить для начала надо, типо как через stty это деланшь, только набором библиотечных функций. Т.е. у тебя там не только read() будет вызываться, но и ещё какой-нибудь ioctl() с нужными параметрами для ком порта.
Аноним 18/10/23 Срд 14:02:31 2883545 403
>>2883504
Ага, уже посмотрел пару статей в интернете. Ну и пиздос, конечно.
Аноним 18/10/23 Срд 14:27:20 2883593 404
>>2883545
Обычное дело для работы с периферией. Скорее всего для работы с ком портом уже давно есть удобные либы, у меня так недавно с GPIO было, достаточно заинклудить gpiod.h и там уже все готовое для инициализации и работы есть. С uart вообще проблем быть не должно, потому что он слишком древний.
Аноним 18/10/23 Срд 17:26:32 2883818 405
Аноним 18/10/23 Срд 18:19:34 2883869 406
>>2883818
Ахуеть, то есть мы буквально открываем дейвайс на линуксе и пишем в него какие-то байты? Выглядит интересно. А на винде это как программируется, там ведь не всё файл, как в линуксе.
мимо
Аноним 18/10/23 Срд 19:04:15 2883933 407
>>2883869
>мы буквально
буквально файл
что кстати очень удобно, можно $ ls -a /dev прочекать все устройства вотличие от
обмен инфой между процессами посредством сокетов так же буквально пишем в файл и читаем из него же
а вот про винду не знаю, анончики подскажу, я лет 15 уже на винде не был
Аноним 18/10/23 Срд 20:11:21 2884041 408
>>2883818
Да, спасибо, еще раз.
Я уже находил эту статью и сейчас попробую по уму сделать.
Аноним 18/10/23 Срд 20:52:58 2884081 409
image.png 23Кб, 1111x152
1111x152
image.png 17Кб, 1100x72
1100x72
image.png 37Кб, 703x193
703x193
>>2883818
Я, мб, дегенерат, но откуда эта функция взялась? Никак не могу нагуглить.
Аноним 18/10/23 Срд 21:00:31 2884086 410
>>2884081
Возможно какая-то user defined, которую он не выложил.
Аноним 18/10/23 Срд 22:38:26 2884159 411
>>2884081
>лгбт раскраска
>откуда эта функция взялась
>Я, мб, дегенерат
Бинго, зумер-дегенерат.
Аноним 18/10/23 Срд 22:42:41 2884164 412
>>2884159
Ты, наверное, из тех кто и розовый цвет пидорским считает, верно?
Аноним 18/10/23 Срд 23:16:40 2884184 413
>>2884159
>лгбт раскраска
Это буквально дефолтный цвет gcc.
Аноним 19/10/23 Чтв 07:47:51 2884325 414
16114289648180.mp4 608Кб, 434x360, 00:00:13
434x360
Аноним 19/10/23 Чтв 08:28:40 2884344 415
16872905380150.mp4 1484Кб, 1106x1080, 00:00:03
1106x1080
Аноним 19/10/23 Чтв 13:02:48 2884674 416
>>2884081
Скорее всего это макрос какой-то для логирования.
Аноним 20/10/23 Птн 13:17:45 2886495 417
>>2884184
да он не про гцц же а про подсветку синтаксиса наверняка
Аноним 20/10/23 Птн 19:36:20 2887330 418
>>2886495
Возможно, даже как-то не обратил внимания на подсветку синтаксиса, а вот гцц явно выделяется.
Крайне глупый вопрос Аноним 21/10/23 Суб 09:59:57 2888247 419
Пусть есть две программы:
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, но и к этому у меня несколько вопросов.






Аноним 21/10/23 Суб 10:59:09 2888317 420
>>2888247
мой компилятор не пропустит второй вариант по причине нон статик вар ин статик аррэй
твой видимо волшебный
Аноним 21/10/23 Суб 11:33:12 2888338 421
>>2888317
gcc спокойно пропустил. clang возмущался.
Аноним 21/10/23 Суб 11:48:22 2888345 422
image.png 82Кб, 986x366
986x366
image.png 135Кб, 1086x622
1086x622
image.png 151Кб, 928x927
928x927
image.png 132Кб, 1185x877
1185x877
>>2888247
Ка бэ, не особо то и глупый вопрос!
Пикрилл 1 это дизассембл первой программы. Тут компилятор даже не ввёл массив, потому что он не задействован в проге. Если в твою прогу добавить цикл заполнения массива единицей, то он выглядит как пикрил 2, т.е. тут уже массив задействован.
Приколы начинаются, когда дизассемблишь вторую программу! Тут какие-то "финты ушами", после того как scanf вернула управление (пикрил 3-4). Обрати внимание, сколько регистров задействовано! Компилятор gcc.
Аноним 21/10/23 Суб 12:00:17 2888356 423
image.png 122Кб, 1168x500
1168x500
image.png 98Кб, 1185x518
1185x518
>>2888345
Продолжение!
Пикрил 1 это, если использовать malloc после scanf. Пикрил 2 это реализация malloc на асме для линукса, чтобы сравнить объём кода, твоей проги 2 и проги, которая использует malloc. И мне кажется, что код с malloc гораздо компактнее и яснее.
Аноним 21/10/23 Суб 14:08:27 2888586 424
>>2888247
>то во второй как?
Во время исполнения выделяет на стеке.
>то заменяет всё на строчку с malloc
>malloc
Нет, см дизасм с комментами.

https://pastebin.com/P2WFRUYU
Аноним 21/10/23 Суб 14:14:03 2888601 425
Аноним 21/10/23 Суб 14:55:03 2888668 426
>>2888601
Дизассембл программ на Си.
Аноним 21/10/23 Суб 14:56:23 2888669 427
>>2888586
>Во время исполнения выделяет на стеке.
Ааа, он на стеке, получается, выделяет память.
Аноним 21/10/23 Суб 14:59:17 2888681 428
>>2888586
Это получается, что, если во второй проге в сканф загнать значение большее значения стека (допустим, что стек 8 мегабайт), то прога упадёт?
Аноним 21/10/23 Суб 15:08:10 2888691 429
Да, прога падает! Чёт у меня стек маленький, аноны!!! Всего 2 мегабайта в эрегированном состоянии!!! Есть рабочие способы увеличения стека? Или размер стека не важен?
Аноним 21/10/23 Суб 15:17:55 2888713 430
>>2888691
У тебя средний стек, не волнуйся, а пиздаболам с двача не верь, у кого там по 8МБ.
Аноним 21/10/23 Суб 15:23:24 2888731 431
У меня только что стек оверфлоу произошел от вашего юмора.
Аноним 21/10/23 Суб 16:17:08 2888855 432
Почему тогда не могли придумать операционную систему, которая автоматически останавливала бы программу, если место в стеке кончается, и сигнализировала бы администратору поставить больше памяти в сервер, после чего продолжала бы работу? Можно было бы писать более гибкие программы.
Аноним 21/10/23 Суб 16:52:21 2888900 433
Аноним 21/10/23 Суб 18:39:12 2889045 434
Аноним 21/10/23 Суб 18:55:53 2889063 435
>>2889045
Кринж это когда спрашивают, что такое дизассембл.
Аноним 21/10/23 Суб 19:05:54 2889070 436
Аноним 21/10/23 Суб 19:20:35 2889087 437
Аноним 21/10/23 Суб 19:30:30 2889097 438
>>2889087
>-Что за дизасемблер на пике?
>-Дизассембл программ на Си. Кринж это когда спрашивают, что такое дизассембл
>-Ты ёбнутый?
>-Не рвись.
Нет сырья и кадров.
Аноним 21/10/23 Суб 20:07:25 2889150 439
16872616647830.mp4 2504Кб, 576x1024, 00:00:16
576x1024
>>2889097
проебали все полимеры
Аноним 21/10/23 Суб 20:36:46 2889194 440
image.png 19Кб, 496x215
496x215
image.png 20Кб, 525x242
525x242
image.png 18Кб, 417x219
417x219
image.png 25Кб, 457x258
457x258
>>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) уже сам написан на ассемблере, а это значит, что данную программу не имеет смысла дизассемблить.

зумеры...
Аноним 22/10/23 Вск 01:01:42 2889397 441
>>2846510
Хз, книги его хорошо выстроены. Там есть все, чтобы с нулика подняться.
Аноним 22/10/23 Вск 10:11:27 2889502 442
>>2889397
Ну, он даёт направление, а дальше сам. Например, асм по его книге выучить невозможно, потому что у него банально не показано то, как выводить на экран результат программы. В общем, если его книги совмещать с другими, но при этом придерживаться того порядка, в котором подаётся материал в его книгах, то с "нулика" подняться можно.
Аноним 22/10/23 Вск 12:11:15 2889599 443
>>2883933
> буквально файл
Люди, которые бездумно повторяют восхваления этого «концептуального прорыва», забывают уточнить контекст. В шестидесятые-семидесятые годы какие, собственно, устройства подключались к большим и малым ЭВМ? Устройства хранения данных, каналы связи, терминалы. А какая была альтернатива? «Загрузите по адресу ABCD код команды, дождитесь установки статусного регистра устройства, получите статус операции по другому адресу, в течение 500 мкс отправьте данные для записи, если не успеете — состояние буфера не определено, сбрасывайте и читайте заново и так далее». Ну, или библиотека, в которой кто-то делает это всё за вас, и остаётся только функции вызывать в нужном порядке (который тоже требует понимания внутренностей). На этом фоне «ну типа пиши данные как в файл» было волшебной абстракцией.

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

Представить программам таким образом устройства, которые логично было представлять в виде потока символов, было шагом вперёд. Устройства, имеющие сложное состояние, настраиваемое кучей способов, в файловую абстракцию не запихиваются. Для сети, например, взяли концепцию сокетов, а не какое-нибудь /dev/internet/tcp/192/168/5/5/666. Впрочем, были и другие абстракции вроде
https://en.wikipedia.org/wiki/X/Open_Transport_Interface
Аноним 23/10/23 Пнд 12:15:17 2890827 446
>>2889717
> С пейджера читаешь? Что-то мне подсказывает, что длинных постов ты и не видал.
Ты просто растекся мыслью без повода, а вывода никакого не привёл. Спрашивается, нахуя?
Аноним 23/10/23 Пнд 14:27:51 2891015 447
>>2889717
>Устройства, имеющие сложное состояние, настраиваемое кучей способов, в файловую абстракцию не запихиваются.
какой же поток хуйни от хабродебила я ебал это комментить
Аноним 25/10/23 Срд 00:07:16 2893207 448
есть у вас package manager какой-нибудь? где либы искать?
Аноним 25/10/23 Срд 01:20:21 2893266 449
>>2893207
Тебе с такими вопросами прямиком в пориджную.
Аноним 25/10/23 Срд 09:32:47 2893369 450
>>2893207
Диды либы не ищут, диды для каждого проекта сами реализуют примитивы типа векторов с нуля и гордятся этим.
Аноним 25/10/23 Срд 10:00:28 2893379 451
>>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, где сообщество может предложить вам конкретные рекомендации по библиотекам, основываясь на вашей задаче или потребностях.

Общий совет: перед установкой или использованием библиотеки, проведите некоторое исследование, чтобы убедиться в ее актуальности, надежности и соответствии вашим требованиям. Ознакомьтесь с документацией и оцените качество кода и отзывы сообщества перед тем, как интегрировать новые библиотеки в свой проект.
Аноним 25/10/23 Срд 10:01:54 2893380 452
>>2893369
У скриптомакак ни пичот! Повторяю! ни пичот!!!
Аноним 25/10/23 Срд 11:57:12 2893555 453
>>2889717
> Представить программам таким образом устройства, которые логично было представлять в виде потока символов, было шагом вперёд.
Диск никак не поток символов, он набор блоков с квазипроизвольным доступом. Нахуя его делать файлом? Томпсон головного мозга.
Аноним 25/10/23 Срд 16:02:15 2894098 454
>>2893379
ну и говнище...
ладно я уже нашел Conan какой-то посмотрим чё там
Аноним 25/10/23 Срд 17:28:54 2894272 455
Аноним 25/10/23 Срд 17:57:03 2894310 456
image.png 43Кб, 710x451
710x451
Аноны, головоломка: как мне в этом коде запомнить подмассив с наибольшей суммой?
https://pastebin.com/xaaVT3St
Аноним 25/10/23 Срд 20:35:44 2894446 457
>>2894310
А для чего у тебя указатель объявлен?
Аноним 25/10/23 Срд 21:46:14 2894510 458
>>2894446
Чтобы сохранить подмассив.
Аноним 25/10/23 Срд 22:02:03 2894529 459
Аноним 25/10/23 Срд 22:17:42 2894543 460
>>2894529
Да, этот вариант подходит.
Аноним 26/10/23 Чтв 09:16:28 2895050 461
Какой си лучше учить c89 c95 c1488? Или тот си который компилятор поддерживает типа gnu c, msvc c, hui pizda c?
Аноним 26/10/23 Чтв 09:53:59 2895074 462
Аноним 26/10/23 Чтв 15:29:54 2895456 463
Аноним 26/10/23 Чтв 19:01:58 2895689 464
>>2895456
По моему он тролит.
Аноним 26/10/23 Чтв 19:15:43 2895724 465
>>2895050
Учи последнюю версию и знай c89, чтобы максимально портируемое ПО под максимальное количество архитектур писать.
С отдельными диалектами и особенностями компилятора в процессе работы разберешься..но лучше на диалектах не писать
Аноним 27/10/23 Птн 00:46:23 2896025 466
Анончики, привет.

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

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

gcc main.c functions.c global.c

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

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

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

Совсем неправильно делаю или надо как Вы сначала скомпилировать объектные файлы, а уже потом их слинковать в один исполняемый файл?
Аноним 27/10/23 Птн 02:33:46 2896057 468
>>2835215

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

gcc main.c functions.c global.c

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

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

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

Совсем неправильно делаю или надо как Вы сначала скомпилировать объектные файлы, а уже потом их слинковать в один исполняемый файл?
Аноним 27/10/23 Птн 16:27:25 2896700 469
>>2896025
цел глав(цел аргч, симв @@аргв)
Аноним 27/10/23 Птн 17:40:29 2896794 470
>>2896700
и нахуй ты мне заголовок main скинул, сволочь, смешно думаешь? Ты вообще не вчитывался вопрос видимо
Аноним 28/10/23 Суб 17:36:45 2897856 471
>>2896056
>>2896057
у тебя теже этапы компила в объекты и линковка проходят под капотом, конечно лучше контролировать данный процесс
ведь не обязательно кажый раз рекомпилить глобалы пральна? поменялось чота в функциях - ты рекомпилишь все файлы, я рекомпилю только объектник функций
как проекты станут больше хеловорлдов разница станет ощутимой
Аноним 28/10/23 Суб 17:38:02 2897860 472
>>2896794
побитово прочитай ввод и распарси по табличке
нейросети и языки программирования Аноним 29/10/23 Вск 11:46:50 2898798 473
Если C/C++ компилируются в то, что потом работает непосредственно на самом процессоре, логично предположить, что скорость работы на C/C++ будет значительно превосходить питон, но почему тогда разные исследования по искусственному интеллекту через нейросети опираются на питон и его бибмотеки?
Ведь обход какого-то крайне огромного графа(хоть в ширину, хоть в глубину) будет быстрее у C/C++, ведь многопоточность на си более настоящая, чем у питона.



Меня вообще смущает, что питон как-то более часто используется студентами/аспирантами/исследователями в написаниях и численных экспериментах. Ладно, допустим, что это за счёт кроссплатформенность, но почему тогда не джава(тоже кроссплатформенность)?
Аноним 29/10/23 Вск 12:28:40 2898839 474
>>2898798
Так питон может либо на Си использовать не?
Аноним 29/10/23 Вск 12:45:31 2898860 475
Аноним 29/10/23 Вск 12:49:22 2898864 476
>>2898798
>Меня вообще смущает, что питон как-то более часто используется студентами/аспирантами/исследователями в написаниях и численных экспериментах.
Потому что питон используется как "клей" к числодробилкам на компилируемых языках, аля Си, плюсы, фортран. Питон - это язык более высокого уровня, который позволяет людям без особых навыков программирования относительно легко решать задачи предметной области.
Основную работу по вычислениям выполняют библиотеки на си/плюсах, как ты и сказал.
Аноним 29/10/23 Вск 12:50:16 2898865 477
>>2898864
Алсо, питон можешь заменить любым другим скриптовым языком, аля R, Julia, Guile и т.д.
Аноним 29/10/23 Вск 12:55:59 2898871 478
>>2898860
jit Только у pypy есть, у cpython никакого jit нет и не будет скорее всего.
Аноним 30/10/23 Пнд 05:20:28 2899650 479
>>2898798
Потому что нейросети это предметная область, как бухгалтерия. Бухгалтеры и ученые не программисты, их компьютер не интересует, им нужен язык для даунов чтобы проще было писать их алгоритмы не заморачиваясь ничем лишним. Поэтому они используют 1С и питон, так проще.

Кстати, раньше для этой нейромутатени использовали LISP, такая же высокоуровневая параша как питон, а может и хуже.
Аноним 30/10/23 Пнд 05:47:46 2899654 480
image.png 46Кб, 1253x650
1253x650
На винде с visual studio code идет gcc?
Ставлю вот build tools в надежде, что там есть. Какие галки ставить?
Аноним 30/10/23 Пнд 09:15:57 2899724 481
>>2835039 (OP)
Как научиться читать? По отдельности гуглю каждую функцию и аргументы, но целиком строки не понимаю, не говоря уже о целых блоках.
Мимо вкаткун самоучка
Аноним 30/10/23 Пнд 09:25:48 2899732 482
>>2899724
1) Знать стандартную библиотеку (если такое вообще применимо к Си, лол)
2) Больше кодить
3) Больше чиать чужой код
4) Иметь хотя бы базовое представление о предметной области для которой написан код
Аноним 30/10/23 Пнд 09:28:32 2899733 483
Аноним 31/10/23 Втр 03:05:48 2901072 484
>>2899733
Это же под линукс типа эмуляцию виндовской среды?
Аноним 31/10/23 Втр 09:30:59 2901159 485
>>2899654
Ставь Code Block портабельную версию и не еби свой моск.
Аноним 01/11/23 Срд 00:28:22 2902163 486
image.png 93Кб, 772x612
772x612
Аноним 01/11/23 Срд 02:38:06 2902198 487
Продолжаю тему микрогайдов на примере функции 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, тоесть если все тесты успешно выполнились мейк слинкует финальный экзешник. Если экзешник тестов вернет операционке не а любой другой код ошибки - мейк не станет выполнять эту цель по сборке финального экзешника и прерветься с ошибкой.Без автозамены функциями мейка выглядеть будет так. У мейка есть свои функции и переменные обработки текста, чтобы выкапывать имена файлов/каталогов и подставлять их куда нужно.
Аноним 01/11/23 Срд 09:06:17 2902270 488
Есть какой-нибудь способ извлечь имена всех макросов и функций из заголовочного файла? По-простому не парсится: многострочники, скобки, переопределения всякие, суффиксы и я труба шатал это препроцесс васянский. Может какая утиль линуксовая выхлопнет мне списочек?
Аноним 01/11/23 Срд 10:47:55 2902337 489
>>2902270
>имена всех макросов
gcc -dM -E header.h

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

gcc -fdump-tree-all header.h

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

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

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

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

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

Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых командой PATH.
Аноним 06/11/23 Пнд 13:15:35 2908832 494
Правильно ли я понимаю, что из-за того, что память выделяется "страницами" обычно по 4КБ, то даже выделив malloc'ом 100 байт, к примеру, процессу выделится пул 4КБ и последующие вызовы malloc, в случае если этого пула хватает на выделение, будут его использовать, а не требовать новую страницу? И как быть, если надо выделить 2МБ? Эти 2МБ будут разбиты на несколько страниц, или это будет 1 страница размером 2МБ? И в случае, если выделяется несколько страниц, то как будет происходить адресация? Условно говоря 1 часть массива может находиться на одной странице, а другая часть на другой.
Аноним 06/11/23 Пнд 13:25:43 2908848 495
как раз с угловыми кавычками и не сработало, я поменял на другие, думал дело в этом
Аноним 06/11/23 Пнд 13:26:53 2908852 496
>>2908761
как раз с угловыми кавычками и не сработало, я поменял на другие, думал дело в этом
Аноним 07/11/23 Втр 00:07:33 2909984 497
>>2908832
Процессор предоставляет операционке возможность выстроить непрерывное адресное пространство на столько процессов, на сколько нужно. От 4КБ до 4МБ. Есть ещё 1ГБ. Ядро может тасовать эти страницы на своё усмотрение, редактируя специальную таблицу. Тем временем для обычного процесса пользователя ядро и компилятор могут абстрагировать этот механизм, дробя память кусками поменьше; но непрерывность в них уже будет обязательной, так как программы компилируются в бинарники с нативной адресацией процессора, и подменяться, как в механизме выше, уже не могут; да и не выгодно это будет в таком масштабе. Взглянуть на адреса переменных можно через printf "%p". Обычно их выравнивают на некоторую величину для оптимизации скорости доступа; даже рядом стоящие в одной структуре располагают не подряд, если те меньше машинного слова; как в стеке.
Аноним 07/11/23 Втр 00:33:28 2909989 498
Короче, механизмом страничной адресации занимаются процессор и ядро. Аллокацией - ядро и компилятор. В зависимости от структуры ОС всё это может меняться. Ничто не препятствует тому, чтобы запустить загрузчик ОС до инициализации страничного механизма и работать со всей ОЗУ как есть, без каких-либо механизмов защиты и в однозадачном режиме.
Аноним 07/11/23 Втр 01:49:44 2910017 499
>>2908832
твой вопрос завист как от того что за ОС, так и от типа архитектуры процессора в общем случае.
вообще можешь маллокнуть себе 100байт себе и посмотреть сколько процессу выделится в итоге.
Аноним 07/11/23 Втр 12:36:27 2910381 500
https://compcert.org Как я понял, только у Си есть пруф-чекед компилятор.
Аноним 07/11/23 Втр 15:42:58 2910763 501
>>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
Аноним 08/11/23 Срд 19:05:27 2912694 502
image.png 710Кб, 1080x745
1080x745
>>2835039 (OP)
поясните по пику плиз
void * - это просто указатель на какую-то область памяти без привязки к типу данных, которые там находятся. так?
а что значит empty? это какое-то ключевое слово? или имя переменной?
Аноним 08/11/23 Срд 19:08:04 2912699 503
>>2912694
Если ты про свой пик то эмпти просто имя указателя. А воид да это наше все.
Аноним 08/11/23 Срд 19:16:51 2912720 504
Аноним 09/11/23 Чтв 13:07:28 2913922 505
>>2912694
Ну так это метамем, типа этот чел, который на переднем плане, может указывать вообще на любую хуиту, поэтому он void*. Только хз почему empty,? И почему у "указателя" нет глаз? И почему чел, на которого указывает "указатель" держит закрытыми глаза? Вообще, empty void можно перевести как "пустая пустота", типа, наверное, когда глаза закрыты или их нет, то перед глазами одна лишь темнота, что метафорически можно связать с пустотой, поэтому типа депрессивный такой мем, типа пустота указывает на пустоту.

А вообще, это хуита какая-то! Иди спроси у создателя мема, что этот долбоёб хотел сказать.
Аноним 09/11/23 Чтв 14:13:49 2914071 506
>>2913922
Никто указывает на ничто! Типа такая провокация, такой бунд, либо тупо защитная реакция (видать в каком-то из мемов с "указателем", автор узнал себя и подгорел), что типа тот, что не значит ничего, указывает на то, что не значит ничего, на то, что абсолютно неважно, что вообще не имеет никакого значения!!!
Аноним 10/11/23 Птн 22:58:00 2916634 507
изображение.png 83Кб, 758x700
758x700
Почему пайпы закрываются до execlp?
Аноним 10/11/23 Птн 22:59:37 2916636 508
изображение.png 97Кб, 749x729
749x729
>>2916634
Бля, ошибся с пиком. Вот
Аноним 11/11/23 Суб 01:29:39 2916893 509
>>2916634
Насколько я помню, они закрываются для того, чтобы не наследовались процессом через exec. Вроде как есть какой-то флаг чтобы сами закрывались, CLOEXEC вроде или что-то такое.
Аноним 12/11/23 Вск 21:54:26 2919410 510
Насколько будет обсёр с подливой если я буду учиться по книге 2000 года издания?
Аноним 12/11/23 Вск 22:14:19 2919453 511
>>2919410
Пёс учись по книге 1978г.
Аноним 12/11/23 Вск 23:55:03 2919593 512
>>2916636
Чтобы exec не унаследовал их дескрипторы, ну и просто чтобы не было дублирующихся дескрипторов, там же пайп переназначается на поток вывода в процессе-потомке.
Аноним 13/11/23 Пнд 00:22:46 2919627 513
Аноним 16/11/23 Чтв 22:30:44 2924748 514
Зачем функции типа memcpy возвращают значение первого аргумента? Он у меня и так есть, я же его ей и передал.
Ебал примеры в капче.
Аноним 17/11/23 Птн 04:51:37 2924926 515
>>2924748
Могу предложить, что иногда так код лакончинее получается, когда в одну строчку можешь запихнуть вместо 2
Аноним 17/11/23 Птн 09:15:01 2924971 516
>>2924748
Код ошиби. Если значение не равно твоему - случился говняк.
Аноним 17/11/23 Птн 16:29:22 2925692 517
Как тян объяснить программирование, она говорит что похоже на заклинания.
Аноним 18/11/23 Суб 03:06:25 2926357 518
Зачем существуют функции usleep() и nanosleep(), если они не могут обеспечить такую короткую задержку?
Да, они просто гарантируют, что задержка не будет меньше, но ведь в случае с nanosleep() она будет намного больше. Если я вызову nanosleep(100) в реальности пройдет минимум несколько сотен микросекунд или даже несколько миллисекунд, что намного больше 100 наносекунд. Мб они в спец железе применяются, где есть какие-то аппаратные таймеры? Но у нас ведь все равно время ограничивается частотой вызова шедулера.
Аноним 18/11/23 Суб 06:57:15 2926393 519
Аноним 18/11/23 Суб 08:00:54 2926411 520
>>2925692
задумайся о смене тян, ведь эта знает как выглядят заклинания
Аноним 18/11/23 Суб 08:21:58 2926415 521
>>2926357
Функции usleep() и nanosleep() предназначены для создания задержки в исполнении программы на определенный промежуток времени. Они могут быть полезны в различных сценариях программирования, но имеют свои особенности, когда речь идет о очень коротких задержках.

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

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

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

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

Если вам требуется более точная и предсказуемая задержка, возможно, вам понадобятся другие методы, такие как использование аппаратных таймеров или библиотек с более высоким разрешением времени.
Аноним 18/11/23 Суб 11:27:38 2926508 522
15937220896560.jpg 107Кб, 640x859
640x859
>>2926411
Сжечь ведьму нахуй!!!
Аноним 19/11/23 Вск 07:22:49 2927581 523
Я вообще микроб, не способен даже тест на айсикью пройти, посоветуйте что почитать для вката. Хочу переводить игры для донди и сеги.
Аноним 19/11/23 Вск 20:29:21 2928778 524
>int main()
>{
> char pid{[}255{]};
> fork();
Это что за лабуда скобочная? Первый раз в жизни вижу.
Аноним 19/11/23 Вск 23:08:02 2929066 525
>>2926415
Ну нах ты сюда этот гпт кал притащил, вопрос в другом был.
Аноним 19/11/23 Вск 23:30:31 2929096 526
>>2929066
Хлебушек? Не можешь выделить основное из многабукафф??
>В операционных системах, где эти функции реализованы, существует выделенное время на выполнение задач, известное как квант времени (time slice). Квант времени является минимальным временным интервалом для выполнения задачи и может быть несколько миллисекунд.

А остальное чисто для расширения кругозора.
Аноним 19/11/23 Вск 23:32:43 2929099 527
>>2928778
Это хуита какая-то! Либо это какой-то неизвестный мне компилятор, который имеет свой "особый" синтаксис Си, либо просто ошибочная попытка объявить массив чаров в 255 элементов.
Аноним 20/11/23 Пнд 04:58:37 2929182 528
>>2929099
Да я читал статью с опеннета и наткнулся.
https://www.opennet.ru/docs/RUS/linux_parallel/node7.html
2004 год, может старые какие хаки. Не могу понять, чем обусловлено такое причудливое написание. Автор будто бы хотел обособить квадратную скобку от числа или имени переменной.
Аноним 20/11/23 Пнд 20:06:15 2930145 529
>>2929096
Хлебушек, я буквально это в своем вопросе написал другими словами, а ты вместо прочтения побежал кормить нейросетку.
Аноним 21/11/23 Втр 09:30:04 2930496 530
>>2930145
Хлебушек, написано, что квант времени зависит от операционной системы. Если ты реализуешь операционную систему реального времени (без всяких твоих высокоуровневых-скриптомакакных шедулеров), где будет стоять приоритет на определённой задаче, т.е. произошло некое событие, которое само отправило сигнал прерывания процу, и проц переключился на то, что нужно, или "прыгнул" туда куда нужно. То в таком варианте почему не должны работать usleep() и nanosleep()?
Аноним 21/11/23 Втр 12:19:06 2930693 531
Аноны, я отупел на галере. А тут нехуй делать.
Как вернуть навыки обратно?
Аноним 21/11/23 Втр 21:59:30 2931756 532
Аноним 21/11/23 Втр 23:12:05 2931941 533
>>2930496
Приведи пример ОСРВ без скриптомакакного шедулера/планировщика с поддержкой usleep и nanosleep.
> где будет стоять приоритет на определённой задаче
А приоритет между задачами по твоему кто распределяет? Не шедулер?
Аноним 22/11/23 Срд 08:44:57 2932120 534
>>2931941
Да, анон, я хуиту написал! Я себе по-другому принцип работы ОСРВ представлял.
Аноним 25/11/23 Суб 21:48:45 2937171 535
image.png 63Кб, 1119x233
1119x233
Норм? Не могу сидеть и читать мат хуйню, мозг сразу отключаестя.
Аноним 25/11/23 Суб 23:48:25 2937354 536
молодые люди, извините за врожденную тупость, как проверить, ввёл ли я с помощью scanf натуральное число или хрен знает что вместо него?
Аноним 26/11/23 Вск 11:00:41 2937581 537
>>2937354
Посмотри, что возвращает сканф и обрабатывай это значение.
Аноним 26/11/23 Вск 16:50:13 2938071 538
Хочу embedetdom стать. Мужики,направьте на материал пожалуйста!
На инглише - легко
Знаю си,базу плюсов и алгоритмов. Физика давалась в школе так себе, но щас повторил школьный курс.
Куда копать?
Аноним 27/11/23 Пнд 11:33:16 2938903 539
>>2937581
а как проверить натуральность значения? делил по модулю на 1, не работает
Аноним 27/11/23 Пнд 17:07:13 2939618 540
>>2938903
Себя на натуральность проверь лучше, и в случае отрицательного результата оформи срыгос на жаваскрипт.
Аноним 27/11/23 Пнд 17:18:04 2939634 541
>>2939618
Почему у вам всегда такие абстраетные ответы? Если бы я знал как проверить я бы и не спрашивал? И при чом тут жава если тред по си
Аноним 27/11/23 Пнд 22:39:05 2940192 542
>>2937354
>>2939634
Ну потому что странный вопрос! Какой тип данных ты указал при вводе данных, такой тип тебе и вернёт сканф.
Аноним 27/11/23 Пнд 22:53:26 2940225 543
>>2940192
А как он поймет какой тип данных? Любые данные это ведь просто двоичный код, что целые числа, что дробные, что строки
Аноним 27/11/23 Пнд 23:07:33 2940244 544
>>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"
Также есть русский перевод, достаточно достойный перевод!
на торрентах тоже есть и ру и англ.
Аноним 28/11/23 Втр 11:14:18 2940527 545
>>2940244
Опять куча ссылок вместо однозначного ответа...
Аноним 28/11/23 Втр 11:50:43 2940575 546
>>2940527
Отвечаю однозначно ты дае́шь понять что считать.
Аноним 28/11/23 Втр 14:19:21 2940806 547
>>2940575
Опять слишком абстрактно!
Аноним 28/11/23 Втр 15:55:08 2940948 548
image.png 182Кб, 713x830
713x830
>>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, всякие там дополнительные коды (но это уже совсем для полнейшего охуевания (надеюсь ты это не читаешь))) отличается, но получение числа из массива чаров одно и то же.
После того, как мы получили число из массива чаров, процессор его схороняет в участке памяти, который ты выделил для хранения своей переменной в нужном формате.
Аноним 28/11/23 Втр 16:18:38 2940990 549
16996513139890.mp4 7427Кб, 800x656, 00:00:15
800x656
Аноним 28/11/23 Втр 17:42:42 2941198 550
>>2940948
Опять кучу бессмысленного текста зафигачили вместо ответа!

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

if (str < 48 || str > 57), то break с ошибкой.
Аноним 28/11/23 Втр 18:24:55 2941291 552
Аноним 28/11/23 Втр 18:25:26 2941292 553
image.png 3Кб, 346x54
346x54
>>2941291

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

ёбынный двач жрёт указатели в любом их проявлении!!!!!!
Аноним 28/11/23 Втр 19:16:41 2941360 554
return buf[--bufp];

Правильно ли я понимаю, что тут сначала происходит возвращение элемента из массива buff по индексу bufp, а потом индекс bufp уменьшается на единицу?
Аноним 28/11/23 Втр 19:51:43 2941420 555
>>2941360
>Правильно ли я понимаю
Нет, не правильно! Он первым делом уменьшает bufp, а потом делает ретёрн. Также, если сделать bufp--, только в этом случае, он сначала кладёт значение bufp в один регистр, затем его же в другой регистр, уменьшает этот другой регистр и кладёт по адресу bufp, но все операции, которые предшествуют новому изменению bufp, он проводит с тем регистром, в который он первым положил bufp. Но возврат из функции будет произведён, что в постфиксной, что в префиксной форме, с уменьшенным значением bufp, т.е., он тебе вернёт то значение, которое располагается в массиве buf на одну "клетку" ближе к началу массива.
Аноним 28/11/23 Втр 20:00:26 2941436 556
>>2941420
так зачем придумали index++ и ++index если оно делает одно и то же?
Аноним 28/11/23 Втр 20:44:53 2941494 557
>>2941436
это разное, погугли
Аноним 28/11/23 Втр 21:00:40 2941512 558
image.png 109Кб, 895x503
895x503
image.png 34Кб, 512x377
512x377
image.png 5Кб, 522x54
522x54
>>2941436
Что значит одно и тоже? Я же написал в чём разница!
Ещё раз, в цикле это хорошо видно!
Вот, глянь на пикрил 2, вот тут хорошо видна разница. Результат это пикрил 3. А пикрил 1 это то, что происходит! То, что я выделил на пикрил 1 это ключевая! разница между префиксной формой и постфиксной. В первом цикле видно, что мы сначала прыгаем jmp на инструкцию, которая прибавляет по адресу переменной i единицу, а потом сразу же идёт сравнение этой переменной с 4, и, если меньше или равно, то прыгаем jle в ту часть кода, где идёт вызов ф-ции printf.
Во втором цикле видно, что мы сначала прыгаем на инструкцию, которая сохраняет значение переменной в регистре eax, после чего в edx помещаем значение, которое равно значению в eax, но увеличенное на 1, после чего значение из edx сохраняем по адресу переменной, и уже после этого сравниваем значение в eax с 4, и, если меньше или равно, то печатаем.
Разница в том, что, если используем ++i, то вся "работа" (арифметические действия, логические действия, и так далее) происходит с уже увеличенным значением переменной i на единицу, тогда, как в случае i++ вся работа происходит с, как бы, предыдущим значением переменной i. Если конечно предполагается какая-либо работа, допустим, есть наличие цикла. Но, если ф-ции нужно вернуть значение, то, как бы, сама инструкция ретёрн предполагает, что "работа" окончена и нужно вернуть конечный результат.

я чёт подзаёбся это объяснять! надо эту инфу со скринами сразу в шапку треда кидать.
Аноним 29/11/23 Срд 03:19:14 2941739 559
image.png 49Кб, 947x959
947x959
>>2941286
Как сделать, чтобы сканфнутое значение в свиче срабатывало только на один "правильный" символ, а не на кашу после первого правильного? Если я введу Y123huy, то он пустит в case 'Y', а мне надо, чтобы в default.
Аноним 29/11/23 Срд 08:45:27 2941800 560
>>2941739
Поменять местами дефолт и 'Y'?
Аноним 29/11/23 Срд 09:33:04 2941819 561
>>2941800
Ну то есть, поменять местами принтф и ретёрн.
Аноним 29/11/23 Срд 10:42:16 2941866 562
Аноним 29/11/23 Срд 10:42:55 2941868 563
если я учу си, паралельно стоит и в ассемблер вкатываться?
Аноним 29/11/23 Срд 10:51:17 2941881 564
>>2941868
Да! Без асма сложно. Асм позволяет дизассемблить любые ф-ции на Си, и смотреть, что в них происходит.
Аноним 29/11/23 Срд 13:47:24 2942164 565
>>2941881
типа если у меня процессор такой то и такой то модели, надо учить ассемблер именно для этой модели?
Аноним 29/11/23 Срд 15:16:24 2942322 566
>>2942164
Это тут причём? Конечно, нужно учитывать архитектуру, если ты кодишь на асме какие-нибудь системные штуки, но тебе это не нужно на первых порах изучения Си. Загугли что такое дизассемблировани, и тогда ты поймёшь для чего желательно изучать ассемблер, чтобы проще было освоить базу Си.
Аноним 29/11/23 Срд 16:16:51 2942488 567
Снимок экрана 2[...].png 23Кб, 656x256
656x256
Снимок экрана 2[...].png 20Кб, 618x230
618x230
>>2941512
анон я макак, в регистрах не шарю, то есть в более смузихлёбских языках это аналоuг цилка repeat {} while ?
Аноним 29/11/23 Срд 17:21:54 2942624 568
image.png 423Кб, 1920x1080
1920x1080
типы данных справа, это какие то "обьективные" типы?
Которые просто переиначены на свой лад в каждом языке программирования?
Аноним 29/11/23 Срд 17:28:00 2942643 569
>>2942488
Ну получается, что, если оно в условии цикла, то работает оно, как цикл с постусловием. Но, если тебе нужен именно цикл с постусловием, то лучше применять do{}while(условие), чтобы указать, что тут нужен именно этот вариант.

>>2942624
Гугли что такое машинное слово. Тут именно этот контекст.
А вообще, лучше чекни ещё из чего состоит, допустим, регистр rax.
Аноним 29/11/23 Срд 18:34:07 2942756 570
image.png 46Кб, 989x949
989x949
>>2941800
Вот так сделяль. Карочи оператор switch ето говно. Он проверяет только первый символ и сразу пускает в кейз. Прикиньте я бы логинку на домофон писал, а он бы дверь открыл после первого верного символа, забив хуй на остальной пароль.
>>2941739
Аноним 29/11/23 Срд 18:36:34 2942762 571
>>2942756
> Карочи оператор switch ето говно. Он проверяет только первый символ
С подключением. Ты с нуля вкатываешься или с другого языка пришёл?
Аноним 29/11/23 Срд 18:38:25 2942765 572
Аноним 29/11/23 Срд 21:06:50 2943047 573
>>2942643
А разрядность процессора это максимальный размер машинного слова?
Аноним 29/11/23 Срд 21:37:46 2943073 574
>>2943047
Да, так и есть! Только учти, что в асме dw, dd, dq, что в Си short, int, long, long long соответствуют отталкиваются не о разрядности, а от совместимости, поэтому dw (как бы word) это не 64 бита в архитектуре х86-64, а всего 16 бит. Также и в Си int необязательно должен соответствовать 64-м битам - всё зависит от компилятора. Но корни растут именно от машинного слова. Так что тут проще сайзоффать в Си, а на асме знать разрядность проца и особенности архитектуры.
Аноним 30/11/23 Чтв 11:59:15 2943548 575
image.png 20Кб, 871x507
871x507
после компиляции это будет одно и тоже?
Аноним 30/11/23 Чтв 18:03:10 2944131 576
>>2943548
Чел, у тебя указатель на переменную и сама переменная, как это может быть одно и тоже? После компиляции указатель будет указывать на ту область памяти, в которой хранится переменная, и, естественно, если ты изменишь переменную, а после разыменовав указатель, то ты увидишь изменённое значение переменной.
Аноним 01/12/23 Птн 00:06:04 2944643 577
image.png 189Кб, 1425x793
1425x793
Аноним 01/12/23 Птн 11:11:19 2944871 578
>>2944643
Это намёк на то, что нужно курить матчасть?
Аноним 02/12/23 Суб 00:35:32 2946199 579
дано:
sizeof( unsigned short ) равен 2, а sizeof( int ) равен 4 ;
gcc -ansi -Wall .

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

Почему выполнение этой программы завершается с кодом 1, а не с кодом 257?
Аноним 02/12/23 Суб 02:06:22 2946233 580
>>2944871
очень смешно
не пиши сюда ничего больше тварь
Аноним 02/12/23 Суб 09:49:00 2946297 581
Здраствуйте, помогите разобратся
Вот этот человек говорит что не все указатели можно друг с другом сравнивать
Но как я понял из другого видео, указатели - это просто какие то целые числа, показыавающие адрес переменной. Так почему нельзя сравнивать целые числа?
Аноним 02/12/23 Суб 09:49:39 2946298 582
Screenshot20231[...].png 775Кб, 1920x1080
1920x1080
Аноним 02/12/23 Суб 10:36:56 2946310 583
image.png 129Кб, 500x300
500x300
>>2946233
Выслал тебе подарочек по почте, прими, тварь!
Аноним 02/12/23 Суб 12:27:27 2946386 584
>>2946297
А для чего нужно сравнивать указатели? Какой в этом смисл?
Аноним 02/12/23 Суб 12:51:28 2946408 585
>>2946386
если честно я даже смысл самих указателей понять не могу
Аноним 02/12/23 Суб 13:59:34 2946459 586
>>2946408
Что значит смысл? Для чего они нужны или как они работают?
Аноним 02/12/23 Суб 14:09:29 2946467 587
>>2946459
типа зачем создавать указатели для переменных, если можно сразу обращатся к переменным
Аноним 02/12/23 Суб 14:32:29 2946486 588
>>2946199
Кстати, если var сделаешь 258, то прога вернёт 2. Подсказку тебе дал, поэтому думай.

>>2946467
Ну можно исходить из того, что в Си очень часто приходиться использовать функции, если это не учебная прога, то ф-ции мастхэв. Также надо исходить из того, что в Си массивы/строки/структуры это тупо непрерывный участок памяти с N ячеек, устроенный определённым способом, который имеет определённый "вес" в байтах. Допустим, что у тебя есть целочисленный массив (int) размером в 1000 ячеек, каждая ячейка в этом массиве весит 4 байта, следовательно весь массив весит 4к байт. Теперь, представь, что тебе нужно передать этот массив в ф-цию, это получается получается, что тебе нужно копернуть 4к байт в отдельную копию, т.к. в Си при передачи аргументов в ф-цию создаётся копия значений каждого аргумента ф-ции. Поэтому в ф-цию тупо передаётся указатель на массив, который весит не больше 8 байт, в зависимости от системы. Во-вторых, если тебе нужно менять значение какой-либо переменной в ф-ции, то передав эту переменную в кач-ве аргумента, эта ф-ция не изменит значение этой переменной, потому что у ф-ции копия значения этого аргумента. Поэтому в ф-цию передают указатель на эту переменную, чтобы ф-ция могла бы "напрямую" работать с переменной. В-третьих, указатели позволяют строить сложные структуры данных, типа как массив структур, либо связные списки, деревья различные и т.д.
Есть хорошие видосы в ютубе, которые помогают понять, что такое указатели. Без понимая этого фундамента невозможно понять что-либо, что чуть сложнее задачек в пределах main(). Это мастхэв!!!
Аноним 02/12/23 Суб 16:25:50 2946736 589
>>2946486
Спасибо за развернутый ответ.
Аноним 02/12/23 Суб 19:07:23 2946990 590
Аноним 02/12/23 Суб 19:39:40 2947041 591
Аноним 02/12/23 Суб 21:46:02 2947287 592
как написать программу которая блокирует экран?
Аноним 02/12/23 Суб 21:48:05 2947294 593
Аноним 02/12/23 Суб 21:49:17 2947296 594
типа пока не нажму какую то комбинацию клавиш компьютер никак не должен реагировать
Аноним 02/12/23 Суб 22:05:10 2947327 595
>>2946486
>если var сделаешь 258, то прога вернёт 2

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

Благодарю за отклик.
Самому трудно понять, что на самом деле происходит.
Гугление не помогло.
Пока самостоятельно выяснил, что преобразование типов осуществляется без ошибок.
Проверял такое: int main() { return 257; } И int main() { return -1; }
После этих проверок могу лишь предполагать, что та функция, обёрткой которой main() является, возвращает значения типа unsigned char.
Не знаю, верно ли это предположение. А если оно верно, то непонятно, почему так сделано.
Аноним 03/12/23 Вск 04:47:07 2947678 596
>>2947294
все чем ты можешь помочь людям
Аноним 03/12/23 Вск 08:48:16 2947717 597
>>2947296
>>2947287
Всё уже написано до вас, были на ХРюше такие программки шутки типа кнопка на экране тык на неё экран блокируется.
Аноним 03/12/23 Вск 09:11:14 2947727 598
Аноним 03/12/23 Вск 12:57:54 2947911 599
Аноним 04/12/23 Пнд 00:43:50 2949137 600
Как отслеживаются утечки динамической памяти? Есть ли способ запросить количество свободной/занятой памяти?
Если что, пишу под микроконтроллер.
То что в программах под микроконтроллер лучше не юзать динамическую память знаю и без вас.
Аноним 05/12/23 Втр 08:52:33 2950626 601
когда я инициализирую и присваиваю значение переменной, память выделяется не только для хранения значения, но также и для хранения названия переменной, так ведь? например если название содержит три символа, то где то выделится ещё 6 битов для хранения массива символов названия?
Аноним 05/12/23 Втр 08:54:56 2950630 602
(то есть 6 байтов)
Аноним 05/12/23 Втр 11:45:06 2950763 603
>>2950626
Возьми указатель и посмотри.
Аноним 05/12/23 Втр 13:53:46 2950949 604
Какие есть ещё способы обнуления всей уже существующей структуры, кроме вызова мемсет? Мне для полноты багажа.
memset(structpointer, 0, sizeof(structtype));
Аноним 12/12/23 Втр 01:49:29 2960024 605
Как сделать кложу в C, чтобы портируемо/безопасно, без расширений GCC, ебли со стеком, сторонних библиотек и прочего?

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

Пример того, как это не может выглядеть:
https://pastebin.com/MzrnZq6t
Аноним 12/12/23 Втр 02:28:37 2960029 606
Аноним 12/12/23 Втр 21:28:54 2960998 607
Когда перекат?
Аноним 13/12/23 Срд 00:34:36 2961281 608
Аноним 13/12/23 Срд 01:41:43 2961306 609
>>2961281
Я только вкатываюсь в Си. Перекачу не так - будут недовольные.
Аноним 13/12/23 Срд 13:23:41 2961640 610
Хочу написать функцию, которая получает массив и выводит его в консоль. Но массив может быть int, float, etc., а перебор идёт в цикле идёт через указатель, который должен быть того же типа, что и массив.

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

https://ideone.com/MVBCIv
Аноним 13/12/23 Срд 16:25:51 2961917 611
весьма глупый вопрос Аноним 13/12/23 Срд 18:19:09 2962123 612
Данный вопрос не только про c, но и про c++


Вопрос такой: на чем основан gtk+?
Поверх какой библиотеки работает это?
За счёт чего делается графика?
Помогите перейти на более низкий уровень в си в области графики.
Аноним 19/12/23 Втр 21:13:25 2969600 613
привет, есть ли какие то принятые у програмистов способы проверки, не переполнится ли переменная после арифметической операции?
Аноним 19/12/23 Втр 21:46:09 2969625 614
изображение.png 33Кб, 1269x423
1269x423
Объясните тупому че и как? Я люблю с железками возится а не дрочить код. Не считает и пиздец. Куда цифры вставить?
Аноним 19/12/23 Втр 22:07:30 2969639 615
>>2969625
Всё должно нормально считать. Ты на компе у себя запускаешь или через форму эту? Может они \n хотят после суммы?
Аноним 19/12/23 Втр 22:09:55 2969640 616
Через их форму. ВУЗ чудной, нельзя даже добавлять комментарии и текст. Хз как быть((
Аноним 20/12/23 Срд 19:19:59 2970785 617
>>2969625
Строки 3-5 нужно раскомментировать
Аноним 23/12/23 Суб 17:23:51 2973834 618
Аноним 24/12/23 Вск 23:24:01 2976161 619
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 приложило. Это и есть ваш си блять?
Аноним 25/12/23 Пнд 08:30:04 2976544 620
Тупой, наверное вопрос. Но как в си сделать две структуры, которые друг о друге знают?

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

struct event {
eventSource* source;
}

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

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

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

Просто сколько гуглю, везде с простыми примерами типа точка, имя-фамилия. Открыл K&R - там еще ноды показали, но все равно вот такой вот фигни, когда две структуры друг про друга знают - не вижу. Но ведь не может быть что это такой уж редкий пример и никто такого не использует.
Аноним 25/12/23 Пнд 18:21:36 2977294 621
168265829757.jpg 67Кб, 736x981
736x981
Аноним 25/12/23 Пнд 19:24:12 2977377 622
Аноним 28/12/23 Чтв 07:51:05 2980817 623
Привет зд🎁вуйте
Программирую в кодблокс, заметил две странности, во первых, после завершеия программы, консоль не закрывается автоматически (недавно узнал, что по идее она должна закрываться). Во вторых, работают функции, которые не должны работать без подключения библиотек (например getch() работает без conio)
Это какие то правки компилятора?
Аноним 29/12/23 Птн 00:21:01 2982017 624
>>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
Резидентной памяти не касаемся, ее утилизация не доходит и до половины имеющегося объема
Аноним 29/12/23 Птн 21:08:31 2982937 625
1dc5264e1e9e40a[...].jpg 18Кб, 200x300
200x300
>>2835039 (OP)
>Paul Deitel, Harvey Deitel
Кто-нибудь изучал по их книгам С? годнота или нет? Нужны отзвывы
Аноним 30/12/23 Суб 10:32:50 2983455 626
>>2982937
Мммм авторвы которые хуячат книги по всем языкам программирования. Лучше сололеарн пробеги для начала
Аноним 30/12/23 Суб 13:48:52 2983543 627
>>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).
Аноним 31/12/23 Вск 03:03:33 2984458 628
>>2983543
> Нормальный будет вопрос, если разберёмся с понятиями. Что значит структура "знает" о другой структуре?

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

struct Employe {
struct Departament* departament
...
}

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

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

struct Department;

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

struct Departament {
__struct Employe employees[1024];
__...
}
Аноним 31/12/23 Вск 20:13:33 2984880 630
>>2982937
Я прочел. Но все книги хуита. Там просто разбирают по частям циклы, структуры и либы. А прогать не учат.
Аноним 01/01/24 Пнд 01:05:27 2985110 631
Аноним 01/01/24 Пнд 09:49:15 2985195 632
>>2985110
просто пишешь код, открывай кернел модули в си и пытайся понять.
Аноним 01/01/24 Пнд 12:59:07 2985232 633
вопрос не про си, но тем не менее, почему таблица аски всего на 128 символов? у них же ещё 1 бит был неиспользованный для кодирования...
Аноним 01/01/24 Пнд 18:02:32 2985405 634
>>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]
Аноним 04/01/24 Чтв 10:14:56 2988339 635
image.png 15Кб, 418x391
418x391
здраствуйте, почему строка не переносится?
если поменять \n в if Letter == '\n' на 13, то она перенесётся, а так нет
Аноним 04/01/24 Чтв 10:27:45 2988348 636
image.png 15Кб, 420x209
420x209
и почему латиница и кирилица кодируется одинаковым количеством байт?
Аноним 04/01/24 Чтв 13:59:11 2988515 637
>>2988339
Скорее всего задействуется виндовая последовательность символов переноса строки \r\n, а не просто линуксовая \n
Аноним 04/01/24 Чтв 14:32:01 2988542 638
image.png 5Кб, 309x144
309x144
>>2988515
действительно, через \r сработало
а \n получается попадает в буфер после считывания \r и ждёт там?
Аноним 04/01/24 Чтв 14:44:15 2988555 639
>>2988542
Чтобы узнать, попробуй очистить буфер чтением из него (поставь до или после вызова getche):
while((Letter = getchar()) != '\n' && Letter != EOF);
Не забудь про ; в конце while т.к. цикл пустой.
Аноним 05/01/24 Птн 04:23:23 2989489 640
kmk1.mp4 291Кб, 640x360, 00:00:08
640x360
-- Каретку мне, каретку!
А прикольно, что мы до сих пор с ней носимся. _)
Аноним 05/01/24 Птн 12:01:54 2989639 641
А почему нигде нет инфы про перенос каретки на предедущую строку? Как это вообще сделать?
Аноним 05/01/24 Птн 23:10:18 2990586 642
Что почитать/посмотреть, чтобы ответить на вопросы "awareness of some fundamental concepts, such as system calls and multithreading". Очень подробно не надо. На втором курсе мы многое на асме писали, в том числе системные вызовы, но мне лень пересматривать подробные лекции. Сейчас хватит чего то обзорного
Аноним 05/01/24 Птн 23:10:49 2990587 643
Аноним 10/01/24 Срд 21:56:35 2996804 644
>>2989639
Покрутить ручку справа на телетайпе.
Аноним 11/01/24 Чтв 10:48:13 2997217 645
>>2996804

чо за телетайпе где купить
Аноним 12/01/24 Птн 23:53:25 2999914 646
>>2962123
Ну для линукса всякие QT, GTK и прочее это обёртка над X11 или Wayland

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

А дальше уже железо начинается
Аноним 15/01/24 Пнд 13:52:19 3003479 647
image.png 19Кб, 871x300
871x300
он реально вернул то что там лежало, или это ошибка такая?
Аноним 15/01/24 Пнд 21:07:58 3003992 648
>>3003479
0xC0000005 это код ошибки, а именно access violation. Я хз, как в винде память устроена, но по адресу 0x5 ничего доступного твоему приложению точно не может лежать.
Аноним 16/01/24 Втр 22:36:21 3005646 649
Снимок экрана 2[...].png 47Кб, 411x310
411x310
Что выведет код?
Он выведет число 37. Схуяли?
Аноним 17/01/24 Срд 00:51:40 3005849 650
>>3005646
порядок выполнения постфиксного инкремента больше чем у разыменования
Аноним 17/01/24 Срд 17:35:02 3007060 651
Расскажите, почему когда я в линуксе компилирую gcc простые программы в обычный бинарный файл, на выходе возникают некие Dynamic Symbols для названий функций, которые не объявлялись как extern и вообще не должны бы ни с чем связываться. Это финальные объекты, не динамические библиотеки.

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

Разумеется, в серьезных проектах нужны программисты,но ты просто не поймешь эти программы из-за высокой сложности не связанной непосредственно с Си, а просто созданной из-за сути задачи
Аноним 19/01/24 Птн 15:41:38 3009984 654
>>3008509
>что-то серьезное
С Паскаля тогда начни.
>Честно говоря, я не совсем понимаю для чего мне понадобится си
Тогда тебе си точно не нужен.
>Аноны с треда про раст
Раст проще си.
Аноним 21/01/24 Вск 00:37:24 3011938 655
Друзья, а кастить указатель на функцию к void - UB? А char к указателю на функцию?
Аноним 21/01/24 Вск 00:38:36 3011940 656
вместо void и char - указатели соответсвенно. Хз, как их тут экранировать
Аноним 23/01/24 Втр 00:14:26 3014801 657
>>3007060
Ну насколько я знаю, в конечном бинарном файле нахер не нужны статичные символы названий функций. А значит можно объявить упрощенными динамическими, чтобы не тратить место. Названия нужны же только для дебага - выставил функцию в брейкпоинт и если не прошла - в петлю
Аноним 23/01/24 Втр 00:39:29 3014855 658
Аноним 23/01/24 Втр 00:59:14 3014873 659
>>2990586
В зависимости от уровня абстракции работы, на которую идешь надо отвечать на вопрос. Если по c, то асм в принципе не нужен. Системные вызовы - это же любые запросы к оборудованию. Geeksforgeeks очень кратко пишут
Аноним 23/01/24 Втр 16:14:34 3015706 660
>>3014855
Не очень понимаю, где там ответ на мои вопросы.

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

char* кастовать к указателю на функцию хочу, чтобы сделать обскьюрную jit компиляцию
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов