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


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

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

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 свободную область памяти
Аноним 20/08/19 Втр 09:47:26 1456789193
>>1446278 (OP)
Кто чем форматирует/разукрашивает логи полученные в различных форматах?
Я пробовал lnav, но чет он или я какой-то слишком тупой и не может нормально работать когда в файле с логами есть строки, которые отличаются от базового формата. Да и форматировать вывод (т.е., например, автоматически выравнивать поля) он не умеет.

Всякие консольные sed+colorize и т.п., конечно, хороши и умеют всё, но я не хочу пердолиться с regex-ами.
Аноним 20/08/19 Втр 14:44:00 1456867194
Если из функции надо получить более одного значения то как лучше всего это сделать?
Аноним 20/08/19 Втр 15:00:17 1456877195
>>1456867
Если они логически связаны друг с другом (например, абсцисса и ордината точки на плоскости), то struct.
Если нет, то несколько параметров-указателей, ничего страшного в этом.
Аноним 20/08/19 Втр 17:09:29 1456933196
.png (12Кб, 694x321)
694x321
>>1456877
Сделал через параметр-указатель. Вроде костыльно, но работает хорошо.
Аноним 20/08/19 Втр 18:12:43 1456984197
Имеются три константы-строки в виде массивов разных длин. Есть способ объединить их в один массив?
Аноним 20/08/19 Втр 18:15:04 1456987198
>>1456984
>их в один двумерный массив?
фикс. алсо желательно это сделать без запросов к памяти.
Аноним 20/08/19 Втр 18:22:55 1456992199
image.png (93Кб, 645x729)
645x729
>>1456987
>без запросов к памяти
лол?
Аноним 20/08/19 Втр 22:16:13 1457159200
>>1456987
объединить три участка без запросов к памяти?
даже если они все троём на стеке, у тебя не выйдет
Аноним 21/08/19 Срд 14:26:39 1457605201
Как лучше всего запихать 3(три) float нормализованных значения [0, 1] в 32 бита? Точность хотя бы до тысячных, чем меньше операций при кодировании/декодировании, тем лучше.
Аноним 21/08/19 Срд 14:30:22 1457609202
>>1457605
Пока вижу только по 10 бит на fixed point. Получается 1/1024 точность. А лучше есть?
Аноним 21/08/19 Срд 14:34:19 1457611203
>>1457609
>по 10 бит
Флоат ты туда никак не запихаешь.
Смирись разве что это зависимые значения - но тут уже математика
Аноним 21/08/19 Срд 15:26:47 1457649204
Аноним 21/08/19 Срд 15:50:30 1457667205
>>1446278 (OP)
Доставьте, пожалуйста, парсер консольных параметров от несосунов (suckless soft). Помню, что у них была клевая библиотечка на макросах.
Аноним 21/08/19 Срд 22:16:24 1457988206
>позволяет создавать многомерные массивы
>все используют массивы указателей
почему?
Аноним 21/08/19 Срд 22:29:39 1457995207
>>1457988
Динамические многомерные массивы нельзя. Или у тебя указатели (лишняя память), или ты сам считаешь индексы (лишние умножения). Для статических вполне используют массивы массивов, никто не жалуется.
Аноним 21/08/19 Срд 23:34:49 1458041208
>>1457995
>лишние умножения
А разве LEA не делает такие умножиения бесплатно?
Аноним 21/08/19 Срд 23:47:23 1458050209
>>1458041
Не делает, т.к. там используется тот же самый mul порт. Но умножение в современных процах - операция 3-5 тактов, и таких портов там обычно не меньше двух, считай умножение очень дешево.
Аноним 22/08/19 Чтв 00:03:48 1458057210
>>1458041
Это не те умножения. Чтобы проиндексировать элементы в одномерном массиве, может быть достаточно lea, но я имел в виду представление двумерного динамического массива в виде одномерного. Например, image[height][width] как image[height ∗ width] с доступом вида image[y ∗ width + x]. Здесь у тебя width - переменная, ее нельзя сократить ни до каких эффективных адресов или сдвигов со сложениями, как было бы сделано для статических двумерных массивов.

>>1458050
> умножение очень дешево
Пара лишних инструкций для вычисления индекса у тебя все равно есть. А еще может быть алиасинг, заставляющий индексы и измерения каждый раз заново грузить.
Аноним 22/08/19 Чтв 00:43:12 1458080211
>>1458057
>Пара лишних инструкций для вычисления индекса у тебя все равно есть. А еще может быть алиасинг, заставляющий индексы и измерения каждый раз заново грузить.
Это проблемы тех, кому надо писать много-много отдельных точек по рандомным координатам, т.е. долбоёбов с их laba01. Обычно всё сводится тупо к row-major обходу одного или нескольких слайсов массива с прибавлением высчитанной этим самым умножением константы. Посмотри, как делаются софтверные растеризаторы - там тупо обходятся все точки, но ненужные игнорируются. И так оно работает с 90-х по наши дни.
Аноним 23/08/19 Птн 14:01:17 1459246212
Гайс, помогите найти ошибку. Суть в том, что ошибка происходит на 23-ей строке кода, когда я пытаюсь задать с помощью malloc'а динамический размер строки, в массиве строк. Алсо, когда я устанавливаю жёсткий вариант в той же строке, то никакой ошибки не происходит. ЧЯДНТ? Вот линк на код --> https://ideone.com/OAc7OB .
Ошибка вот такого вида:
Аноним 23/08/19 Птн 14:02:15 1459247213
Сорри, к посту >>1459246
Ошибка вот такого вида: "a.out: malloc.c:2406: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed."
Аноним 23/08/19 Птн 16:05:41 1459342214
>>1459246
> pas[​i​] = (char ∗) malloc( (strlen(buffer) + 1) ∗ sizeof(char ∗));
Ты вводишь "foo", длина строки 3 (+ 1) = 4, потом зачем-то умножаешь на sizeof(char ∗) хотя должен бы либо на sizeof(char), либо вообще не умножать, потому что sizeof(char) всегда 1. (3 + 1) ∗ 8 = 32 байта выделяешь. Дальше ты делаешь:
> strncpy(pas, buffer, 80);
Во-первых, тебе не нужен тут strncpy, достаточно было обычного strcpy. Во-вторых, ты пишешь 80 байтов, а выделил, как мы выяснили, только 32. И ты портишь память, которая тебе не принадлежит. На следующей итерации malloc() в эту память лезет, а там мусор. Он охуевает и падает. Такие дела.

Алсо, я не совсем понимаю, зачем тебе clean_buf_str(), если ты можешь просто один раз положить \0 в write_string после завершения while. Это быстрее и очевиднее, чем полагаться на предыдущее содержимое буфера.
Аноним 23/08/19 Птн 16:19:39 1459352215
>>1459342
Спасибо за советы. Исправил теперь эту ошибку. Просто, если честно жопой смотрел, что умножал на тип указатель на char, а не на обычный char.

>clean_buf_str()
Я использовал для того, чтобы очистить буфер после того, как я проивзеду копирования слова в массив указателей. Т.к. мне нужно по заданию вывести каждую строку отдельно в массиве строк, то буфер надо очищать после каждой записи слова, ведь тогда, следущее слово может быть короче предыдущего, и 'мусорные символы' запишутся в следующую строку.
Аноним 23/08/19 Птн 23:07:23 1459622216
>>1459352
> слово может быть короче предыдущего, и 'мусорные символы' запишутся в следующую строку.
> и 'мусорные символы' запишутся в следующую строку
Я именно это и имел в виду. Не похуй ли тебе, что у тебя там в неиспользуемой части буфера? Смотри:
char buffer[16];
strcpy(buffer, "abcdef");
strcpy(buffer, "foo");
// buffer = "foo\0ef\0"
printf("%s\n", buffer); // "foo"
Аноним 24/08/19 Суб 01:41:46 1459692217
>>1446278 (OP)
Анончи, русские символы в дефайнах поддерживаются?
Аноним 24/08/19 Суб 02:04:52 1459700218
>>1459692
Юникод поддерживается в идентификаторах в виде escape-последовательностей (\u04xx р) везде, а просто так - в основном не поддерживаются, ибо нахуй никому не нужно. Можешь поиграть в -fextended-identifiers в gcc/clang, может сделали.
Аноним 24/08/19 Суб 02:56:10 1459713219
>>1459700
>ибо нахуй никому не нужно
но но
Аноним 24/08/19 Суб 18:43:15 1460126220
Анон, из-за чего malloc может возвращать указатель на уже занятое место в памяти? То есть, в одной функции я вызываю:
int C; C = (int )malloc(sizeof(int)); sscanf(buffer, "%d", C);

Затем, в другой подпрограмме происходит следующее:
int value; value = (int )malloc(sizeof(int));
value = (int *)pointer;

Так вот, значения указателя C и значения указателя value всегда сука равны. Как такое может быть-то?
Аноним 24/08/19 Суб 18:46:08 1460130221
изображение.png (2Кб, 540x55)
540x55
>>1460126
Быстрофикс:

Так вот, значения указателя C и значения указателя value всегда сука равны. Как такое может быть-то?
Аноним 24/08/19 Суб 18:46:57 1460131222
>>1460130
Эти две строчки расположены в разных функциях, которые поочередно вызываются в еще одной функции. Но, полагаю, это не должно играть роль.
Аноним 24/08/19 Суб 18:49:27 1460135223
>>1460130
>>1460131
И потом мой сборщик мусора, который должен освобождать память по указателю C заодно и херит содержимое по указателю value. Да как такое может быть, Анон, помоги.
Аноним 24/08/19 Суб 19:20:03 1460169224
>>1460126
Посмотри valgrind --trace-malloc
Аноним 24/08/19 Суб 19:51:21 1460179225
>>1460169
Бля, из под винды работаю. Есть какие-то анлоги? Спасибо за совет.
Аноним 24/08/19 Суб 19:52:22 1460182226
>>1460169
Блин, спасибо, давно искал такую софтину.
Аноним 24/08/19 Суб 19:57:40 1460186227
Аноним 24/08/19 Суб 19:59:07 1460187228
Аноним 24/08/19 Суб 20:04:10 1460189229
изображение.png (17Кб, 851x493)
851x493
>>1460169
Ебать копать, ну буду разбираться
Аноним 24/08/19 Суб 20:05:06 1460191230
>>1460186
Спасибо, это тоже попробовал. Пока что скачал себе Dr.Memory, там лог пиздецкий >>1460189
Аноним 24/08/19 Суб 20:05:22 1460192231
>>1460191
быстрофикс: попробую
Аноним 25/08/19 Вск 16:41:18 1460620232
>>1459622
блин, точно, гениально и просто. Я просто забыл, что функция будет читать до первого '\0'.
Аноним 25/08/19 Вск 20:34:23 1460724233
Решил прочитать K&R (прошлый раз забросил на середине), а там заданий меньше чем было. Задания вырезали по сравнению с первым изданием?

Алсо где можно прочитать про хедер файлы нормально? Я нихуя не могу понять чому я не могу сделать #include "smth.c" в нескольких файлах, зачем городить эти хедеры?
В K&R написано "просто ебаште один хедер-файл на всю программу)))", это и есть бест-практис?
Аноним 25/08/19 Вск 21:16:14 1460751234
>>1446278 (OP)
Мне что-то шапка треда не доставляет. Вроде список литературы есть, но что-то не вяжется.

Вот у пайтон есть Марк Лутц, который подробно расписывает что к чему и как реализовать ту или иную функцию.
Я ранее писал на С++ в вузе, но именно на Си не писал. Подскажите учебник, чтобы не сильно тупо разжёвывал, но и не для мидлов.
Прата у меня есть, К и Р у меня тоже есть, но старые (1982 и 1988 годов соответственно) . Их можно читать или взять что-то свежее?
Из чего выбрать :
0. K&R
1. Кочан Вуд.
2. Стивен Прата
3 . Дейтл и Дейтл
4. Столяров
5. Head First C
Кто с чего начинал?
Задачи какие - писать всякие полезные программы для себя чтобы не делать рутинную хуйню. Писать хочу под freeBSD и Windows.
Аноним 25/08/19 Вск 21:22:35 1460759235
>>1460724
> Я нихуя не могу понять чому я не могу сделать #include "smth.c"
Можешь. Делают. Посмотри, например, на tinycc.

> в нескольких файлах
Допустим, у тебя в smth.c есть функция foo и массив uint8_t array[104857600] (100 метров). Если ты заинклудишь его в нескольких файлах, то во-первых, ты очевидно продублируешь код и данные, и размер твоей программы (или размер программы в памяти, зависит от деталей) вырастет в n раз. Во-вторых, линкер скажет тебе, что ты мудак, потому что у него будет две функции foo и два массива array. Поэтому ты говоришь в одном .c файле, что вот она функция и вот он массив (определяешь их, у тебя definition), а в остальных ты говоришь, что в программе существует вот такая функция и вот такой массив (объявляешь, у тебя declaration). Линкер эти две вещи свяжет вместе, и вся программа будет использовать одну копию функции и одну копию массива. Хедеры сами по себе для этого не нужны, ты можешь копипастить объявления в каждый файл. Но гораздо удобнее положить все объявления, относящиеся к какой-то части программы, в одно место и втыкать все разом. И в случае необходимости править их в одном месте на самом деле в двух, нужно еще определения править, а не искать по всей программе. И вот именно в хедеры их и кладут.

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

>>1460751
> Из чего выбрать
K&R если хочешь страдать и насыщаться духом старой школы, свежее издание Праты, если хочешь просто качественно выучить современный Си.
Аноним 25/08/19 Вск 21:24:02 1460760236
>>1460759
а кочан вуд? мама говорит, что годнота была когда-то.
Аноним 25/08/19 Вск 22:06:41 1460781237
>>1460760
Я читал кочана когда-то, но прата по всем параметрам лучше.
Аноним 25/08/19 Вск 22:28:15 1460790238
>>1460781
спасибо. тогда прата мой выбор
Аноним 26/08/19 Пнд 01:11:55 1460886239
>>1446278 (OP)
Сегодня нашел задачку с собеседования на си разраба и решил.
Когда собеседовался не мог, затупил от нервов или я со временем поумнел (врядли).
Кстати, работу я так и не нашел, сейчас вкотываюсь в жаваскрипт.
Аноним 26/08/19 Пнд 03:34:50 1460917240
Аноним 26/08/19 Пнд 07:52:27 1460949241
>>1460759
Спасибо, анончик :3
> ты очевидно продублируешь код и данные
Хотя вот это всё равно немного не понял. В высокоуровневых языках я могу делать импорт какого-то модуля/пекейджа в нескольких местах, и это всё разрулится, главное чтобы не было циркулярных зависимостей.
Что мешает линкеру только один раз включить файл? Или так определено в стандарте, что инклуд должен копипастить?
Аноним 26/08/19 Пнд 11:53:34 1461047242
Аноны, подскажите, какой компилятор использовать лучше все?
Вот пробовал GCC обыкновенный, смотрел утечки и прочее, вроде бы все норм (без учета утечек), собрал ту же программу с Cygwin -- бинарник в два разам меньше, но помимо утечек добавились какие-то:

Error #1: UNINITIALIZED READ: reading register eax
# 0 KERNELBASE.dll!FindNextFileW+0x109 (0x74ea24c9 <KERNELBASE.dll+0xf24c9>)
# 1 KERNELBASE.dll!FindNextFileA+0x2f (0x74ea0500 <KERNELBASE.dll+0xf0500>)
# 2 .text [../../../src/gcc-6.3.0/libgcc/config/i386/cygwin.S:184]
# 3 __mingw_glob [../../../src/gcc-6.3.0/libgcc/config/i386/cygwin.S:184]

Не пойму из-за чего это так
Аноним 26/08/19 Пнд 15:26:56 1461222243
>>1460949
Компилятор отдельно компилирует каждый .c (вместе со всем, что ты туда заинклудил) в .o, и если был инклуд ОПРЕДЕЛЕНИЙ функций и чего-то еще, а не только ОБЪЯВЛЕНИЙ, то они тоже скомпилятся по экземпляру в каждом .o, который делался с инклудом этой штуки. Линкер же не занимается "включением файлов". Работа линкера, грубо говоря, сделать из символов адреса. Даже компилятор, как таковой, этим не занимается. #include - препроцессорная директова. Чтоб заголовочный файл можно было безопасно инклудить везде, где он используется, не задумываясь, не инклудит ли его другой уже инклуднутый файл, делают:
#ifndef FILE_H
#define FILE_H
содержимое
#endif
Препроцессор не умеет, и не должен, в собственную логику с условиями. Он на то есть, чтоб делать все буквально, даже самую странную дичь, если ТЫ знаешь, что делаешь.
Аноним 26/08/19 Пнд 16:00:11 1461248244
--------------------Configuration: mingw5 - CUI Debug, Builder Type: MinGW--------------------

Checking file dependency...
Compiling C:\Documents and Settings\Мои документы\C-Free\Temp\bookinfo.c...
[Error] C:\Documents and Settings\Мои документы\C-Free\Temp\bookinfo.c:1: error: stray '\239' in program
[Error] C:\Documents and Settings\\Мои документы\C-Free\Temp\bookinfo.c:1: error: stray '\187' in program
[Error] C:\Documents and Settings\\Мои документы\C-Free\Temp\bookinfo.c:1: error: stray '\191' in program
[Warning] C:\Documents and Settings\Мои документы\C-Free\Temp\bookinfo.h:11:3: warning: no newline at end of file
[Warning] C:\Documents and Settings\\Мои документы\C-Free\Temp\bookinfo.c:36:2: warning: no newline at end of file

Complete Make bookinfo: 3 error(s), 2 warning(s)

Подскажите, почему в ANSI кодировке работает но кириллица в коносле не отображается когда сохраняю в UTF-8 вылазят эти ошибки? IDE Cfree/
Аноним 26/08/19 Пнд 16:31:09 1461265245
>>1460949
> Или так определено в стандарте, что инклуд должен копипастить?
Да. #include не магия. Это просто вставка содержимого одного файла в другой, ничего больше.

>>1461248
С кириллицей в винде вообще большая жопа. По-хорошему надо делать свои обертки вокруг printf, которые будут делать MultiByteToWideChar и WriteConsoleW для вывода нормального юникода. Либо ты мог бы использовать павершелл, в котором можно chcp 65001, но у тебя XP, лол.

> кириллица в коносле не отображается
Потому что по умолчанию консоль в винде использует CP866. Ты можешь сохранить файл с кодировкой 866, можешь сохранить как UTF-8, но сказать компилятору, чтобы он сам текст конвертировал: -fexec-charset=cp866 (лучше всего), либо можешь пердолиться в SetConsoleOutputCP и SetConsoleCP, чтобы твои ANSI (cp1251) строки отображались.

> сохраняю в UTF-8 вылазят эти ошибки
Сохраняй без BOM (UTF-8 without signature). И вообще никогда с BOM не сохраняй, это абсолютно нинужное, вредное говно.

> IDE Cfree
А почему нам должно быть не похуй? IDE не занимается компиляцией.
Аноним 26/08/19 Пнд 16:58:28 1461269246
>>1461265
Шёл 2к19, ОС Ш1ИДОШ5 так и не научилась в нормальную работу с кириллицей.
Аноним 26/08/19 Пнд 16:58:47 1461270247
>>1461265
>IDE Cfree
Там в настройках сохранения есть выбор ANSI, UTF8, UTF8-BOM, UTF-16 тоже с BOM в ANSI все запускается при других ошибки. Какие настройки нужно смотреть?
Аноним 26/08/19 Пнд 17:00:13 1461271248
>>1461269
Попрошу безинсинуаций это XP 2002 год.
Аноним 26/08/19 Пнд 17:20:48 1461285249
Аноним 26/08/19 Пнд 17:23:27 1461286250
>>1461269
Винда нормально не умеет в UTF-8 (в основном в консоли, и только если использовать стандартную оболочку - во всех нестандартных починено), а вот в юникод она научилась еще раньше линукса, в ядре NT юникод от рождения.
Аноним 27/08/19 Втр 01:19:57 1461552251
>>1461271
ХР - юникодная ОС, нативно поддерживает все языки сразу. Так что давай без инсинуаций.

>>1461269
>консоль
>Ш1ИДОШ5
Давай ты посмотришь значение слова windows в словаре.
Аноним 27/08/19 Втр 01:23:24 1461554252
>>1461286
UTF-8 сам в себя не умеет. Это сжатый формат с которым нельзя работать нормально. Так же как нелепо придумать вместо нормального .txt пожатый по какому-нибудь алгоритму, чтобы потом парсить на каждый пук. Просто нелепо.
Аноним 27/08/19 Втр 01:24:19 1461555253
>>1461554
>Это сжатый формат
Чегобля?
Аноним 27/08/19 Втр 02:07:17 1461562254
>>1461555
Ну он имеет в виду, что нельзя перейти к символу n, не распарсив предыдущие n - 1. Хотя на практике такое никому не нужно.
Аноним 27/08/19 Втр 02:14:35 1461565255
>>1461562
>предыдущие n - 1
Ну не совсем, достаточно читать первый байт и пропускать остальные
Аноним 27/08/19 Втр 02:21:46 1461566256
>>1461565
З.ы. а зная какой язык, то никакой разницы с 1 байтовой нет.
Аноним 27/08/19 Втр 03:34:48 1461572257
Хочу написать гуи апи в ядро линукса, ну т.е вместе с ядром чтобы компилилось, собираю лфс. С чего начать писать этот апи? Посмотреть у вайна ведь можно?
Аноним 27/08/19 Втр 13:13:00 1461769258
Аноны, нужна помощь. Днонетчик решил прикоснуться к истокам, открыл K&R и обосрался, потому что не смог запустить Hello world. Установлена студия 2019 и clang 8.0.1. Кое-как собрать смог только из Developer Command Prompt, для этого пришлось передавать пути к либам. Команда вышла такая:

clang -I "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.22.27905\include" -I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -c -v hello.c -o hello.exe

Получившийся бинарник вываливается с ошибкой "Unsupported 16-bit application". Если передавать дополнительно ключ --target=x86_64 вываливается сраная простыня ошибок, в основном из vcruntime.h. В интернетах пишут, что если убрать ключ -c, это помогает. У меня без этого ключа жалуется на отсутствие линкера. Я немного в фрустрации.
Аноним 27/08/19 Втр 13:49:29 1461802259
>>1461769
> Unsupported 16-bit application
Ты обозвал объектный файл exe-шником и пытаешься его запустить, а винда не может его распарсить и считает, что у тебя .com-файл с именем .exe, а у тебя десяточка без NTVDM, которая и .com тоже запускать не умеет.

На самом деле объектные файлы надо еще слинковать, компилятор либо сам вызывает линкер (без -c), либо ты должен явно сказать clang -c file.c -o file.o и потом ld file.o -o file.exe (плюс-минус пути и либы).

> Установлена студия 2019
Непонятно, каким местом связаны студия и шланг. Шланг под виндой вроде бы всегда хотел binutils из MinGW (в том числе, например, линкер, который оно у тебя найти не может). Ставишь MinGW, кладешь в %PATH%, clang-ом компилируешь, ld из MinGW линкуешь. Или оно само линкует: clang hello.c -o hello.exe.

Но если у тебя есть студия, зачем тебе шланг вообще? Из этого самого: cl /c hello.c /Fohello.obj && link hello.obj /OUT:hello.exe. Или даже просто: cl hello.c и всё (инклуды студии в переменные окружения сам Developer Command Prompt должен был положить).
Аноним 27/08/19 Втр 14:29:37 1461838260
link.png (16Кб, 548x311)
548x311
>>1461802
> Ты обозвал объектный файл exe-шником и пытаешься его запустить
Хех :) Хелп к clang ввел в заблуждение, там ключ -o описан просто как "Write output to <file>", я ожидал там готовый экзешник.

> линкер, который оно у тебя найти не может
Не могу понять, почему. Линкер лежит в той же папке, где и сам clang, она прописана в %PATH%. Ну да и линкование вручную не сработало (скриншот аттачед).

> Но если у тебя есть студия, зачем тебе шланг вообще?
Вижла жирноватая, я ставил только нужные мне по работе фичи. Поддержку плюсов не устанавливал, только какой-то SDK. План был просто читать книгу, писать примеры в саблайме и компилять их легковесным шлангом. Я еще попробую MinGW поставить, как ты сказал, но что-то мне уже подсказывает, что если столько проблем возникает, проще уже какой линукс в виртуалке поднять. В любом случае спасибо тебе большое за дельные советы, а не обкладывание хуями.
Аноним 27/08/19 Втр 15:10:10 1461865261
>>1461838
Ставь msys2 и не мучайся. Там накатишь mingw64 нужные тебе либы, IDE и т.д Можешь еще conemu поставить(эмулятор термила). Годная вещь, на шинде рекомендую
Аноним 27/08/19 Втр 16:18:53 1461895262
msys.png (10Кб, 290x233)
290x233
>>1461865
Спасибо тебе, анон! Наконец-то можно учиться, а не сражаться с окружением.
Аноним 27/08/19 Втр 16:45:51 1461919263
>>1461895
>можно учиться
Учись хорошо, придем проверим.
Аноним 27/08/19 Втр 17:13:54 1461936264
>>1461572
С чего начать АПИ писать?
Аноним 27/08/19 Втр 17:43:21 1461952265
>>1461936
С понимания архитектупы ПК и ОС, ты несешь дичь, ты должен не с ядром, а видеодрайвером взаимодействовать. Гугли framebuffer.
Аноним 27/08/19 Втр 18:18:27 1461974266
Аноним 27/08/19 Втр 19:26:51 1462045267
NEH.png (19Кб, 896x382)
896x382
Сяп. После ввода 5 элемента - 4 элемент просто берёт и обнуляется, приэтом первые три не изменяются. Далее после пятого элемента - всё нормально (16, 32 итд не обнуляются).
типа программист 27/08/19 Втр 20:19:37 1462078268
>>1462045
Ну, во-первых "++" не просто икрементит, а изменяет значение переменной, т.е. [code]size++[/code] то же, что и [code](size += 1)[/code] или [code](size = size + 1)[/code] это так, к сведению.

Во-вторых [code](p+array + size)[/code] значит то же, что и [code]p_array[size][/code] или [code]size[p_array][/code];)
и указывает не на последний, а уже на следующий за границей массива элемент (контроля границ в сях обычно нет, тем более для динамических массивов), потому что индексация массивов в Си и многих других языках начинается не с единицы а с нуля, т.е. по индексу 0 будет первый элемент, по индексу 1 - второй, ..., по индексу (size - 1) - последний, по индексу size будет уже кусочек памяти лежащий сразу за последним элементом и т.д. Если тебе нужен был последний элемент, то выше тебе вместо [code]size++[/code] надо было написать [code]size + 1[/code] или вместо [code]
(p_array + size)[/code] надо было [code]p_array[size - 1][/code]

Ну и в-третьих в цикле также ошибка с индексацией, надо было начинать с нуля.

В-четвертых, т.к. ты скинул картинку вместо текста, то иди нахуй исправляй и проверяй сам.
типа программист 27/08/19 Втр 20:23:35 1462080269
Блядь... Эта блядская борда не поддерживает тег [code]? нахуй тут сидеть?

Пидарасы.
Аноним 27/08/19 Втр 20:25:24 1462082270
Аноним 27/08/19 Втр 20:48:08 1462093271
>>1462078
Да, ты прав, дело оказалось в индексации. Получается, я записывал в невыделенный блок, который только на следующем цикле "захватывался". Однако всё равно не могу понять, почему косяк при выводе массива происходил только с четвёртым элементом? Наверное потому что после этого блока realloc просто не находил свободный соседний и брал другой из ебеней.
Вообщем бобров тебе
Аноним 27/08/19 Втр 20:58:23 1462099272
488135.jpg (16Кб, 554x349)
554x349
Аноним 27/08/19 Втр 22:43:01 1462160273
>>1461265
>>1461222
бля у С самое заебись коммьюнити на сосаче
Аноним 28/08/19 Срд 00:15:17 1462186274
>>1461838
Ради интереса попробовал притащить шланг (64-битный инсталер с официального сайта) в винду (64-битная семерка) без MinGW, но со студией. Если запускать не из developer command prompt, все просто работает, оно само пути ищет (clang hello.c и все), из developer command prompt: clang --target=i686-pc-windows-msvc hello.c, и опять же все работает. Или 64-битный билд и developer command prompt: сначала vcvars64.bat и потом опять же clang hello.c. Что же касается твоего пика, то это сложный способ, но у тебя ведь почти получилось, тебе только рантайм нужен был: lld-link hello.obj libcmt.lib. Но msys2 двачую, если лень возиться с настройкой и думать.
Аноним 28/08/19 Срд 00:21:52 1462189275
>>1462160
тут просто есть 1 (один) умный дурачек который любит объяснять новичесам очевидные вещи

Аноним 28/08/19 Срд 00:22:16 1462190276
>>1462189
алсо, поссал на него
долбоеб плодит себе конкурентов

Аноним 28/08/19 Срд 08:47:27 1462299277
>>1462190
Да мы так просто, чтоб мозги не засыхали.
Аноним 28/08/19 Срд 10:23:32 1462370278
>>1462186
Из простого command prompt не собиралось, не могло найти stdio.h. Да и варнинг выдавало, в котором явно было написано, чтоб попробовал через developer command prompt. Сейчас я не хочу тратить время и разбираться, чего шлангу не хватает. Как вы оба сказали, msys2 крутая штука, все завелось с первого раза. Возможно, стоит добавить в шапку.
Аноним 28/08/19 Срд 10:29:48 1462379279
>>1461974
>kernel-space
Значение знаешь?
Аноним 28/08/19 Срд 10:53:59 1462391280
>>1462190
Да мне нахуй этот С не всрался работать на нём, лол, как и большинству, я думаю.
Мне чисто по фану с лоу-левелом поиграться.
Аноним 28/08/19 Срд 12:17:30 1462450281
Что бы заебашить на Си такое, не сильно сложное, но интересное?
Аноним 28/08/19 Срд 12:34:38 1462460282
>>1462379
Я про него и говорил, ебушка
Аноним 28/08/19 Срд 14:18:13 1462559283
Аноним 28/08/19 Срд 16:25:00 1462671284
>>1462450
Простенькую демку к примеру
Аноним 28/08/19 Срд 20:30:39 1462772285
>>1462450
Мозги для микроволновки
Аноним 29/08/19 Чтв 14:26:08 1463183286
screen2.png (40Кб, 671x448)
671x448
screen1.png (133Кб, 1424x861)
1424x861
Пожалуйста, помогите разобраться с чтением файлов в бинарном режиме. Написал программу, которая просто должна прочитать числа из файла в массив(пикрелейтед 1), а на проверке выводит вот такие числа(пикрелейтед) 2). Сам код тут: https://ideone.com/FkhfiY
Главное, что я не могу понять, так это, что функция вроде как прочитала файл, но те значения, которые она прочитала совсем не те, что я ожидал.
Аноним 29/08/19 Чтв 14:39:35 1463190287
Аноним 29/08/19 Чтв 14:51:37 1463196288
>>1463183
Ты берешь строчку длиной sizeof(int) и считываешь ее в int. Все равно что написать "0010", привести к указателю на int и взять значение, это полный бред. Хочешь считать числа в своем файле - бери fread на весь файл в один char буфер, потом иди по нему функцией strtol.
Аноним 29/08/19 Чтв 15:08:04 1463206289
Читаю kr, дошел до раздела про scope. Там юзают кейворд extern. Буду очень благодарен, если кто-то объяснит нахуй он нужен.
Аноним 29/08/19 Чтв 15:34:44 1463217290
>>1463196
Окей, но я если честно все равно не догнал почему мой вариант не работает. Асло я писал по этому примеру: http://www.c-cpp.ru/content/fread . Можешь, пожалуйста объяснить более подробно?
Аноним 29/08/19 Чтв 18:00:20 1463333291
>>1463217
У тебя в файле числа текстом. Ты читаешь текст, интерпретируя его как целые числа. Если бы ты хотел читать целые числа, тебе и записать их туда нужно было как целые числа (fwrite из подобной же программы или хекс-редактором, например). Если же ты хочешь читать именно числа текстом, то как тебе уже посоветовали, тебе нужно читать fgets/fread в текстовый буфер и потом парсить strtol или strtok/atoi.

Алсо, ты говоришь, что читаешь в бинарном режиме, а флага "b" в fopen у тебя нет.
Аноним 29/08/19 Чтв 18:12:33 1463338292
>>1463333
ах. Я кажется понял теперь, спасибо(чтобы прочитать их как целые числа, то нужно было использовать функцию fwrite для начала, так?). Да, я пропустил флаг, тоже потом заметил.
Аноним 29/08/19 Чтв 18:14:14 1463340293
>>1463206
> нахуй он нужен
В целом extern тебе нужен, чтобы сказать, что где-то есть такая переменная (обычно в другом файле, поэтому и extern - внешняя).
Аноним 29/08/19 Чтв 18:15:14 1463341294
>>1463340
Да, спасибо, я уже вроде как разобрался.
Аноним 29/08/19 Чтв 18:18:44 1463347295
Аноним 29/08/19 Чтв 18:41:05 1463356296
>>1463347
Такое число получается в val из-за того, что мы интерпретируем указатель на char * как указатель на 4 байтный инт(в твоём случае это uint32_t) и сразу разыменовываем его и в итоге он итерпретирует 4 байта строки str как 4 битное число (т.е. возьмёт номера 4 символов из таблицы ASCII и интерпретирует их). Я прав?
Аноним 29/08/19 Чтв 18:41:36 1463357297
Пенис Ричи 29/08/19 Чтв 23:03:39 1463539298
>>1463356
Примерно так, только вот номера символов ни откуда никто не берет, строка так там и лежит, в памяти всегда все в виде чисел и хранится. В >>1463183 допущена именно такая ошибка, fread читает сырые данные в буфер, и ничего с ними не делает и в массиве numbers получаем в итоге мусор, если смотреть на него как на массив интов. Чтобы получить числа тебе нужно либо использовать вместо fread scanf, либо как-то самому парсить считанные данные, например sscanf'ом.
Аноним 30/08/19 Птн 09:57:45 1463662299
>>1463539
Спасибо тебе большое анончик. Добра тебе. Да, я заменил fread на fscanf.
Аноним 02/09/19 Пнд 18:41:28 1465933300
Всех с новым учебным годом! Ближе к середине семестра тред оживет!
Аноним 02/09/19 Пнд 19:16:34 1465950301
>>1465933
Что, уже смотрел расписание?
Аноним 02/09/19 Пнд 20:39:30 1465985302
Помогите тупенькому пазязя
Есть n элементов, среди которых нужно найти наименьший. Если искать линейным поиском, то нужно сделать n-1 сравнений очевидно, т.е. n-1 итераций. А если сортировать по Шеллу, то проходов будет n/2, т.е. почти в два раза быстрее, и в конце запись одного из крайних элементов. Однако элементарных операций (вроде обменов данных между регистрами) намного больше при сортировки Шеллом. Что в итоге будет быстрее и почему?
Аноним 02/09/19 Пнд 20:43:55 1465989303
Аноним 03/09/19 Втр 12:29:40 1466270304
Пидоры, помогите!!!! Не могу найти таблицу кодов хэмминга для ascii символов, чтоб проверить правильность своей программы. или я долбоеб, или этот мир охуел!!!!!!!! НЕ ГУГЛИТСЯБ ЛЯЯЯЯЯЯЯЯЯЯЯДЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Аноним 03/09/19 Втр 12:34:01 1466274305
Аноним 03/09/19 Втр 13:14:47 1466289306
У меня задача - сделать последовательный обмен байтами. Создаю так:

int fd_test;
char *fd_test_path = "/mnt/cache/test";
mkfifo(fd_test_path, 0666);
fd_test = open(fd_test_path, O_RDONLY);

char c = 0; printf("\n");
while(c != '.')
{
if(read(fd_test, &c, 1) > 0) printf("%c", c);
else printf("?:%02X ", c);
}
printf("\n");

close(fd_test);
unlink(fd_test_path);

Тестирую так:
echo -e "message." > /mnt/cache/test

Ждёт ввода. Далее нормально печатает и завершается. Но если в исходящем эхо нет точки (условный терминатор), то бесконечно читает последний байт, как сумасшедшая:

?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A ?:0A .
Аноним 03/09/19 Втр 13:20:23 1466292307
...пока не введёшь точку
echo -e '.' > /mnt/cache/test

Мне нужно, чтобы программа транслировала входящий поток байт-к-байту, пока не поступит байт завершения.
Аноним 03/09/19 Втр 14:36:39 1466345308
>>1466292
>>1466289
Странно. Перестало истерить после смены флага на O_RDWR. Странно, ибо мне же в программе нужно только читать поток, а писать извне... Короче, решено.
Аноним 03/09/19 Втр 17:26:03 1466437309
Зекач, пытаюсь подключить SDL2 к ios проекту. Билд делал по инструкции, собрал либу для arm64, слинковал ее, открыл example project в xcode и по образцу оттуда подключил все нужные фреймворки(shared libraries) ios и все равно при компиляции выдает ошибку линковки о том что не может найти символ _SDL_COREMOTION_SensorDriver", referenced from _SDL_sensor_drivers in libSDL2.a(SDL_sensor.o)

Если проанализировать бинарник собраной либы утилитой nm
nm libSDL2.a | grep "_SDL_COREMOTION_SensorDriver"
такой символ там находит
U _SDL_COREMOTION_SensorDriver
Тип U как я понял это символы, которые определены в других местах. Вот нашел исходник файла, в котором определяется
переменная с нужным названием и действительно она extern
https://github.com/spurious/SDL-mirror/blob/17af4584cb28cdb3c2feba17e7d989a806007d9f/src/sensor/SDL_syssensor.h#L100

По логике проблема должна быть в том что не подключен фреймворк CoreMotion, но он подключен. И вообще не очень понимаю как работает код, где в итоге подключается/присваивается/определяется значение этой переменной
https://github.com/spurious/SDL-mirror/blob/17af4584cb28cdb3c2feba17e7d989a806007d9f/src/sensor/SDL_sensor.c#L40
Т.е. как в сигоспода ищут откуда берется какая-то глобальная переменная, если видят ее обявление?

В чем может быть проблема?
Аноним 04/09/19 Срд 00:01:54 1466628310
Котаны, читаю Прата, и там наткнулся на такое вот:

By definition, the char type uses 1 byte of memory to represent a character. Historically, this character byte has most often been 8 bits, but it can be 16 bits or larger, if needed to represent the base character set.

Не могу вкурить, как байт может равняться 16 битам, если он вроде как по определению 8.
Аноним 04/09/19 Срд 00:30:49 1466639311
>>1466437

>все равно при компиляции выдает ошибку линковки о том что не может найти символ _SDL_COREMOTION_SensorDriver", referenced from _SDL_sensor_drivers in libSDL2.a(SDL_sensor.o)

https://github.com/sdl/sdl-ios-sampleapp - этот проект?

>откуда берется какая-то глобальная переменная, если видят ее обявление?

https://github.com/spurious/SDL-mirror/blob/17af4584cb28cdb3c2feba17e7d989a806007d9f/src/sensor/coremotion/SDL_coremotionsensor.m#L217

Отсюда берется.

Аноним 04/09/19 Срд 00:34:37 1466642312
>>1466628

Прочти ещё раз.
Обычно char - это байт. Но на некоторых платформах он может быть любым, аффтар рекомендует перепроверять, когда пишешь под что-то редкое.
Аноним 04/09/19 Срд 01:08:45 1466658313
>>1466628
>Не могу вкурить, как байт может равняться 16 битам, если он вроде как по определению 8.
Байт по определению минимально адресуемая ячейка памяти, и в эмбеде поныне есть 16- и 32-битные байты.
Аноним 04/09/19 Срд 01:10:20 1466660314
>>1466628
Не читай Прата, читай K&R или стандарт.
byte
addressable unit of data storage large enough to hold any member of the basic characterset of the execution environment
NOTE 1 It is possible to express the address of each individual byte of an object uniquely
NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementation-defined. The least significant bit is called thelow-order bit; the most significant bit is called thehigh-orderbit.

Обрати внимание на NOTE 1. С точки зрения си, байт в машине - это то, что минимально адресуется имплементацией си в этой машине. Т.е. char* yoba = 0; while(yoba++); пройдется по всей памяти этой машины, без скипов.
Аноним 04/09/19 Срд 01:22:23 1466665315
>>1466628
>читаю говно
>возникают проблемы
земля пухом
Аноним 04/09/19 Срд 01:47:16 1466676316
>>1466628
> как байт может равняться 16 битам
Дополню, что если у тебя на машине 16-битные байты, у тебя есть гораздо множество более серьезных проблемы, чем какие-то там названия (алсо, в таком случае они обычно равны машинному слову и называются словами даже в родной документации).

> по определению 8
По определению 8 в октете, но все называют октеты байтами, и это нормально.

>>1466665
Лучше конечно K&R читать, в котором половина кода давно с предупреждениями собирается, новых стандартов нет, важных мелочей нет, и вообще нихуя нет, и даже ричи умер.
Аноним 04/09/19 Срд 02:15:06 1466685317
>>1466676
Ты определись, или вкатываешься в Си, не зная элементарных вещей, без которох рано думать о нюансах стандарта, или компилятор разрабатываешь.
Аноним 04/09/19 Срд 02:15:52 1466687318
>>1466676
ой бля, не ты вкатываешься
Аноним 04/09/19 Срд 02:49:11 1466700319
>>1466676
>Лучше конечно K&R читать, в котором половина кода давно с предупреждениями собирается, новых стандартов нет, важных мелочей нет, и вообще нихуя нет, и даже ричи умер.
Исторический подход в изучении вещей вообще самый правильный. Чтобы начать разбираться в политике, тебе нужно начинать с Платона и Аристотеля, а не читать их краткие содержания, или, тем более, современный учебник политологии для вузов.
В том числе помогает и то, что ты читаешь устаревшую книгу, а значит заранее настроен на то, что она 100% истиной не будет, и нужно при чтении думать головой.

Конечно, не всегда тебе хватит времени изучать какую-нибудь математику, начиная с греков. Но вот си не изучать с K&R, это совсем тупым куда-то спешащим мудаком надо быть.
Аноним 04/09/19 Срд 02:58:47 1466701320
>>1466700
> Исторический подход в изучении вещей вообще самый правильный
PL/1 выучил уже? Или хотя бы B?
Аноним 04/09/19 Срд 03:13:12 1466703321
>>1466701
Попробуй прочитать последний абзац прежде чем предлагать какую-то высосанную из пальца хуйню.
Аноним 04/09/19 Срд 07:39:10 1466731322
>>1466642
>>1466658
>>1466660
>>1466676
> если у тебя на машине 16-битные байты, у тебя есть гораздо множество более серьезных проблемы, чем какие-то там названия
Аноны, спасибо за ответы. Вспомнил то забытое ощущение, как когда тебе всю жизнь говорили, что нельзя делить на ноль или брать квадратный корень из отрицательных чисел, а потом в какой-то момент говорят: "Забудь то, что учил в школе".


>>1466700
> Но вот си не изучать с K&R, это совсем тупым куда-то спешащим мудаком надо быть.
Я не спешу, мне наоборот показалось, что раз в K&R 200 страниц, значит там многое скипнуто и не разжевано.
Аноним 04/09/19 Срд 08:17:04 1466734323
>>1466731
>не разжевано
А вы, однако, тупенький-с. Я вообще считаю, что некоторые темы противопоказано разжевывать в гуманитарном стиле. Один хуй, не вывезешь потом при таком раскладе. В K&R все дается, но чтоб это взять, надо напрячь извилины, тем самым лучше усвоив. И именно так, сука, надо писать все книги по программированию, а не всякое говно по 1000 страниц, от которого у нормального человека опускаются руки учить что-то современное.
Аноним 04/09/19 Срд 16:57:38 1467095324
>>1466734
> так, сука, надо писать все книги по программированию
И потом человек считает, что a[k] = k++; - это нормальный код. И пишет его.
Аноним 04/09/19 Срд 17:10:35 1467113325
>>1466639
Оказывается это баг, в новых версиях либы забыли добавить SDL_coremotionsensor.m в билдскрипт для гейоси.
https://bugzilla.libsdl.org/show_bug.cgi?id=4357

Я потом грепнул вывод утилиты ar и убедился что объектного файла с таким именем нет, но в репозитории есть еще xcode проект для ios в котором уже все нормально и в архиве есть SDL_coremotionsensor.o

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

Надо будет тоже осилить K&R и Linkers and Loaders в придачу, а то чувствую что слабо представляю как это работает и постоянно спотыкаюсь на таких моментах.
Аноним 04/09/19 Срд 17:44:25 1467142326
>>1467095
>И потом человек считает, что a[k] = k++; - это нормальный код
Что в этом коде кажется тебе ненормальным?
Аноним 04/09/19 Срд 17:46:03 1467143327
>>1466628
>как байт может равняться 16 битам, если он вроде как по определению 8.
Ахахахаха
Определений не читал, чем байт отличается от октета не знает.
Добро пожаловать в программисты, сынок. Одним больше, одним меньше...
Аноним 04/09/19 Срд 17:47:13 1467144328
>>1466660
вот эта хуйня:
>implementation-defined
вообще в С и плюсах будет почти везде
Аноним 04/09/19 Срд 18:35:57 1467206329
>>1467142
>Что в этом коде кажется тебе ненормальным?
Да ничего особенного, всего лишь UB.
Аноним 04/09/19 Срд 22:05:37 1467407330
image.png (76Кб, 645x729)
645x729
>>1467095
эмм... где взаимосвязь?
Аноним 04/09/19 Срд 22:59:19 1467446331
>>1467206
>>Что в этом коде кажется тебе ненормальным?
>Да ничего
Зато пришел и насрал в треде какую-то хуйню.
Когда будет, что сказать, тогда приходи, унтерменш
Аноним 04/09/19 Срд 23:34:10 1467474332
Аноним 05/09/19 Чтв 00:50:29 1467504333
>>1467407
> где взаимосвязь?
Анон предлагает читать >>1466734 короткие устаревшие книги, в которых о важных вещах либо упоминается вскользь, либо не упоминается вообще. Я вспомнил распространенный подводный камень, на который часто наступают вот такие читатели K&R как он. В Прате это разжевано. И таких моментов овердохуя.
Аноним 05/09/19 Чтв 01:31:31 1467523334
Screenshot2019-[...].png (395Кб, 1276x750)
1276x750
>>1467504
Прикрепи, пожалуйста, сам, картинку, где я ебу твою маму в рот.
Аноним 05/09/19 Чтв 01:50:01 1467532335
>>1467523
Ну окей, этот конкретный пример там есть, но сколько подобных вещей туда не влезло?
Аноним 05/09/19 Чтв 02:34:06 1467538336
>>1467532
Туда влезло, например, написание менедежера памяти.
Аноним 05/09/19 Чтв 02:38:32 1467539337
>>1467504
Вкатываться так, чтоб со всеми подводными сразу, только долбоебы рассчитывают. Охуели вообще, хотят одну книжку прочитать и быть готовыми к написанию промышленного кода. С Сишечкой это не канает в принципе. Есть множество граней скилла, и нет смысла ставить что-то в приоритет, потому как ты один хуй никто, пока не выдрочишь несколько полных кругов по всем пунктам в течение лет - не месяцев. В начале пути равноценен любой прогресс, а K&R, имхо, дает незаменимый стартовый буст при условии, что читатель не унтерменш. А нежданчики с UB... ну хз, по-моему, опять таки, не будучи обделенным генетически, эту тему можно вскрыть с меньшим оверхедом от вторичности источников, чем оверхед от проеба вначале фундаментальных ништяков, потому что кто-то говно на стол положил и сказал, что это настольная книга. Под фундаментальными ништяками я имею ввиду все те живые знания, которые не привить разжевыванием, а лишь гениально построенным курсом "додумай сам" для ЦА, умеющей в отдачу за книгой.
хуету какую-то настрочил, лень редактировать
Аноним 05/09/19 Чтв 15:07:31 1467749338
Выскажу своё нюфанское мнение. Начинал с КР, вроде всё збс, да только каты там всратые по-началу, алсо листинги на полебла и разжёвываются слабовато. В какой-то момент (начиная где-то со struct) дропнул КР и решил тупа писать хеллоуворлды с Кодворса, а также c cрр и других подобных ресурсов. При возникновении проблем, смотрю КР или того же Прата, или гугл. Если совсем пиздец - осваиваю нужную главу досконально. Имхо сабжи стоит изучать где-то до половины, дальше - только практиковаться. Я что-то делаю не так?
Аноним 05/09/19 Чтв 16:01:53 1467777339
>>1467749
Более-менее так.
Если с твоей точки зрения
>листинги на полебла и разжёвываются слабовато
То твой навык отладки в уме недостаточен и нужно его развивать. Можно принтов нахуячить, если совсем все плохо.
А не искать блядь книгу, автор которой пытается заработать денег на даунах. Разжевывание программного кода в книгах - большое зло. Код самодостаточен, и если ты его читать не можешь, как ты его писать собираешься.
Аноним 05/09/19 Чтв 17:47:49 1467876340
>>1467749
K&R не обломишься и целиком пройти. А что до разжевывания... ну, щас бы забраковать шедевр, пушто авторы не предсказали, как гцц на бубунте запустить, лол
Аноним 05/09/19 Чтв 22:16:44 1468078341
cbooks.jpg (2681Кб, 4032x3024)
4032x3024
>>1467539
По моей практике работы со стажерами, минимум это пикрил. После этого можно о чем-то разговаривать.
Аноним 05/09/19 Чтв 22:51:59 1468096342
>>1468078
Что за говно справа? Почему оно мне не понадобилось? Жонглирую указателями хуем, прекрасно себя чувствую.
Аноним 05/09/19 Чтв 23:03:51 1468106343
>>1467095
>a[k] = k++;
>Undefined Behavior

Схуяли вдруг там будет UB?
Ты точно ничего не напутал?
Не мог бы ты привести какие-то пруфы?
Аноним 05/09/19 Чтв 23:05:01 1468107344
Аноним 05/09/19 Чтв 23:26:00 1468123345
>>1468106
В принципе, есть стандарт. Там написано. В разделе Expressions, что ли.
Но тот анон его не читал, пересказывает по каким-то мудовым книгам, которые принимает за основополагающие.
Аноним 05/09/19 Чтв 23:38:26 1468131346
Аноним 06/09/19 Птн 00:02:53 1468163347
>>1468131
> какой-то говносайт
Тем временем в стандарте: If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.
Аноним 06/09/19 Птн 00:14:00 1468175348
>>1468163
Чем тебе не value computation?

Давай пруф (с любого говносайта, кроме мейлача) с примером выражения типа a = i++;
Аноним 06/09/19 Птн 00:15:13 1468176349
>>1468175
Блядь, в первой строке должно было быть i в квадратных скобках.
Аноним 06/09/19 Птн 08:14:57 1468243350
>>1468096
Очевидно что речь идет об объеме знаний, как именно они получены значения не имеет, конкретные общеизвестные книжки предлагаются для ориентира.
Аноним 06/09/19 Птн 08:40:15 1468252351
Capture.PNG (19Кб, 800x452)
800x452
Я вам покушать принес.
Аноним 06/09/19 Птн 09:16:55 1468261352
>>1468252
высрал хуйню и радуется
и показал пример, чтобы другие не высирали такую же хуйню
Аноним 06/09/19 Птн 09:22:09 1468263353
Аноним 06/09/19 Птн 09:30:04 1468269354
image.png (380Кб, 723x470)
723x470
Найс тред живет...
Аноним 06/09/19 Птн 10:52:12 1468320355
Аноним 06/09/19 Птн 10:54:42 1468322356
>>1468320
заголовочный файл

<iframe src="https://pastebin.com/embed_iframe/wyrjWrpx" style="border:none;width:100%"></iframe>

Объясните долбоебу почему цикл при вводе нормально только первый проход делает а потом пропускает строки.
Аноним 06/09/19 Птн 11:19:23 1468343357
БЛЯТЬ, понимаю что нужно учить английский для программирования, но я настолько туп что не могу просто. Ничего не лезет в голову
Аноним 06/09/19 Птн 12:44:16 1468410358
>>1468343
потсавь на тлефон сололеарнну или какие другие курсы, выбирай курсы на английском там абзацы не большие читаешь неаонятные слова в словаре смотришь, потом переходи на freecodecamp там курсы объемнее потихоньку нахватаешься по крайней мере читать научишься.
Аноним 06/09/19 Птн 13:31:47 1468433359
>>1468322
Хуй знает, анончик, но если у тебя Windows, то вчера я с такой же залупой столкнулся. Ломается ввод, когда читаешь char, будь то ch=getchar(), будь то scanf("%c",&ch). Пиздос какой-то. На твоем месте я бы просто не выебывался с оптимизацией puts/gets и все 4 раза проделал printf/scanf. scanf сама пробелы пропускает, так что можно обойтись без getchar.
Аноним 06/09/19 Птн 14:26:00 1468494360
>>1468131
Поздравляю, ты тоже вместо чтения стандарта читаешь хуй знает что.
Аноним 06/09/19 Птн 14:29:37 1468499361
>>1468175
a [ i ] = i++;
что в какой последовательности выполнится?
1. i++?
2. определение адреса a [ i ]?
3. присвоение i?
4. присвоение результата i++?

ссылку на стандарт (а не на говносайт) дать?
или сам найдешь?
Аноним 06/09/19 Птн 14:52:37 1468526362
Аноним 06/09/19 Птн 14:57:34 1468533363
>>1468433
Windows, там ещё мусор какой то вместо price пишется.
Аноним 06/09/19 Птн 15:21:47 1468547364
>>1468494
>>1468499
Ну что ты ёрзаешь?

Я же попросил привести 1 (один) пример из независимого источника, где код типа a[k] = k++; явно приводится как пример undefined behaviour, с пояснениями.

Есть миллион таких примеров для a[k++] = k++;, что не удивительно.
Я же прошу показать всего один.
Аноним 06/09/19 Птн 15:23:39 1468549365
>>1468547
В глаза ебаться перестань: >>1467523
Или для тебя K&R недостаточно авторитетный источник?
Аноним 06/09/19 Птн 15:35:53 1468559366
>>1468549
Убедил, лол.

Однако, я ебал такое си.
На мой взгляд, тут вообще всё очевидно и defined.
Если такие вещи неочевидны создателям компиляторов, то нахуй такие компиляторы.

Я, всё-же, думаю, что со времён K&R многое изменилось, и теперь такое должно нормально работать везде. Т.е., слева и справа будет взято i, а инкремент будет потом, после присваивания и перед точкой с запятой.
Аноним 06/09/19 Птн 16:00:37 1468587367
>>1468559
Не должно. потому что оператор присваивания не гарантирует что все, что справа от "=" будет вычислено раньше, чем все, что слева.
Аноним 06/09/19 Птн 16:14:00 1468604368
>>1468587
После некоторых размышлений и прочтения куска из K&R, вынужден согласиться.
Аноним 06/09/19 Птн 16:46:02 1468638369
.png (20Кб, 566x381)
566x381
Прекольные эти многомерные массивы.
Аноним 06/09/19 Птн 18:03:10 1468715370
>>1468526
а теперь обоснуй
с какого хуя у тебя lvalue первее rvalue
Аноним 06/09/19 Птн 18:03:48 1468718371
>>1468547
>Ну что ты ёрзаешь?
Как на твоей мамке и не ерзать, пока ты хуйню на дваче несешь?
Аноним 06/09/19 Птн 18:04:13 1468720372
>>1468547
Характерно, что на простой вопрос ты так и не ответил, специалист.
Аноним 06/09/19 Птн 18:05:09 1468724373
>>1468559
>Я, всё-же, думаю, что со времён K&R многое изменилось
Вот же ж ебаный мудак.
Думает он.
Тебе сказали русским языком: ЧИТАЙ ЕБАНЫЙ СТАНДАРТ.
А ты все думаешь
Тебе нечем
Аноним 06/09/19 Птн 19:03:48 1468829374
КиР слишком предания старины глубокой, Прата слишком разжевывает для тупых, а Шилдт охуенен, но чуть староват.
Аноним 06/09/19 Птн 19:06:54 1468835375
>>1468724
Существует ли перевод стандарта на человеческий язык?
Аноним 06/09/19 Птн 19:09:50 1468837376
>>1468835
Стандарты для разработичков компиляторов и форумных аутистов. Нормальный человек просто не пишет плохо пахнущий код.
Аноним 06/09/19 Птн 19:43:41 1468875377
>>1468829
>Шилдт
спасибо, мне как раз масла на яичницу не хватало
Аноним 06/09/19 Птн 22:18:22 1469079378
>>1446278 (OP)
Можно ли отключить stack protector в clang только для одной конкретной функции?
Через #pragma или __attribute__ как-нибудь? Или только вырубать во всей программе?
Аноним 06/09/19 Птн 23:28:05 1469121379
>>1468835
если английский для тебя не человеческий, то ты какой-то червь-пидор с венеры
любой перевод будет ущербным. потому что согласовали все именно в английском оригинале
Аноним 06/09/19 Птн 23:28:40 1469123380
>>1468837
Точно.
Нормальный человек вообще ничего не читает. Сразу пишет. Сразу охуенный код. Стандарты для пидоров и хуесосов
Так держать!
Аноним 06/09/19 Птн 23:50:32 1469134381
>>1469079
Вроде бы нет, но ты можешь просто положить функцию в отдельный файл.
Аноним 07/09/19 Суб 00:01:09 1469138382
677.png (1180Кб, 1000x1400)
1000x1400
>>1446278 (OP)
Мда, начало сентября и тред по Си внезапно и неожиданно взлетел. Интересно, с чем же это может быть связано?
Аноним 07/09/19 Суб 00:03:21 1469140383
>>1469138
Вот это ты открыл всем глаза.Мы то не знали что в си и асмо треде чаще всего сидят студенты и ебутся с лабами
Аноним 07/09/19 Суб 00:08:35 1469143384
изображение.png (100Кб, 782x241)
782x241
>>1469140
Да грустно это всё. Такой мощный язык, столько всего можно на нём замутить, очень быстрый, очень производительный, очень ресурсоёмкий, можно писать очень близко к железу, при этом он максимально прост и прозрачен. А в итоге получается, что он нужен только школоте с laba1.c.
Аноним 07/09/19 Суб 00:12:58 1469145385
>>1469143
как пример я не студент и не школота, начал изучать си, хотя в свое время был курс и в том числе лабы, о которых я вообще ничего не помню.
Аноним 07/09/19 Суб 00:14:12 1469147386
>>1469145
>начал изучать си
>в свое время был курс и в том числе лабы, о которых я вообще ничего не помню
Кек, вся суть отечественных шараг.
Аноним 07/09/19 Суб 00:18:47 1469148387
>>1469147
курс был не большой, специальность все таки связанна с программирование опосредованно
Аноним 07/09/19 Суб 00:21:31 1469153388
>>1469148
Почему тогда решил вк4атиться, если твоя специальность
>связанна с программирование опосредованно
Аноним 07/09/19 Суб 08:43:58 1469231389
Аноним 07/09/19 Суб 14:07:28 1469359390
Существуют ли еще языки такие же охуенные как Си?
Аноним 07/09/19 Суб 15:56:57 1469456391
>>1469359
Нет. Я пришел к выводу, что даже если Си не самый удобный язык для всех задач, он является единственным НЕзашкварным языком.
Аноним 07/09/19 Суб 22:29:08 1469624392
av-11954.jpg (17Кб, 276x261)
276x261
СВЯТЫЕ МОЗОЛИ СТОЛМАНА ЧТО ЭТО БЛЯДЬ ТАКОЕ!?
static char ×
concat (s1, s2)
char ×s1, ×s2;
{мясо функции}
Листаю стандарт кодирования GNU, и тут такая хуйня. Это чо эта такое та? Какое то хитровыебаное определение типов у аргументов функции?
Аноним 07/09/19 Суб 23:03:58 1469633393
>>1469624
Это синтаксис из 80х
Аноним 08/09/19 Вск 00:48:23 1469668394
>>1468829
>Шилд
это какой?у него там несколько книг?
новичек
Аноним 08/09/19 Вск 08:42:11 1469753395
>>1469143
Ну мне нужен! Пишу только на нём в основном, точнее на крестах как си с классами. Только спрашивать нечего, язык-то простой.
Аноним 08/09/19 Вск 15:44:19 1469937396
Можно ли с помощью сишного винапи отслеживать действия юзера? Ну типа нажата такая-то клавиша, курсор в позиции икс и т.п.. не малварь. В Гугле только доки и примеры на сишарп, но не хотелось бы ради этого учить новый язык
Аноним 08/09/19 Вск 16:13:57 1469952397
Аноним 08/09/19 Вск 17:05:15 1469967398
Аноним 08/09/19 Вск 17:10:23 1469970399
Дейтелы "Си для погромистов с введением в Cи11" - топовая книжка по Си.
Аноним 08/09/19 Вск 19:15:56 1470026400
Аноним 09/09/19 Пнд 14:42:32 1470377401
Днонетчик >>1461769 снова тут. Читаю 4 главу K&R и не совсем понимаю необходимость раздельного declaration и definition функций. Поэкспериментировал немного, объявляя функции в разных файлах, и в этом случае я еще могу понять, для чего нужен прототип - компилятор компилирует каждый файл по отдельности и на этом этапе ему достаточно просто заголовка вызываемой функции, я так понимаю, дальнейшее это уже забота линкера. Но зачем нужен прототип, если вызываемая функция расположена в том же файле, что и вызывающая, просто чуть ниже по тексту? При этом если вызываемая функция определена выше вызывающей, все работает даже с -sdt=89
Аноним 09/09/19 Пнд 14:43:09 1470378402
Аноним 09/09/19 Пнд 14:47:05 1470381403
>>1470378
Ты ошибся не просто тредом, а даже целкой доской
Тебе в /га, там тебя заждались
Аноним 09/09/19 Пнд 15:34:42 1470412404
>>1470377
> зачем нужен прототип, если вызываемая функция расположена в том же файле, что и вызывающая, просто чуть ниже по тексту
У Си старый однопроходной парсер, поэтому если вызываемая ниже вызывающей - компилятор о вызываемой на момент вызова еще не знает, информации о типах у него нет. Вызвать-то он может (в старых стандартах для этого всякие неявные инты есть), но ничего хорошего без прототипа не жди.

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

Поэтому чтобы избавиться от прототипов в пределах файла часто просто располагают все функции "снизу вверх" (main внизу, нужные ей функции повыше, всякая мелочь в самом начале файла, прототипы только для рекурсивных функций).
Аноним 09/09/19 Пнд 17:17:19 1470470405
>>1470412
Спасибо, анончик. Добра тебе!
Аноним 10/09/19 Втр 21:34:54 1471410406
>>1446278 (OP)
int count_one_bits(int n) {
int count = 0;
while (n) {
if (n & 1) { ++count; }
n >>= 1;
}
return count;
}
Задание 1) что делает этот код не запуская? 2) найти проблему в коде
Аноним 10/09/19 Втр 22:29:26 1471441407
>>1471410
Тебе кажется, что тут викторина для альтернативно одаренных?
Если ты знаешь, что в коде есть проблема, то на хера тебе знать, что этот код делает?
Вот когда исправишь проблему, приходи, мы тебе ответим, что он делает.

Кстати, если ты склонен писать иф блаблабла в одну строку, то на хуя ты там скобочки вкрячиваешь?
Какое-то особое извращение.
Аноним 10/09/19 Втр 22:37:31 1471448408
>>1471410

Что делает? Неправильно считает единицы в двоичном представлении числа. Где проблема? В том, что если старший (знаковый) бит - единица, он будет копироваться в младшие биты до бесконечности, и условие всегда будет истинным.
Аноним 10/09/19 Втр 23:00:04 1471458409
>>1471441
Что ты такой злой, тебе задачку принесли размять мозги.
>>1471448
Да. Если число отрицательное, то бесконечный цикл.
Аноним 11/09/19 Срд 01:52:55 1471528410
>>1471458
Я себе так мозги разминаю по 40 в неделю
ЗА ДЕНЬГИ!

А ты даже не догадался функцию переименовать.

>>> в вашем древнем языке есть?
Аноним 11/09/19 Срд 01:56:05 1471530411
>>1471458
>Если число отрицательное,
то ub ub кладбище пидор
Аноним 11/09/19 Срд 03:23:02 1471554412
насрал в тред жидким #define anusPTR ((void *)anus)
Аноним 11/09/19 Срд 03:25:07 1471557413
ой блин, забыл место в жопе освободить после int ANUSAPI ANUSSTACKRULE GOWNOSTACKRULE destroy_gowno(void , void , void , void , void *) ну все пиздец
Аноним 11/09/19 Срд 03:32:06 1471560414
может объясните мне почему каждый сишный проект превращается в 100 тысяч строк кода с 8 точками входа для апишек а самый используемый тип данных это void? студенты не отвечайте на вас всем похуй
Аноним 11/09/19 Срд 09:30:58 1471638415
>>1471530

Да ваще пиздец, даже + не гарантирует, сто не будет ub.
Аноним 11/09/19 Срд 10:25:34 1471655416
>>1471560
>студенты не отвечайте на вас всем похуй
ну блядь, за что ты нас так?..
Аноним 11/09/19 Срд 11:05:37 1471672417
>>1471560
>а самый используемый тип данных это void?
с ним можно указатели вертеть
Аноним 11/09/19 Срд 15:14:02 1471795418
>>1471448
В чем разница между n>>=1 и n/=2, если n>0?
Аноним 11/09/19 Срд 15:26:22 1471803419
>>1471795

Нет её. Компилятор заменяет умножение или целочисленное деление на 2 на сдвиги.
Аноним 12/09/19 Чтв 03:30:26 1472102420
>>1471560
Потому что 10-е правило Гринспена. Как ты динамическую типизацию без войдов запилишь?
Аноним 12/09/19 Чтв 10:46:10 1472174421
Аноны, как вкатиться в Си если все что я делал, связанное с программированием - это чуть-чуть писал на АВР ассемблере. С чего начать?
Аноним 12/09/19 Чтв 11:28:02 1472190422
.png (2800Кб, 300x420)
300x420
>>1472174
В картинке - 7z-архив, а в архиве - книга.
Аноним 12/09/19 Чтв 12:52:08 1472225423
>>1472190
А есть для не программистов?
Аноним 12/09/19 Чтв 13:48:58 1472244424
Какую библиотеку посоветуете для работы с json?
Желательно, чтобы она умела раскидывать выходные данные в заданную структуру, автоматически выделяя память.
Аноним 12/09/19 Чтв 15:45:38 1472325425
Аноним 12/09/19 Чтв 16:55:47 1472365426
>>1472225
Это для новичков на самом деле. Для программистов есть справочник Шилдта и стандарты.
Аноним 12/09/19 Чтв 23:53:48 1472552427
>>1446278 (OP)
C джуны вообще существуют, или все, кто профессионально пишет на c рождаются с 10-летним стажем?
13/09/19 Птн 17:50:00 1472893428
>>1472552
ломают матрицу ещё у бати в яйцах, че хотел то?
Аноним 13/09/19 Птн 23:12:22 1473028429
>>1472552
Ребята, не стоит вскрывать эту тему. Вы молодые, шутливые, вам все легко. Это не то. Это не Чикатило и даже не архивы спецслужб. Сюда лучше не лезть. Серьезно, любой из вас будет жалеть. Лучше закройте тему и забудьте, что тут писалось. Я вполне понимаю, что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь пытливых - стоп. Остальные просто не найдут.
На самом деле, всю низкоуровневую инфраструктуру создают сущности не от мира сего, но чтоб у людишек не возникало слишком много вопросов, придумали Си, на котором что-то эдакое можно худо-бедно закосплеить и смириться, что просто не осилил.
Аноним 13/09/19 Птн 23:20:15 1473032430
>>1472552
В embedded существуют, я был им де факто, работал за еду в продуктовой электронной компании, меня выпиздили потом.
Аноним 14/09/19 Суб 03:16:35 1473092431
>>1472174
С любой нетолстой и неновой книжки, K&R там или даже прости господи Бочков-Субботин.
Тебе будет просто - си это макроассемблер (если есть в этом сомнения, включи у компилятора трансляцию C в ASM и поизучай выдачу).
Аноним 14/09/19 Суб 18:31:25 1473358432
IMG201909141828[...].jpg (85Кб, 1280x720)
1280x720
Парни, где проблема? Когда пробую ввести цифры, то выдаёт nanт(может подскажете как правильно вводить данные) Буду очень благодарен. Начал изучать сишку неделю назад.
Аноним 14/09/19 Суб 18:38:48 1473363433
>>1473092

Это верно, только если отключить оптимизатор.
Аноним 14/09/19 Суб 18:41:50 1473364434
>>1473358

В строке 6 у тебя кавычка стоит перед скобкой, а должна стоять сразу после последнего %f.
Вводить правильно так:
1 8 10

Само уравнение вводить нельзя, можно вводить только коэффициенты.
Аноним 14/09/19 Суб 19:08:23 1473375435
>>1473364
Большое спасибо за помощь) Теперь это работает. Вот только при других цифрах иногда выводит пустую строку.
Аноним 14/09/19 Суб 19:15:08 1473378436
IMG201909141913[...].jpg (10Кб, 502x132)
502x132
>>1473375
Пофиксил. В строке с puts надо было поставить кавычки.
Аноним 15/09/19 Вск 19:54:27 1473871437
.png (2842Кб, 300x420)
300x420
>>1472190
Забыл исходники примеров добавить. Исправляю сию оплошность.
Аноним 18/09/19 Срд 06:52:36 1475817438
Почему аллоки так криво работают в функциях?
К примеру:
struct t challoc (void) {
return (struct t
) malloc (sizeof(struct t) * n);
}
в мэйне после каста "поинтер = challoc ()", указатель точно не будеть указывать на NULL (т.е. типа память точно дали), но записать что-либо на его структуру нихуя не получится.
Аноним 18/09/19 Срд 07:26:48 1475826439
>>1475817
Мудак, ты должен поинтер возвращать, а у тебя какая-то хуйня
Аноним 18/09/19 Срд 07:30:03 1475827440
>>1475826
>(struct t) malloc (sizeof(struct t) n);
Это же опечатка, каюсь-изеняюсь
Аноним 20/09/19 Птн 14:10:21 1477599441
Посоветуйте что можно про структуру программ почитать, например пишу условный калькулятор делаю функции 1 ввод-вывод перевод из одой ситемы в другую как определить сколько вообще функций делать?
Аноним 20/09/19 Птн 14:39:17 1477618442
>>1477599
Зачем тебе это? Лепи как получается.
Аноним 20/09/19 Птн 19:42:16 1477775443
Аноним 21/09/19 Суб 01:17:30 1478156444
>>1446278 (OP)
 вонючее веб-чмо решило вкатиться на досуге в Сишечку. Прочитал учебник, пожонглировал указателями, хотел бы какой-нибудь проект мини запилить, чтоб вкинуть на гитхаб и порадоваться, какой он нужный и скачиваемый. Что можно запилить? За полвека существования С разве не написали на нём все либы, какие вообще можно представить только?
Аноним 21/09/19 Суб 03:03:42 1478173445
Аноним 21/09/19 Суб 13:16:11 1478269446
сап, начал читать Кернигана- так там с первых строк уже неактуальная инфа, приходится банально гуглить, что прогу в СИ уже нельзя начинать с main{ , а только с int main{ , не работают элементарые проги из самого начала книги, вместо того, что говорится в книге, печатается либо нихуя, либо что-то левое из юникода, есть вообще смысл дальше ковыряться в этом говне мамонта? слышал, что это библия для сишников, но не думал, что она и правда настолько стара
Аноним 21/09/19 Суб 13:20:59 1478271447
>>1478269
Хз что за у тебя компилятор, но в майне можно ничего не возращать даже если он инт. А можно вообще поставить войд)) и оно скомпилируется. Всё там работает, перепроверь что правильно скопировал код.
Аноним 21/09/19 Суб 15:22:27 1478335448
>>1478269
Что-то не припомню глобальных проблем. Даже если они и есть, то только вначале. Вкатился в среду - идешь по книжечке и радуешься жизни. Эти минутки гуглежа ни в какое сравнение с часами гуглежа для неумеющих мыслить, кто начал Си с современной говнолитературы.
ПыСы сам уже с добрых полгода под Linux сидел на момент вката в Си. Ибо нехуй. Там в конце еще интересное про системные вызовы UNIX, read/write, brk/sbrk, хуё/моё.
Аноним 21/09/19 Суб 15:25:35 1478338449
>>1478269
>>1478335
>современной говнолитературы.
это какой?прата - говнолитература?
Аноним 21/09/19 Суб 15:54:12 1478357450
Только не обоссыте сразу, ок? Студенота. Стоит ли вкатываться в Си и микропроцессоры, если в мухосранске ничего об этом не слышн?. Зато есть несолько школ жавы с возможностью трудоустройства
Аноним 21/09/19 Суб 16:05:04 1478368451
>>1478357
С нуля в микроконтроллеры и низкоуровневое говно,да так чтобы получить работу ты не вкатишься( см. >>1473028 )
если фо фан,то можно
Аноним 21/09/19 Суб 16:48:00 1478410452
Аноним 21/09/19 Суб 21:33:36 1478629453
Насколько долог путь от первого чаптера Кер&Ритчи до создания своей первой кошкодевочки? Да так, чтобы с нейросетью и асции-рисунком?
Аноним 21/09/19 Суб 22:30:27 1478671454
>>1478629
Не долго. Достаточно выучить язык, потом освоить нейросетки, потом вывод графики и можно начинать пробовать. Язык осваивается за три дня, нейросетки за день, а графика и прочий гуй за два, плюс еще день на запил прототипа. Неделя всего.
Аноним 22/09/19 Вск 00:16:05 1478739455
>>1478671
Это если ты сеньёр-помидор, который уже всё повидал и новые технологии осиливаешь с пол-пинка. У новичка же уйдут годы.
Аноним 22/09/19 Вск 01:16:38 1478769456
>>1478671
Бда бда бда, а потом у таких мегамозгов через допустим все работает и дальше примитивного прототипа не уходит.
Аноним 22/09/19 Вск 01:17:08 1478770457
Аноним 22/09/19 Вск 01:48:23 1478773458
>>1478368
>(см. 1473028)
Эмм, я рофлил вообще-то. А за всамделишную ситуацию не шарю.
мимо студент-не-бейте-лучше-абассыте
Аноним 22/09/19 Вск 01:51:37 1478775459
>>1478770
>автокоррекция
Сидит на борде со смартфона, стало быть, не достаточно уважает наш тред, чтоб соблюдать культуру капчевания за настольным ПК. Мы ему не фастфуд! Обоссым его!
Аноним 22/09/19 Вск 11:31:16 1478893460
>>1478775
Ахаха, отошёл от сычевальни на кровать, и сразу попался.
Аноним 22/09/19 Вск 15:28:48 1479105461
>>1446278 (OP)
Двачеры, ответьте: есть ли компилятор Си для Sublime Text 3? Если есть, как его установить?
Аноним 22/09/19 Вск 16:02:57 1479132462
>>1479105
А просто через gcc собирать, не? Честно говоря не шарю за этот редактор, но обычно в подобных редакторах можно открыть консоль, и собирать через консоль с помощью gcc.
Аноним 22/09/19 Вск 16:18:16 1479147463
>>1479105
Сердце обливается кровью за любимый тредик...
Аноним 22/09/19 Вск 16:31:59 1479169464
Screen Shot 201[...].png (75Кб, 561x565)
561x565
>>1446278 (OP)
Есть тут спецы по pthread?
Правильный ли это код для корректной работы pthread_cond?
Может ли тут случится deadlock?
Аноним 22/09/19 Вск 16:41:03 1479185465
Аноним 22/09/19 Вск 16:44:58 1479190466
>>1479169
>спецы по pthread
Сап двач, в моей мухосрани нет такой вакансии, переквалифицироваться западло, еот бросила, реквестирую способы ркн.
Аноним 22/09/19 Вск 19:50:29 1479338467
Сап, Сишники! Вопрос -- есть ли в СИ функция нахождения целой части от деления?
Аноним 22/09/19 Вск 20:01:31 1479352468
Аноним 22/09/19 Вск 20:06:25 1479359469
>>1479352
Спасибо большое, всё работает!
Аноним 22/09/19 Вск 21:51:47 1479450470
>>1479338
>функция
Алё, DIV/IDIV оставляет целую часть в AX, а остаток - в DX. Если с float, то или кастами, или floor().
Аноним 22/09/19 Вск 21:52:30 1479452471
>>1479338
>функция
Алё, DIV/IDIV оставляет целую часть в AX, а остаток - в DX. Если с float, то или кастуешь в int (поддерживается на уровне архитектуры), или floor().
Аноним 22/09/19 Вск 21:53:09 1479453472
>>1479450
сука Абу, нахуй косплеить возможность отмены отправки, когда оно не працюет?!!
Аноним 23/09/19 Пнд 16:33:27 1479925473
>>1446278 (OP)
Добрый день.
У меня возникло пару вопросов.
1) Как оформлять библиотеку в Си?
В .c файле писать тела функций, а в .h файле - заголовки, переменные, массивы и макросы, верно?
А если сделать библиотеку полностью в .h файле, не будет ли это быдлокодом?
1)Зачем вообще нужны inline функции(фактически макросы).
Увеличить быстродействие? Но пару дополнительных тактов на вызов никак особо не повлияют на быстродействие, если там не частоты, сравнимые с частотой процессора.
Только больше проблем доставляет тем, что их нужно объявлять только в .h файле, как макрос, и увеличивает вес программы.
Аноним 23/09/19 Пнд 18:52:09 1480091474
>>1479925
>полностью в .h файле
Охуенно ты придумал. Вот у тебя скомпилированы .o, использующие одну библиотеку. Функции же библиотеки не находятся в отдельном .o, а продублированы в каждом из твоих .o. И откуда линкеру-то, блядь, знать, что они идентичны, и какие копии можно выбросить?
>те же макросы
Нет, макросы обрабатывает препроцессор, который без задней мысли тупо заменяет текст(текст1,текст2,...) на то, что в дефайне, подставляя содержимое скобок. Ему похуй на типы - это уже проблемы конпелятора, которому скормили развернутые макросы. inline же позволяет компилятору не делать call/ret, полностью сохраняя при этом поведение, определенное для вызова функции, копируя что надо, и т.д. и т.п.
Аноним 23/09/19 Пнд 20:37:00 1480241475
У меня есть код, там используется void (как по-мне, так код чище и понятнее, не надо городить присваивания к другим типам и все такое. В той конкретной ситуации считаю оправданным).

(uint64_t
)vptr++ компилируется как addq $1
(uint64_t)(vptr++) компилируется как addq $1
(uint64_t
)(vptr)++ компилируется как addq $1

Как писать-то? Вариант который использую я (типа vptr += 8, например) кажется мне некрасивым.
Аноним 23/09/19 Пнд 20:38:13 1480243476
>>1480241
Звездочки сожрало. В приведении типа, где (uint64_t) конечно же я имел ввиду указатель на 64 битное беззнаковое
Аноним 23/09/19 Пнд 20:45:30 1480249477
>>1480243
5 + 5
(5 + 5)
(5) + 5
Есть ли между этими выражениями, какая то разница? Мммм?
Аноним 23/09/19 Пнд 20:46:47 1480251478
>>1480249
Да, с точки зрения компиляции есть, так как по стандарту выражение рассматривается справа налево, скобки меняют этот приоритет.
Аноним 23/09/19 Пнд 20:48:14 1480253479
>>1480249
Дополню. Лично я, когда непроходимо просто инкрементировать на 1, пишу так:
(uint64_t)x++;
Если больше чем на единицу, то:
(uint64_t
)(x + 3);
Аноним 23/09/19 Пнд 20:49:01 1480256480
>>1480253
В данном случае мне нужно инкрементировать УКАЗАТЕЛЬ, а не число.
Аноним 23/09/19 Пнд 20:50:07 1480257481
>>1480251
Да, это так. Но в данном случае, как при компиляции может поменяться выражение?
Или речь не только об сложении?
Аноним 23/09/19 Пнд 20:52:05 1480259482
>>1480257
Ну так, если я инкрементирую указатель на uint16_t, к примеру, то в памяти значение куда указывает указатель должно сместиться на 2 байта, а в случае указателя на uint64_t на 8 байт.

Вот я и спросил, можно ли это как-то написать в случае в void-указателем, или только так как я и делаю сейчас - прибавлять sizeof(type)?
Аноним 23/09/19 Пнд 21:08:11 1480267483
>>1480259
Дошло)
Можно так:
void p;
p = (uint16_t
)p + 1;
Увеличит на uint16_t.
Аноним 23/09/19 Пнд 21:08:50 1480268484
>>1480267
Моча все звездочки трет, но там везде указатели.
Аноним 23/09/19 Пнд 21:11:07 1480270485
>>1480259
void нельзя инкрементить\декрементить по стандартну. Там где это можно (данное расширение в вижуал студии есть точно) - там void инкрементится как char*
Аноним 23/09/19 Пнд 21:14:17 1480275486
>>1479169
Хз,как ты эти функции вызываешь и где...
Аноним 23/09/19 Пнд 21:15:18 1480280487
Аноним 23/09/19 Пнд 21:16:39 1480284488
>>1480270
Но можно привести voidЗВЕЗДОЧКА, к какому либо типу и инкриментировать, как я описал здесь:
>>1480267
Аноним 23/09/19 Пнд 21:20:57 1480291489
>>1480284
Тогда уж более чисто написать vptr += sizeof(uint16_t)
Аноним 23/09/19 Пнд 21:25:40 1480296490
>>1480291
Ну это если только тебе нужно инкриментировать на размер какого то типа. А если нужно инкриминтировать на n размеров какого либо типа?
Аноним 23/09/19 Пнд 21:27:42 1480297491
23/09/19 Пнд 21:29:31 1480299492
>>1480297
vptr += sizeof(uint16_t) * n; // Я не осилил адресную арифметику. Извините.

исправил, не благодари
Аноним 23/09/19 Пнд 21:32:19 1480304493
>>1480299
Че это? Компилятор раскроет sizeof(uint16_t) как 2 и умножит его на n , если это неизвестная то в рантайме умножит, если я его введу в виде константы то во время компиляции.

vptr += sizeof(uint16_t) * 6 раскрывается как addq $12
Аноним 23/09/19 Пнд 21:50:55 1480337494
>>1480297
Ну чорт знает, операция умножения вродь больше тактов занимает, да и постоянный вызов sizeof(), ну хз хз.
Аноним 23/09/19 Пнд 21:53:18 1480343495
>>1480337
Так там не будет умножения если n является константной. Sizeof точно так же на этапе компиляции раскрывается (или препроцессора? Не уверен), это не вызов.
А если n не является константой, то там в любом случае будет runtime вычисление
Аноним 23/09/19 Пнд 22:01:07 1480353496
>>1480343
А почему умножения не будет? Поподробнее...
Аноним 23/09/19 Пнд 22:03:03 1480356497
>>1480353
Ааа, кажись понял, ты про то, что компилятор эту переменную еще в препроцессоре посчитает? Ну да... это если обе константы.
А в Runtime вычислении, сложение выиграет sizeof()*n
Аноним 23/09/19 Пнд 22:04:13 1480357498
>>1480353
Потому-что в случае если на месте n константа, то компилятор производит вычисления во время компиляции, так как они всегда будут неизменны.
Пример:
x = 6 2. Компилятору нет смысла это компилировать как sall $1 (сдвиг влево на 1), или тем более как mul $2 (умножение на 2), потому-что значение можно вычислить во время компиляции.

Так и в случае
vptr += sizeof(uint16_t)
6
Компилятор из этого сделает
vptr += 12
Аноним 23/09/19 Пнд 22:05:06 1480359499
>>1480356
Это как же ты в runtime неизвестное количество n посчитаешь без умножения?
Аноним 23/09/19 Пнд 22:07:20 1480364500
>>1480356
Алсо, на godbolt проверил - что vptr += sizeof(uint16_t) n, что vptr = (uint16_t) + n компилируются одинаково.
Аноним 23/09/19 Пнд 22:08:15 1480365501
>>1480241
ну хз, я бы вообще писал ++(uint64_t∗)vptr
Аноним 23/09/19 Пнд 22:10:41 1480368502
>>1480365
Не будет компилироваться
Аноним 23/09/19 Пнд 22:41:09 1480411503
>>1480368
Ой бля, точно, cast же rvalue...
ПЕРЕКАТ Аноним # OP 24/09/19 Втр 05:36:57 1480535504
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов