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


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
191 22 65

C Programming Language #47 /clang/ Аноним # OP 01/08/19 Чтв 23:34:41 14462781
C Programming L[...].png (78Кб, 792x1023)
792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [​i​] или ∗.

Что читать:

- 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. Koch@n "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 помогает читать сложные сишные декларации.

Прошлые треды:

- №44: https://arhivach.ng/thread/444396/
- №45: https://arhivach.ng/thread/448906/
- №46: https://arhivach.ng/thread/461169/ >>1415970 (OP)
Аноним 01/08/19 Чтв 23:48:03 14462862
.png (31Кб, 731x544)
731x544
.png (8Кб, 80x80)
80x80
Первонах.
Аноним 02/08/19 Птн 01:32:45 14463213
>>1446286
Банер с версией и автором спрячь. Твою софтину безопасно юзать в пайпах?
Аноним # OP 02/08/19 Птн 02:34:36 14463304
Аноним 02/08/19 Птн 07:50:29 14463845
Аноним 02/08/19 Птн 09:44:05 14464176
>>1446384
Pipe

Например, 2+2/2 | math.c
Аноним 02/08/19 Птн 11:36:28 14464867
.png (3Кб, 310x168)
310x168
>>1446417
Не, там зацикливание бесконечное. Прога первые данные переварила и ожидает из пайпа еще данные, а их нет. Но правильную работу можно наверное реализовать, только я не знаю пока как.
Аноним 02/08/19 Птн 12:42:38 14465178
>>1446486
Не из пайпа ждёт программа данные, а из stdin. Разбирайся.
Аноним 02/08/19 Птн 14:04:04 14465819
Аноним 02/08/19 Птн 14:07:29 144658410
Сап. Достаточно ли книги Kernighan & Ritchie и уверенного знания С++, что бы сказать что я знаю С?
Аноним 02/08/19 Птн 16:11:34 144667311
Аноним 02/08/19 Птн 16:56:53 144676712
.png (9Кб, 462x291)
462x291
>>1446517
Не ипу как автоматически сделать. Сделал пока так: если прогу вызвать с аргументом, то одно выражение читается, а если без аргументов то зацикливается.

То есть если вызвать так:
echo 2+2 | math -pipe
То будет работать нормально вроде бы.
Аноним 02/08/19 Птн 17:19:02 144679013
>>1446767
Разбирайся. Не ленись. Убери этот сраный банер.

Я б на твоём месте не стал бы ключ писать, а проверял аргументы на вход. Если аргументов нет, то запускаешь интерактивный вариант, иначе пайп.
Аноним 02/08/19 Птн 17:40:38 144681014
.png (2Кб, 445x82)
445x82
>>1446790
>Убери этот сраный банер.
Поч? Я его подсмотрел в Луа. Вроде норм.
Аноним 02/08/19 Птн 18:20:30 144682615
>>1446810
Ну какая мне разница кто автор, какая версия? Вынеси в ключ -v этот банер.
Аноним 03/08/19 Суб 15:01:07 144739716
Как правильнее писать?

char str;
char
str;
char *str;
Аноним 03/08/19 Суб 15:02:59 144739917
>>1447397
Ну вы поняли. Звездочка должна быть у типа или у переменной или между ними через пробелы?
Аноним 03/08/19 Суб 15:05:56 144740118
>>1446826
В питоне тоже баннер выскакивает еще больше чем в луа, значит нужно брать пример.
Аноним 03/08/19 Суб 15:07:29 144740419
Аноним 03/08/19 Суб 15:07:33 144740520
>>1447401
Не нужно. В bc, например, нет банера
Аноним 03/08/19 Суб 15:14:12 144740921
>>1447404
Почему? Тогда наглядный смысл теряется. Звездочка у переменной это же содержимое указателя в этой переменной. Получается мы не объявляем указатель такого-то типа, а объявляем тип содержимого указателя. А если бы звездочка была у типа, то сразу понятно что мы объявили указатель такого-то типа.
Аноним 03/08/19 Суб 15:33:25 144741622
.png (5Кб, 572x152)
572x152
Аноним 03/08/19 Суб 15:38:32 144741723
.png (0Кб, 284x46)
284x46
>>1447405
Ух ты, bc автоматически определяет пайп. Сейчас буду смотреть его исходный код, как он это делает.
Аноним 03/08/19 Суб 15:46:47 144742024
>>1447409
А че спрашивал? Пиши int∗ a, b; и наслаждайся тем, что b "сломался". Логика объявлений на Си не такая, что при типе вся непрямая херня задается. Поясню не примерах.
int (∗a)[12];
означает, что если разыменовать a, потом индекисроваться в пределах 0..11, то получится int (скобки для приоритета). То есть a - это указатель на начало массива 12-элементных подмассивов указателей на int. a[3][7];
первый индекс возвращает указатель на начало четвертого подмассива (по сути &a[0][36]), а второй индекс уже выбирает восьмой элемент в подмассиве (a[0][43]). Таким образом, можно автоматизировать составную арифметику указателей, чтоб не писать a[n∗i+j] внутри функции, принимающей многомерный массив.
Следуя твоей логике, эта штука должна работать вот так
int[12]∗ a;
но нет, лол.
Ну, и еще пример напоследок
int (∗f[10])(void ∗);
означает, что если индексироваться по f в пределах 0..9, затем разыменовать, то получим функцию, которая принимает void ∗, возвращает int. Иными словами, массив указателей на такие функции.
Если начинаешь мыслить от имени, воспринимая тип слева, как конечный результат операций над именем, то все становится просто. Я раньше сам ломал голову над всякими указателями на функции.
Аноним 03/08/19 Суб 15:56:27 144743025
>>1447409
Да, это кажется немного странным, ведь логично разнести по-отдельности объявления int и указатели на какие-то там конструкции из int, чтоб воспринималось "тааак, тут у нас все int, тут у нас укзаатели..", но даже в других языках есть такая логика, в тех же объявлениях функций. Нигде ведь не пишут
rettype(type1 arg1, type1 arg2) funcname { ... };
Нет, мы тоже объявления будто просто переменную типа rettype, лишь при имени описываем, какое место в дороге к конечному значению занимает это имя. Можно до абсурда довести:
double=12.5 val1, val2;
double=-4 val3;
Вместо double val1 = 12.5, val2 = 12.5, val3 = -4;
Кривая это дорожка, короче. Логика от имени рулит.
Аноним 03/08/19 Суб 16:40:04 144744726
>>1447420
>указатель на начало массива 12-элементных подмассивов указателей на int
вот тут я обосрался слегонца, 12-элеметных подмассивов ПРОСТО int
фикс
Аноним 03/08/19 Суб 17:20:27 144746327
>>1447420
Фух, голова закипела от всего этого. Мало что понял, но понял что не прав.
Аноним 03/08/19 Суб 17:37:30 144747228
>>1447463
Не парься, я хуёво объясняю, просто)
Аноним 03/08/19 Суб 18:11:59 144749129
Как в сишке опознать папку?
Как получить список всех файлов в папке, желательно рекурсивно?
Как удалить папку со всем содержимым?
Это все нужно проделать в шинде.
Аноним 03/08/19 Суб 19:40:27 144754030
Аноним 03/08/19 Суб 20:01:38 144755531
>>1447491
От ОС зависит, на Linux можешь взять opendir и readdir
Аноним 03/08/19 Суб 20:05:22 144755632
.png (26Кб, 677x342)
677x342
Аноним 03/08/19 Суб 20:08:03 144755833
>>1447556
> /tcc/include/unistd.h:24: error
Зато пердоли соснули со своим жцц и glibc!
Аноним 03/08/19 Суб 20:12:04 144756034
>>1447558
Там и пердольный жцц не компилит. Видно прога под линь дофига заточена.
Аноним 03/08/19 Суб 20:22:53 144757135
>пытаются прошу с посикс либой и посикс шелом компильнуть на шине

Блять, с кем я сижу в одном треде...
Аноним 03/08/19 Суб 21:16:01 144762236
>>1447416
Обрати внимание, что через пайп нет банера >>1447417
Аноним 03/08/19 Суб 21:39:26 144764237
>>1447540
>архиватор
Не ври нам
Аноним 03/08/19 Суб 22:24:42 144767038
>>1447560
Ну, можно упростить, чтоб исходные пути не запоминались. Там функция fopen_mkdir автоматически создает недостающие папки для нового файла. На винде другой API файловой системы и бекслеши везде, через #ifdef кроссплатформность можно замутить, если бы шарил, как это non-UNIX-like системах делается.
Аноним 03/08/19 Суб 22:28:02 144767239
>>1446278 (OP)
Есть ли простой пример как мониторить сокет через kevent?
Аноним 04/08/19 Вск 01:26:43 144774140
Аноним 04/08/19 Вск 01:35:57 144774741
Збс, я присрал LZW-сжатие к своему архиватору и автоматизировал урезание функционала на Шинде. Скоро WinRAR обанкротится нахуй.
https://github.com/PolazhinetsA/algo/tree/master/lzwarc
04/08/19 Вск 02:58:11 144777242
>>1447747
Молодец. А теперь собери с -Wall, чтобы тебе рассказали, какой ты мудак. Что возвращает bopen()? Бонус: почему у тебя работало и так?
Аноним 04/08/19 Вск 03:21:12 144777343
>>1447772
>bopen()
Ох нихуя проеб!
Та по ходу потому что this попадает в rax. Собсно, это скорее ответ на вопрос, почему не работало с -O3.
Аноним 04/08/19 Вск 03:27:56 144777444
>>1447772
>-Wall
unsigned вместо int, char ∗ вместо void ∗ в объявлении функций сделал, чтоб не кастовать внутри. Ну и const кое-где не проебал. Мудак, согласен)
Аноним 04/08/19 Вск 03:36:24 144777545
>>1447747
Меня больше занимает, почему, несмотря на побайтовую логику bput/bget, после цикла кодирования-раскодирования в конце насрано какими-то 2-3-мя лишними байтами.
Аноним 04/08/19 Вск 03:36:55 144777646
>>1447775
хуй с ним, завтра с gdb поиграюсь
Аноним 04/08/19 Вск 03:38:35 144777747
Аноним 04/08/19 Вск 11:30:44 144782648
.png (22Кб, 690x354)
690x354
.png (19Кб, 493x415)
493x415
>>1447747
Конпеляторы немного недовольны, но компиляют. Сжал ради интереса пару тестовых файлов - сжатие для начала неплохое, практически в два раза на средних текстовых данных. Хотелось бы конечно же более лучшего сжатия, не алгоритм бабушкина, но хотя бы на уровне zip/7z. Разжать архив правильно прога не смогла - выплюнула только начало первого файла.
Аноним 04/08/19 Вск 13:15:00 144786749
Где научиться шарить в Makefile'ах?
Аноним 04/08/19 Вск 13:25:40 144787350
Аноним 04/08/19 Вск 13:35:40 144788151
>>1447873
man make пустой
В /usr/share/doc релизноты и какие-то мелкие нюансы.
Аноним 04/08/19 Вск 13:38:45 144788252
Аноним 04/08/19 Вск 13:39:50 144788353
Аноним 04/08/19 Вск 15:44:41 144795354
image.png (214Кб, 960x1056)
960x1056
image.png (169Кб, 960x1056)
960x1056
>>1447826
Ну не знаю, я прям весь проект пропускал, и даже собралось. Ругалось, правда, на null-char в конце исходников, но с этим еще разберусь. На Шинде new_dir надо самому создать перед запуском распаковки, иначе крашнется. Сейчас затестю...
Аноним 04/08/19 Вск 16:27:27 144797155
blob (44Кб, 1043x613)
1043x613
Аноним 04/08/19 Вск 17:05:27 144798556
image.png (572Кб, 1280x720)
1280x720
>>1447826
Короче, это все ваш Windows хуевый, в Microsoft матерей всех ёб! Другого объяснения, почему fseek() двигает позицию втрое дальше, чем ей сказано, я не вижу. По аналогичной причине ломается, собсно, и распаковка. Что-то не так с типом size_t. В пизду такие проблемы, пойду погуляю.
Аноним 04/08/19 Вск 17:19:58 144799757
image.png (27Кб, 849x146)
849x146
>>1447985
Таким же долбоебам, как я, на будущее...
Аноним 04/08/19 Вск 17:30:10 144800258
>>1447826
Все уже работает, есичо
опять высрал кучу постов, святой кринж
04/08/19 Вск 20:40:29 144808059
>>1447826
> Хотелось бы конечно же более лучшего сжатия
У тебя размер кодов фиксированный. Осиль правильные - начинаешь с 9-битных (256 байтов и STOP/FLUSH), заканчиваешь 13 или 14-битными. Опционально сбрасываешь таблицу, если чувствуешь, что начало плохо сжиматься. Алсо, у зипа дефлейт (хафман + LZ77), сделай LZ77/LZSS отдельно попробуй, они простые.

>>1447985
Только хотел написать про "b" у fopen(), а ты уже исправил. Алсо, просто писать size_t в файл нельзя, потому что есть 32-битные системы (uint64_t еще туда-сюда, но есть еще и big endian, поэтому правильные посоны читают n байтов и из них сдвигами собирают значение, то же и с записью).
Аноним 04/08/19 Вск 21:02:42 144809760
>>1447985
Надо использовать инты фиксированного размера... stdint.h
Аноним 04/08/19 Вск 21:48:08 144812961
>>1447985
Вот теперь почти нормально - в конце файла почему-то байтик изменился.
Аноним 04/08/19 Вск 21:48:51 144813162
>>1448080
Первый тест на винде другой анон делал. Кодированием займусь еще. Это основная тема, которая меня интересует, ради которой весь мини-проект начал пилить.
>32-битные системы
Та да, сам над собой проигрываю за это. Сейчас возьму stdint, ну нахер.
>big endian
Как насчет htonl/ntohl?
Аноним 04/08/19 Вск 21:50:33 144813363
>>1448129
Это не я, это "либа" bitio кривая, которую я писал)
Аноним 04/08/19 Вск 22:18:46 144815664
>>1448133
Еще сделай как у 7зипа, вместо "-arx", "-ext" и "-lst" - "a", "e" и "l", а то непривычно.
Аноним 04/08/19 Вск 22:21:23 144815865
Вопрос к низкоуровневым программистам низкоуровневых программ, писателям драйвером 300кк/нсек, словом, к нормальным людям итт. В списке доступных режимов видеоадаптера присутствует вариант 720x576i. В связи с этим я, хоть и не спец, но уверен, и не ебет, что аппаратура таки позволяет захерачить сигнал чересстрочной развертки для какого угодно разрешения и частоты кадров, пока основные параметры в своих пределах. Но драйвер предусматривает лишь один interlaced-вариант на случай подключения бабушкиного телека. То, что разработчики драйверов - пидарасы и хуесосы, на собственное усмотрение выпиливающие альтернативы, я знаю точно, т.к. пришлось откатывать свой до версии 2009 года, чтоб врубались нужные мне 1400x1050 и 640x400. Но поговорить я хочу не о политике, а о способах выживания в настоящих условиях.

Идея следующая. Взять опенсорс-драйвер и переписать таким образом, чтоб он заставлял железку делать хотя бы 1280x960i_60Hz и 2048x1536i_40Hz. Первое, чтоб адекватно работать без вреда для монитора и для глаз, а второе, чтоб просто поугарать с 3 миллионов пикселей на 17" без мерцания. Собсно, вопрос, насколько это сложно, если вообще возможно? Неужели я так многого хочу, СУКАНАХУЙБЛЯДЬ?!?!
Аноним 04/08/19 Вск 22:26:47 144816466
Аноним 04/08/19 Вск 23:09:17 144818867
>>1448164
"e" правда лучше заменить на "x", наверное.
Аноним 04/08/19 Вск 23:17:31 144819968
>>1448188
>предпредпоследняя буква алфавита
ну все, теперь jump-table для switch-case раздуется до файла подкачки
Аноним 05/08/19 Пнд 00:07:58 144821969
>>1448131
> Как насчет htonl/ntohl?
Посмотри направо: https://godbolt.org/z/cGBQh1 Ты не платишь (используя гцц и шланге для x86, x86-64 и ARM64) за то, что у тебя безопасный секс. В MSVC платишь, лол. Тащить для этого левый (сетевой) хедер достаточно странно.
Аноним 05/08/19 Пнд 00:29:44 144822870
Аноним 05/08/19 Пнд 01:59:29 144825271
>>1448158
вопрос лажа, только что качнул powerstrip и осознал абсурдность своих пожеланий
Аноним 05/08/19 Пнд 04:20:27 144827272
>>1448080
>начинаешь с 9-битных (256 байтов и STOP/FLUSH), заканчиваешь 13 или 14-битными
ох как хорошо стало
Аноним 05/08/19 Пнд 14:42:46 144840673
Господа, я перестал понимать смысл .h файлов. Случилось это после того, как я забыл добавить в файл a.h объявление функции hui, которая была определена в a.c файле. Я юзаю эту функу из другого файла (b.c), в котором подключаю a.h. Так вот, не смотря на то, что в a.h отсутствовало объявление функции hui, компиль всё равно всё успешно скомпилил и слинковал, хотя вроде как должен был выкинуть что ему не известна функция hui. Какого хрена?
И еще вопрос: есть ли способ заставить компиль проверять число аргументов функции при вызове? Потому что у меня получается вызывать функцию объявленную как abc(int, int) с любым количеством аргументов типа такого abc(1,2,3,4,5). Естественно в рантайме все идет по пизде.
Аноним 05/08/19 Пнд 14:50:31 144841574
>>1448406
Попробуй компилировать с флагами -Wall -pedantic -std=c17 или вроде того.
Аноним 05/08/19 Пнд 15:18:17 144843475
>>1448406
Если в хедере определена какая-то структура или макрос, то сосешь хуй. А прототипы функций... Ну, ты ведь не хочешь с дебагером играться, чтоб обнаружить, что просто порядок аргументов попутал?
Аноним 05/08/19 Пнд 15:20:32 144843776
>>1448406
>И еще вопрос:
а, ну все понятно. Басня про подтирание жопы вилкой (или чистку зубов ножом, не помню, так или все ебало в крови, или жопа).
Аноним 06/08/19 Втр 10:54:27 144880177
Geany портабл ошибку выдает как исправить?
точка входа в процедуру _time32 не найдена в библиотеке DLL msvcrt.dll
Аноним 06/08/19 Втр 19:54:35 144908378
Как из функции вывести массив определенный в функции?
Аноним 06/08/19 Втр 20:09:49 144909279
>>1448801
И давно Geany стал компилятором? В MSVCRT нет time32, есть просто time, и он, кстати, с 32-битным time_t.

>>1449083
Передать функции указатель на массив, скопировать туда. Или выделить malloc()-ом память, скопировать туда и вернуть указатель. Или, в крайне редких случаях и с большой осторожностью, можно сделать массив static и вернуть на него указатель.
Аноним 06/08/19 Втр 20:41:32 144911480
>>1449092
>Передать функции указатель на массив, скопировать туда.
Так и сделал. Но не очень удобно так.

>в крайне редких случаях
В каких?
Аноним 06/08/19 Втр 20:52:09 144911981
Какая же сишка быстрая. Писал одну прогу на на питухоне - она там пыхтела от полминуты и больше, выжирала всю память на компе. Потом переписал на дишке тяп ляп в питухоновском стиле - пыхтит несколько секунд и жрет памяти тоже много но чуть меньше чем питухон. Сейчас наконец переписал часть проги на сишечке по всем правилам - летает быстрее секунды, памяти кушает 300-400 килобайт. Офигенно.
Аноним 06/08/19 Втр 20:57:57 144912082
Аноним 06/08/19 Втр 21:12:49 144912983
>>1449114
>В каких?
Когда алгоритм не предполагает одновременное использование нескольких результатов этой функции, потому массив один. В смысле, на уровне отдельно взятого алгоритма. Многопоточность-то возможна, есть thread-local static data...
Аноним 06/08/19 Втр 23:21:26 144916184
При закрытии программы операционная система сама же закрывает файлы и освобождает память, поэтому можно же не писать в конце программы free() и fclose()?
Аноним 06/08/19 Втр 23:24:04 144916485
>>1449161
Да. Если у тебя выделено очень много мелких объектов, то так может оказаться даже быстрее, потому что менеджеру кучи не нужно будет заниматься всей этой бессмысленной возней из-за free(), и он просто дропнет всю память целиком. Главное не привыкнуть и не забывать закрывать/освобождать в других ситуациях.
Аноним 06/08/19 Втр 23:29:04 144916786
>>1449164
Классно. Теперь буду привыкать не писать.
Аноним 07/08/19 Срд 00:42:12 144918687
>>1449161
А если программа 100500 раз использует один и тот же функционал, который каждый раз malloc под временные нужды? Наслаждайся утечкой ресурсов.
07/08/19 Срд 02:53:57 144920988
>>1449186
Какое из слов во фразе "не писать в конце программы" ты не понял?
Аноним 07/08/19 Срд 03:06:15 144921089
>>1449209
ой, мои пардоны, обосрался
Аноним 07/08/19 Срд 09:50:16 144927590
В сишке есть вот такое преобразование типов? Когда, например float преобразовывается в unsigned char, то если float > 255, то в uchar пишется 255, а если float < 0, то в uchar пишется 0? Или надо свою функцию писать для этого?
Аноним 07/08/19 Срд 15:02:02 144938791
>>1449275
В Сишке нет невидимых if-ов. float переведется в int (это процессорная инструкция), но если кастовать char, то просто младший byte от соответствующего int будет.
Аноним 08/08/19 Чтв 11:06:26 144970492
>>1446278 (OP)
Анон, работаю в Code::Blocks. Подскажи, как можно проверять кучу? Хочу удостоверится -- правильно ли я реализовал сборщики мусора, а заодно понять есть ли утечки
Аноним 08/08/19 Чтв 12:49:43 144975993
x54d8e16b.jpg (16Кб, 392x293)
392x293
>>1446278 (OP)
Посоветуйте веб макаке что писать на сишке для грамотного развития? Сам подергал день синтаксис, ничего сложного не увидел, всё классно и понятно, писать хочу для себя
Куда двигаться, что писать чтобы правильно развиться?
Аноним 08/08/19 Чтв 14:29:53 144980994
>>1449759
> веб макаке
> правильно развиться
Не всё можно обратить.
Аноним 08/08/19 Чтв 15:32:07 144985295
>>1449809
Лол, а если я бэкенд на Си пишу, тоже необратимый?
Аноним 08/08/19 Чтв 15:34:16 144985496
>>1449852
Ну вот, я даже тебя понять не могу.
Что ты пишешь вообще? Оно тебе надо? Может, лучше, сайтик?
Аноним 08/08/19 Чтв 16:12:18 144986397
>>1449759
Напиши простой веб сервер для себя. Можешь заодно посмотреть исходник какого-нибудь nginx-а, в качестве примера.
Аноним 08/08/19 Чтв 19:58:15 145000198
>>1449854
про бэкенд другой анон писал
мимо тот самый другой анон, забыл подписаться мимо
Аноним 08/08/19 Чтв 20:52:05 145007099
Аноним 08/08/19 Чтв 20:52:32 1450071100
>>1449863
Да ну исходники, а веб сервер вроде на плюсах готовые решения есть, не?
Аноним 08/08/19 Чтв 21:13:13 1450091101
>>1450071
Если ты хочешь в прод что-то запустить, то да, лучше взять готовое решение. А если хочешь набить руку на СИ, то можно запилить свой сервер. Тем более реализацию всегда есть где подсмотреть.
Аноним 09/08/19 Птн 21:15:45 1450651102
Насколько сложно будет использовать C для анализа данных, статистики и визуализации графиков? Если не с нуля, а использовать библиотеки и gnuplot.
10/08/19 Суб 02:35:52 1450749103
>>1450651
Скажем так, будет весьма неудобно. Бери нормальный скриптовый язык (лучше всего дефолтный питон). Вот если упрешься по производительности во что-то, и не найдешь под это готовой либы (что очень маловероятно), тогда можно эту часть написать на Си.
Аноним 10/08/19 Суб 05:27:15 1450757104
Аноны, блядь!!! В мене жопа підгорає!!!

Короче, есть необходимость юзать компилятор крестов, потому что пидорскую библиотеку, которая, надо заметить, нихуя из удобных крестовых фич не юзает, просто так решили сделать под кресты, соответственно, чистая и непорочная сишечка ее .h уже не переварит. Но пишу я, как на Си, естественно, я же не пидор. Стало быть, от крестов мне одни неудобства. Например, malloc() надо КАСТОВАТЬ, потому что void ∗, видите ле, уже нельзя просто так вхуячить. И это самый простой пример. Мне подобные "-Werror из коробки" доставляют гораздо больше неудобств.

В связи с этим, такой вопрос... Можно ли вежливо попросить майкрософтовский cl, чтоб он закрыл глаза на всю эту implicit хуету? Если нет, то я желаю создателям стандарта нестандартной смерти, БЛЯДЬ!!!
Аноним 10/08/19 Суб 05:53:55 1450760105
>>1450757
Все, уже нахуй надо, рот я ебал вашего С++. Обмазался кастами, обожрался даже, пойду чаем запивать.
10/08/19 Суб 08:18:11 1450771106
>>1450757
> пидорскую библиотеку, которая, надо заметить, нихуя из удобных крестовых фич не юзает, просто так решили сделать под кресты
Так портируй, поправь .h.
Аноним 10/08/19 Суб 16:51:45 1450931107
>>1450091
>Тем более реализацию всегда есть где подсмотреть.
На гитхабе?
Аноним 10/08/19 Суб 23:58:11 1451118108
>>1450651
Мучительно. Большую часть времени потратишь на написание кода, а не на анализ данных. Бери питон, там куча готовых движков для такой лабуды.
Аноним 11/08/19 Вск 00:07:14 1451121109
Аноним 11/08/19 Вск 06:43:58 1451172110
>>1450757
>malloc() надо КАСТОВАТЬ
Его же и так надо кастовать в почти любом случае. А если не нравится, пиши на джаве, там все в дженерики можно завернуть, и сишные хедеры к проекту прилепить. А хейт ерестов — ну это ты просто маленький ещё.
Аноним 11/08/19 Вск 16:21:07 1451418111
.png (25Кб, 701x534)
701x534
.png (976Кб, 1028x683)
1028x683
.png (833Кб, 990x607)
990x607
Какой же все-таки хреновый алгоритм насыщенности в модели HSL (его работу можно увидеть в программе XnView). Вроде усиливает цвета, но получается то блекло без сочности, то местами пересыщено. Вот в Paint.NET пиздатый алгоритм насыщенности - получается сочно и артефакты не лезут. Хочу такой же себе запрогать, только не знаю какой именно алгоритм там использован.
Аноним 11/08/19 Вск 16:27:02 1451422112
>>1451418
В гугле забанили чтоля? Гуглиш исходник для пыня нет и форкаешь/читаешь.
Аноним 11/08/19 Вск 16:28:25 1451425113
>>1451422
Начиная с какой-то версии, ПыняНет стал закрытым.
Аноним 11/08/19 Вск 16:44:56 1451439114
>>1451425
Тебе не похуй? Openpdn открывай и смотри, вряд ли они что-то кардинальное в могли напиздячить в hsl алгоритм.

Впрочем берёшь последнюю версию пынянет и прогоняешь деобфускатором/анпакером/декомпилятором и читаешь исходный код. На дотнете это делается легко, инструментов навалом.
Аноним 11/08/19 Вск 18:17:16 1451506115
Аноним 11/08/19 Вск 19:13:36 1451561116
.png (11Кб, 632x194)
632x194
>>1451506
Вот и весь алгоритм. Оказался гораздо проще, чем в моделях HSV/HSL и результат работы выглядит офигенно.
Аноним 11/08/19 Вск 20:06:06 1451591117
>>1451561
Результат работы покажи как выше выкладывал
Аноним 11/08/19 Вск 21:17:52 1451621118
>>1451591
Я не автор XnView, а пилю крохотную программку для проявки raw, которая еще далека до совершенства. Раньше она делала насыщенность как в XnView, а теперь как в Paint.Net.
Аноним 11/08/19 Вск 21:41:06 1451629119
>>1451621
Ну покажи. Выше же выложил результат своей работы.
Аноним 12/08/19 Пнд 13:18:56 1451910120
>>1446278 (OP)
Анон, выделяя память с помощью calloc, ее обязательно нужно высвобождать, или же это произойдет автоматически при завершении программы?
Аноним 12/08/19 Пнд 13:25:25 1451912121
Аноним 12/08/19 Пнд 13:27:13 1451914122
Аноним 12/08/19 Пнд 13:32:20 1451916123
>>1451914
Вообще-то правильный.
Автоматически произойдет но лучше удалять.
Аноним 12/08/19 Пнд 13:57:18 1451927124
>>1451916
Довольно неопределенный хули. Но, спасибо за пояснение.
Аноним 12/08/19 Пнд 14:19:41 1451935125
Аноним 12/08/19 Пнд 18:25:17 1452061126
1543036214433bu[...].jpe (59Кб, 640x541)
640x541
Посоны, короче столкнулся тут с такими непонятными вещами, как .text .data .bss скриптами линковщика и прочей низкоуровневой радостью, о которой до этого даже не помышля, но сейчас связался с микроконтроллерами.
Листаю статейки, но общего понимания что эта за хуйня и как она работает так не получить. Чо это такое та, как хоть называется? Что читать?
Аноним 12/08/19 Пнд 18:38:32 1452067127
>>1452061
>Чо это такое та, как хоть называется? Что читать?
Ассембоер, плюс формат исполняемого файла ОС
Аноним 12/08/19 Пнд 20:14:18 1452108128
>>1452061
Короче, .data - это, грубо говоря, инициализированные глобальные переменные/массивы, значение/содержимое которых занимает место в бинаре (.exe-шнике). Ты прям там же пишешь значения, строки, и т.д., и т.п., и оно все там напакуется, где надо. Под .bss память выделяется тоже в сегменте данных при запуске и заполняется нулями (могу ошибаться), короче эта хуета не составляет вес бинаря. .text - это сегмент кода, он readonly. Ну а дальше там сегмент кучи идет, и с потолка адресного пространства растет стек, но это другая история. Короче, ассемблерный код - это практически 1 в 1 содержимое бинаря, только с удобствами вроде буквенных меток, из которых линкер потом циферки сделает, и мнемоник вместо кодов инструкций.
Аноним 13/08/19 Втр 00:41:32 1452187129
>>1452061
Открой любой экзешник в графическом отладчике типа x64dbg, там есть закладка memory map, в которой наглядно видно что находится в памяти процесса, твой экзешник с сегментами и другие дллки которые он использует, подписаны названия модулей, сегментов и их атрибутов.
Аноним 13/08/19 Втр 05:52:01 1452209130
Аноны, как жить нахуй? Ноут в ремонте, компуктер под XP, инсталятор MinGW фейлит, CL не умеет в C99, пиздос...
Аноним 13/08/19 Втр 09:13:27 1452228131
>>1452061
Это секции. Для чего и почему так сделано кури форматы приложения.
Аноним 13/08/19 Втр 09:58:25 1452234132
>>1452209
Не знаю, что там у тебя фэйлит, недавно ставил на виртуалку XP и MinGW. TCC возьми, лол.
Аноним 13/08/19 Втр 12:46:31 1452320133
1111.jpg (62Кб, 692x415)
692x415
Нуфаг на связи. Как фиксить пикрил?
Аноним 13/08/19 Втр 12:52:10 1452322134
>>1452320
У тебя файл походу называется lol.c.txt
Аноним 13/08/19 Втр 13:11:33 1452334135
>>1452320
Нафиг cd? В проводнике, в нужной папке: Шифт+пкм, открыть окно команд.
Аноним 13/08/19 Втр 13:18:26 1452338136
1111.jpg (63Кб, 690x395)
690x395
Аноним 13/08/19 Втр 13:35:49 1452350137
>>1452338
Вощем заработало, только окно закрывается сразу, а что там в настройках жать я что-то не помню
Аноним 13/08/19 Втр 13:51:14 1452355138
>>1452350
Оно и должно закрываться, у тебя же программа отработала и завершилась. Если ты хочешь, чтобы консоль оставалась открытой, попробуй запускать программу не двойным кликом, а также через консоль, как ты компилятор запускаешь. Либо добавь getch в конце программы, чтобы добавить задержку. Но лучше первый вариант.
Аноним 13/08/19 Втр 14:04:08 1452359139
>>1446278 (OP)
Немного не в тему. Читаю сейчас код одного FTP-сервера, который написан, конечно же, на С. Начав с определенного момента в коде, который мне интересен (а именно того, где клиент подключается к серверу и получает приветственное сообщение) я изучил внушительное такое дерево функций. Я все.
Аноним 13/08/19 Втр 14:07:39 1452360140
8SIfF6gUp0s.jpg (16Кб, 432x323)
432x323
>>1452355
Годно, спс, интересно на кого же расчитан в моем случае кериган и ричи, если там нет этой инфы в начале
Аноним 13/08/19 Втр 14:13:14 1452365141
>>1452359
Скидывай нам. Тоже полюбуемся.
Аноним 13/08/19 Втр 14:15:07 1452367142
Аноним 13/08/19 Втр 14:15:56 1452368143
>>1452365
Что скидывать? Мои комментарии к нему могут вызвать лютый кринж, как и зарисовки дерева в блокноте. Я вообще надеялся на то, что смогу уязвимость найти.
Аноним 13/08/19 Втр 14:51:49 1452382144
>>1452368
>могут вызвать лютый кринж
>могут
Какие мы оптимисты :3
Скидывай все, хочу кринжироваться полчаса.
Аноним 13/08/19 Втр 15:11:03 1452393145
>>1452360
Насмешил прям, от души
Аноним 13/08/19 Втр 15:11:23 1452394146
Аноним 13/08/19 Втр 15:21:41 1452401147
Аноним 13/08/19 Втр 16:33:50 1452479148
>>1452360
> на кого же расчитан в моем случае кериган и ричи
На людей, которые обладают базовыми навыками работы в ОС. Особенно если у них винда.
Аноним 13/08/19 Втр 16:40:25 1452490149
>>1452360
Эмм.. наверное, на людей из 80-х, которые и не в курсе, что кроме консоли может что-то существовать.
Аноним 13/08/19 Втр 17:14:15 1452539150
1369011674169.jpg (165Кб, 1308x720)
1308x720
>>1452479
Специально загуглил список
>базовыми навыками работы в ОС
нет такого, попробуйте тоньше
Аноним 13/08/19 Втр 20:33:20 1452680151
>>1452360
КиР для пердунов, читай лучше Прата.
Аноним 13/08/19 Втр 20:56:22 1452700152
>>1452680
Хватит всяких хуесосов советовать. Упрощая себе жизнь, ты обкрадываешь себя. Керниган и Ритчи - годный курс для аудитории с мозгами, а Прата - ньюфаг и вообще муслим.
Аноним 13/08/19 Втр 22:05:02 1452748153
>>1452700
Сначала прочитает Прата, а потом твою древноту, если захочет.
Аноним 14/08/19 Срд 20:42:32 1453432154
Как генерировать звук на си?
Аноним 14/08/19 Срд 21:49:06 1453466155
>>1453432
А тебе что, 0x07 мало?
Аноним 14/08/19 Срд 23:49:12 1453523156
Аноним 15/08/19 Чтв 04:29:53 1453564157
>>1453432
Никак. Звук генерируется операционной системой, её апи и библиотеками.
Аноним 15/08/19 Чтв 09:18:47 1453617158
>>1453432
> Как генерировать звук
for (j = 0; j < 44100; j++) sound[j] = sin(2 ∗ M_PI ∗ (j / 44100.0) ∗ 440) ∗ 32767; бззз
Аноним 15/08/19 Чтв 09:27:50 1453619159
>>1453466
>putchar('\x07');
Ух ты, оно звучит.
Аноним 15/08/19 Чтв 12:25:55 1453703160
Анон, как лучше всего сделать описание бинарного TLV формата данных дабы он был понятен бекендщикам, которые будут делать парсер данных на своем бидоне (или подобной веб-хуйне)? В гугловском protobuf есть свой IDL, но свой псевдоязык для описания интерфейса пилить совершенно нет желания хотя свой протокол не было лень колхозить, лол
Аноним 15/08/19 Чтв 15:47:14 1453861161
Как лучше записывать?
fwrite(buf + pos1, 1, pos2 - pos1, fout);
fwrite(&buf[pos1], 1, pos2 - pos1, fout);
Аноним 15/08/19 Чтв 18:41:36 1454014162
>>1453861
Первый вариант: проще читается
Аноним 15/08/19 Чтв 19:59:56 1454034163
>>1453703
Очевидный kaitai struct или вариации на его тему, если ты хочешь машинно-читаемое описание и простые сишные структуры, если не хочешь. Все умеют читать сишные структуры, а питонисты пускай сами в свой unpack ебутся.
Аноним 16/08/19 Птн 12:05:15 1454369164
Посоны, есть нуб-вопрос. Я тут решил Сями обмазаться. В частности рейлибом (raylib).
Но я никак не могу понять как подключать рейлиб.
В архиве с библиотекой был нотапд++, через который можно execute делать.
Но как конпелировать через минигв или сигвин, чтобы эти биоблитеки програма видела?
Прямой путь казывал - не работет.

И еще вопрос - какая ИДЕ? Или лучше забить и самому научиться шел-срипты писать?
Аноним 16/08/19 Птн 12:22:13 1454379165
>>1452360
что-то представил его авторов юзающих cmd.exe и проиграл
Аноним 16/08/19 Птн 13:11:43 1454416166
>>1454369
> Прямой путь казывал - не работет.
Где скриншот сообщения об ошибке?
gcc -Iraylibpath/include -Lraylibpath/lib filename.c -lraylib -o filename.exe как-нибудь так.
Аноним 16/08/19 Птн 13:13:23 1454418167
>>1454416
>gcc -Iraylibpath/include -Lraylibpath/lib filename.c -lraylib -o filename.exe как-нибудь так.

Спасибо, Антош. Попробую.
Аноним 17/08/19 Суб 18:22:12 1455142168
Ананы, у менят появилась задачка по развороту Big Endian в Little. Сразу говорю, что POSIX функции мне не помогут, не спрашивайте почему.
Монжо ли типобезопасно int представить как char[4] (считаем, что инт - 32) без цикла заполнения со сдвигами?
Мне в голову очевидно приходит только char x = (char )&int_name;
Аноним 17/08/19 Суб 18:23:09 1455143169
>>1455142
Ну конечно двач звёздочки как курсив переделал, после char звёздочка в обоих случаях
Аноним 17/08/19 Суб 20:14:59 1455228170
>>1455142
>считаем, что инт - 32
Ты считаешь? Инт может быть 64 битный. Выбивай биты маской и ложи по соответствующему индексу в массив
...0
char[1] = int & (11111111 << 8)
...2
...3
Аноним 17/08/19 Суб 20:17:10 1455230171
>>1455228
>Ты считаешь? Инт может быть 64 битный
Я имел ввиду, что в моём случае инт 32 и это точно

Предложенный тобою способ как раз со сдвигами + копирующий массив, а мне нужен указатель в то же место с другим представлением
Мне сейчас в голову ещё union старый добрый пришёл
Аноним 17/08/19 Суб 20:21:20 1455234172
>>1455230
>union старый добрый пришёл
Да
Аноним 17/08/19 Суб 20:24:09 1455236173
>>1455142
как насчет чего-то вроде функции, делающей строку задом наперед, но не по нуль-терминатору, а по заданной длине?
void memflip(char ∗ptr, size_t nbytes)
{
for (char p = ptr, q = ptr + nbytes - 1; p < q; ++p, --q)
swap(∗p, ∗q);
}
Ну, swap - это типа макрос.
А юзать просто memflip(&n, sizeof(int));
Аноним 17/08/19 Суб 20:26:10 1455238174
>>1455142
трохи обісрався з зірочками
как насчет чего-то вроде функции, делающей строку задом наперед, но не по нуль-терминатору, а по заданной длине?
void memflip(char ∗ptr, size_t nbytes)
{
for (char ∗p = ptr, ∗q = ptr + nbytes - 1; p < q; ++p, --q)
swap(∗p, ∗q);
}
Ну, swap - это типа макрос.
А юзать просто memflip(&n, sizeof(int));
Аноним 17/08/19 Суб 20:49:02 1455251175
>>1455238
Это аналогично strrev или std::reverse в плюсах
Как развернуть я знаю, проблема именно в типобезопасности, вроде и хочется забить, потому что размеры всё равно выставляю не числами, а sizeof, но и мысль покоя не даёт
Аноним 17/08/19 Суб 21:37:09 1455282176
>>1455251
не ссы, я подстрахую
инб4 от подстрахуя слышу
Аноним 17/08/19 Суб 22:08:58 1455311177
>>1455142
> задачка по развороту Big Endian в Little
В этом треде обсуждали даже: >>1448219 Там немного не про то, но bswap тоже распознается и сворачивается в 1-2 инструкции на x86(-64), AArch64 и MIPS.
Аноним 17/08/19 Суб 22:40:46 1455348178
А вот и автор гринтекста из "этого треда" зашел к вам на огонек с вопросом...
https://github.com/PolazhinetsA/algo/blob/master/lzwarc/diter.c
Как сделать подобную лобудень (рекурсивный итератор файлам в папке) на Windows? Я с гуглом так себе дружу. Запрос "Windows File System API" что-то по low-level выдает.
Аноним 17/08/19 Суб 22:52:43 1455356179
>>1455348
FindFirstFile/FindNextFile/FindClose, но лучше не рекурсивно (рекурсия вообще почти всегда неправильное решение проблемы), а с явной очередью/стеком, в которые ты будешь складывать дочерние директории. Не забывай о FILE_ATTRIBUTE_REPARSE_POINT, ты и в своем коде симлинки не обрабатываешь, а это хороший способ зависнуть нахуй.

> while (dent && dent->d_name[0] == '.');
/home/user/.config ты тоже пропустишь?
Аноним 17/08/19 Суб 23:02:13 1455363180
>>1455356
Оо, спасибо.
>/home/user/.config ты тоже пропустишь?
блин, глюканул самую малость
Аноним 17/08/19 Суб 23:07:09 1455366181
>>1455311
Вот это, кстати, оч интересно
Но как именно собрать в bswap? Просто именно так и скопировать функцию, а конпелятор типа умный? (если это cc)
Аноним 17/08/19 Суб 23:11:45 1455369182
image.png (12Кб, 373x146)
373x146
>>1455356
>симлинки
тут не понял
Аноним 18/08/19 Вск 00:16:57 1455398183
>>1455369
Ну вот есть у тебя: /foo/bar -> /foo, что получится, если ты будешь рекурсивно /foo обрабатывать?

>>1455366
> а конпелятор типа умный
https://godbolt.org/z/U-nIbM а еще у гцц интринсики есть.
Аноним 18/08/19 Вск 00:19:12 1455401184
>>1455398
>/foo/bar -> /foo
это понял. Не понял, как у меня симлинки пройдут проверку s.st_mode&(S_IFDIR|S_IFLNK)
Аноним 18/08/19 Вск 00:19:58 1455402185
>>1455398
>/foo/bar -> /foo
это понял. Не понял, как у меня симлинки пройдут проверку s.st_mode&(S_IFDIR|S_IFREG)
обосрался с константой
Аноним 18/08/19 Вск 00:22:08 1455405186
>>1455398
я там максимально делегировал проверки на часто вызываемые функции, чтоб не дублировать исключения в коде высшего порядка
Аноним 18/08/19 Вск 00:22:50 1455406187
>>1455405
>по-максимуму
>часто вызываемым
фикс
Аноним 18/08/19 Вск 00:51:48 1455424188
>>1455402
> как у меня симлинки пройдут проверку s.st_mode&(S_IFDIR|S_IFREG)
Потому что это &, а не ==. И еще потому, что S_IFLNK = (S_IFREG | S_IFCHR). Страдай.
Аноним 18/08/19 Вск 05:09:05 1455473189
>>1455424
Оце так туебень. Поленился значения глянуть. Ок, понял, не буду выделываться, обойдемся без s.st_mode&(-1<<9)==, примем помощь S_IS макросов...
Аноним 18/08/19 Вск 10:39:40 1455535190
>>1455398
Благодарю
Кстати, второго уровня оптимизации достаточно
Аноним 19/08/19 Пнд 01:49:21 1455968191
>>1446278 (OP)
Аноны, помогите. Программуля то работает нормально, то возвращает статус 255, причем набор входных параметров всегда один и тот же. В чем может быть проблема?

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

Работаю в Code::Block, он не отлавливает никаких SEGFAULTов во время возникновения 255.

Анон, с чем может быть это связано?
Аноним 19/08/19 Пнд 01:53:56 1455969192
>>1455968
Похоже, что пытаюсь освободить с помощью free свободную область памяти
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов