Этого треда уже нет.
Это копия, сохраненная 21 октября 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
C Programming Language.png78 Кб, 792x1023
C Programming Language #47 /clang/ # OP 1446278 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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)
2 1446286
Первонах.
3 1446321
>>46286
Банер с версией и автором спрячь. Твою софтину безопасно юзать в пайпах?
# OP 4 1446330
Кстати, июньский драфт C2x, если вдруг кто-то еще не видел:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf
5 1446384
>>46321
Что такое пайп?
6 1446417
>>46384
Pipe

Например, 2+2/2 | math.c
.png3 Кб, 310x168
7 1446486
>>46417
Не, там зацикливание бесконечное. Прога первые данные переварила и ожидает из пайпа еще данные, а их нет. Но правильную работу можно наверное реализовать, только я не знаю пока как.
8 1446517
>>46486
Не из пайпа ждёт программа данные, а из stdin. Разбирайся.
9 1446581
>>46330
Спасибо.
10 1446584
Сап. Достаточно ли книги Kernighan & Ritchie и уверенного знания С++, что бы сказать что я знаю С?
11 1446673
>>46584
Конечно нет
.png9 Кб, 462x291
12 1446767
>>46517
Не ипу как автоматически сделать. Сделал пока так: если прогу вызвать с аргументом, то одно выражение читается, а если без аргументов то зацикливается.

То есть если вызвать так:
echo 2+2 | math -pipe
То будет работать нормально вроде бы.
13 1446790
>>46767
Разбирайся. Не ленись. Убери этот сраный банер.

Я б на твоём месте не стал бы ключ писать, а проверял аргументы на вход. Если аргументов нет, то запускаешь интерактивный вариант, иначе пайп.
.png2 Кб, 445x82
14 1446810
>>46790

>Убери этот сраный банер.


Поч? Я его подсмотрел в Луа. Вроде норм.
15 1446826
>>46810
Ну какая мне разница кто автор, какая версия? Вынеси в ключ -v этот банер.
16 1447397
Как правильнее писать?

char str;
char
str;
char *str;
17 1447399
>>47397
Ну вы поняли. Звездочка должна быть у типа или у переменной или между ними через пробелы?
18 1447401
>>46826
В питоне тоже баннер выскакивает еще больше чем в луа, значит нужно брать пример.
19 1447404
>>47399

>у переменной


Да
20 1447405
>>47401
Не нужно. В bc, например, нет банера
21 1447409
>>47404
Почему? Тогда наглядный смысл теряется. Звездочка у переменной это же содержимое указателя в этой переменной. Получается мы не объявляем указатель такого-то типа, а объявляем тип содержимого указателя. А если бы звездочка была у типа, то сразу понятно что мы объявили указатель такого-то типа.
.png5 Кб, 572x152
22 1447416
>>47405
Врунишка.
.png284x46
23 1447417
>>47405
Ух ты, bc автоматически определяет пайп. Сейчас буду смотреть его исходный код, как он это делает.
24 1447420
>>47409
А че спрашивал? Пиши 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. Иными словами, массив указателей на такие функции.
Если начинаешь мыслить от имени, воспринимая тип слева, как конечный результат операций над именем, то все становится просто. Я раньше сам ломал голову над всякими указателями на функции.
25 1447430
>>47409
Да, это кажется немного странным, ведь логично разнести по-отдельности объявления 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;
Кривая это дорожка, короче. Логика от имени рулит.
26 1447447
>>47420

>указатель на начало массива 12-элементных подмассивов указателей на int


вот тут я обосрался слегонца, 12-элеметных подмассивов ПРОСТО int
фикс
27 1447463
>>47420
Фух, голова закипела от всего этого. Мало что понял, но понял что не прав.
28 1447472
>>47463
Не парься, я хуёво объясняю, просто)
29 1447491
Как в сишке опознать папку?
Как получить список всех файлов в папке, желательно рекурсивно?
Как удалить папку со всем содержимым?
Это все нужно проделать в шинде.
30 1447540
Ебать, посоны, я вам архиватор написал:
https://github.com/PolazhinetsA/algo/tree/master/arx
31 1447555
>>47491
От ОС зависит, на Linux можешь взять opendir и readdir
.png26 Кб, 677x342
32 1447556
>>47540
Не компилится.
33 1447558
>>47556

> /tcc/include/unistd.h:24: error


Зато пердоли соснули со своим жцц и glibc!
34 1447560
>>47558
Там и пердольный жцц не компилит. Видно прога под линь дофига заточена.
35 1447571

>пытаются прошу с посикс либой и посикс шелом компильнуть на шине



Блять, с кем я сижу в одном треде...
36 1447622
>>47416
Обрати внимание, что через пайп нет банера >>47417
37 1447642
>>47540

>архиватор


Не ври нам
38 1447670
>>47560
Ну, можно упростить, чтоб исходные пути не запоминались. Там функция fopen_mkdir автоматически создает недостающие папки для нового файла. На винде другой API файловой системы и бекслеши везде, через #ifdef кроссплатформность можно замутить, если бы шарил, как это non-UNIX-like системах делается.
39 1447672
>>46278 (OP)
Есть ли простой пример как мониторить сокет через kevent?
40 1447741
>>47491
Дергай WinAPI.
41 1447747
Збс, я присрал LZW-сжатие к своему архиватору и автоматизировал урезание функционала на Шинде. Скоро WinRAR обанкротится нахуй.
https://github.com/PolazhinetsA/algo/tree/master/lzwarc
sage 42 1447772
>>47747
Молодец. А теперь собери с -Wall, чтобы тебе рассказали, какой ты мудак. Что возвращает bopen()? Бонус: почему у тебя работало и так?
43 1447773
>>47772

>bopen()


Ох нихуя проеб!
Та по ходу потому что this попадает в rax. Собсно, это скорее ответ на вопрос, почему не работало с -O3.
44 1447774
>>47772

>-Wall


unsigned вместо int, char ∗ вместо void ∗ в объявлении функций сделал, чтоб не кастовать внутри. Ну и const кое-где не проебал. Мудак, согласен)
45 1447775
>>47747
Меня больше занимает, почему, несмотря на побайтовую логику bput/bget, после цикла кодирования-раскодирования в конце насрано какими-то 2-3-мя лишними байтами.
46 1447776
>>47775
хуй с ним, завтра с gdb поиграюсь
47 1447777
>>47775
>>47776
ой бля, чет какое-то мимо поговорил сам с собой получилось
>>47772
48 1447826
>>47747
Конпеляторы немного недовольны, но компиляют. Сжал ради интереса пару тестовых файлов - сжатие для начала неплохое, практически в два раза на средних текстовых данных. Хотелось бы конечно же более лучшего сжатия, не алгоритм бабушкина, но хотя бы на уровне zip/7z. Разжать архив правильно прога не смогла - выплюнула только начало первого файла.
49 1447867
Где научиться шарить в Makefile'ах?
50 1447873
>>47867
В манах
51 1447881
>>47873
man make пустой
В /usr/share/doc релизноты и какие-то мелкие нюансы.
53 1447883
>>47882
Какая же ты няша.
54 1447953
>>47826
Ну не знаю, я прям весь проект пропускал, и даже собралось. Ругалось, правда, на null-char в конце исходников, но с этим еще разберусь. На Шинде new_dir надо самому создать перед запуском распаковки, иначе крашнется. Сейчас затестю...
blob44 Кб, 1043x613
55 1447971
>>47826
ух бля, и чому це..
image.png572 Кб, 1280x720
56 1447985
>>47826
Короче, это все ваш Windows хуевый, в Microsoft матерей всех ёб! Другого объяснения, почему fseek() двигает позицию втрое дальше, чем ей сказано, я не вижу. По аналогичной причине ломается, собсно, и распаковка. Что-то не так с типом size_t. В пизду такие проблемы, пойду погуляю.
image.png27 Кб, 849x146
57 1447997
>>47985
Таким же долбоебам, как я, на будущее...
58 1448002
>>47826
Все уже работает, есичо
опять высрал кучу постов, святой кринж
sage 59 1448080
>>47826

> Хотелось бы конечно же более лучшего сжатия


У тебя размер кодов фиксированный. Осиль правильные - начинаешь с 9-битных (256 байтов и STOP/FLUSH), заканчиваешь 13 или 14-битными. Опционально сбрасываешь таблицу, если чувствуешь, что начало плохо сжиматься. Алсо, у зипа дефлейт (хафман + LZ77), сделай LZ77/LZSS отдельно попробуй, они простые.

>>47985
Только хотел написать про "b" у fopen(), а ты уже исправил. Алсо, просто писать size_t в файл нельзя, потому что есть 32-битные системы (uint64_t еще туда-сюда, но есть еще и big endian, поэтому правильные посоны читают n байтов и из них сдвигами собирают значение, то же и с записью).
60 1448097
>>47985
Надо использовать инты фиксированного размера... stdint.h
61 1448129
>>47985
Вот теперь почти нормально - в конце файла почему-то байтик изменился.
62 1448131
>>48080
Первый тест на винде другой анон делал. Кодированием займусь еще. Это основная тема, которая меня интересует, ради которой весь мини-проект начал пилить.

>32-битные системы


Та да, сам над собой проигрываю за это. Сейчас возьму stdint, ну нахер.

>big endian


Как насчет htonl/ntohl?
63 1448133
>>48129
Это не я, это "либа" bitio кривая, которую я писал)
64 1448156
>>48133
Еще сделай как у 7зипа, вместо "-arx", "-ext" и "-lst" - "a", "e" и "l", а то непривычно.
65 1448158
Вопрос к низкоуровневым программистам низкоуровневых программ, писателям драйвером 300кк/нсек, словом, к нормальным людям итт. В списке доступных режимов видеоадаптера присутствует вариант 720x576i. В связи с этим я, хоть и не спец, но уверен, и не ебет, что аппаратура таки позволяет захерачить сигнал чересстрочной развертки для какого угодно разрешения и частоты кадров, пока основные параметры в своих пределах. Но драйвер предусматривает лишь один interlaced-вариант на случай подключения бабушкиного телека. То, что разработчики драйверов - пидарасы и хуесосы, на собственное усмотрение выпиливающие альтернативы, я знаю точно, т.к. пришлось откатывать свой до версии 2009 года, чтоб врубались нужные мне 1400x1050 и 640x400. Но поговорить я хочу не о политике, а о способах выживания в настоящих условиях.

Идея следующая. Взять опенсорс-драйвер и переписать таким образом, чтоб он заставлял железку делать хотя бы 1280x960i_60Hz и 2048x1536i_40Hz. Первое, чтоб адекватно работать без вреда для монитора и для глаз, а второе, чтоб просто поугарать с 3 миллионов пикселей на 17" без мерцания. Собсно, вопрос, насколько это сложно, если вообще возможно? Неужели я так многого хочу, СУКАНАХУЙБЛЯДЬ?!?!
66 1448164
>>48156
сделал
67 1448188
>>48164
"e" правда лучше заменить на "x", наверное.
68 1448199
>>48188

>предпредпоследняя буква алфавита


ну все, теперь jump-table для switch-case раздуется до файла подкачки
69 1448219
>>48131

> Как насчет htonl/ntohl?


Посмотри направо: https://godbolt.org/z/cGBQh1 Ты не платишь (используя гцц и шланге для x86, x86-64 и ARM64) за то, что у тебя безопасный секс. В MSVC платишь, лол. Тащить для этого левый (сетевой) хедер достаточно странно.
70 1448228
>>48219
macros one love
71 1448252
>>48158
вопрос лажа, только что качнул powerstrip и осознал абсурдность своих пожеланий
72 1448272
>>48080

>начинаешь с 9-битных (256 байтов и STOP/FLUSH), заканчиваешь 13 или 14-битными


ох как хорошо стало
73 1448406
Господа, я перестал понимать смысл .h файлов. Случилось это после того, как я забыл добавить в файл a.h объявление функции hui, которая была определена в a.c файле. Я юзаю эту функу из другого файла (b.c), в котором подключаю a.h. Так вот, не смотря на то, что в a.h отсутствовало объявление функции hui, компиль всё равно всё успешно скомпилил и слинковал, хотя вроде как должен был выкинуть что ему не известна функция hui. Какого хрена?
И еще вопрос: есть ли способ заставить компиль проверять число аргументов функции при вызове? Потому что у меня получается вызывать функцию объявленную как abc(int, int) с любым количеством аргументов типа такого abc(1,2,3,4,5). Естественно в рантайме все идет по пизде.
74 1448415
>>48406
Попробуй компилировать с флагами -Wall -pedantic -std=c17 или вроде того.
75 1448434
>>48406
Если в хедере определена какая-то структура или макрос, то сосешь хуй. А прототипы функций... Ну, ты ведь не хочешь с дебагером играться, чтоб обнаружить, что просто порядок аргументов попутал?
76 1448437
>>48406

>И еще вопрос:


а, ну все понятно. Басня про подтирание жопы вилкой (или чистку зубов ножом, не помню, так или все ебало в крови, или жопа).
77 1448801
Geany портабл ошибку выдает как исправить?
точка входа в процедуру _time32 не найдена в библиотеке DLL msvcrt.dll
78 1449083
Как из функции вывести массив определенный в функции?
79 1449092
>>48801
И давно Geany стал компилятором? В MSVCRT нет time32, есть просто time, и он, кстати, с 32-битным time_t.

>>49083
Передать функции указатель на массив, скопировать туда. Или выделить malloc()-ом память, скопировать туда и вернуть указатель. Или, в крайне редких случаях и с большой осторожностью, можно сделать массив static и вернуть на него указатель.
80 1449114
>>49092

>Передать функции указатель на массив, скопировать туда.


Так и сделал. Но не очень удобно так.

>в крайне редких случаях


В каких?
81 1449119
Какая же сишка быстрая. Писал одну прогу на на питухоне - она там пыхтела от полминуты и больше, выжирала всю память на компе. Потом переписал на дишке тяп ляп в питухоновском стиле - пыхтит несколько секунд и жрет памяти тоже много но чуть меньше чем питухон. Сейчас наконец переписал часть проги на сишечке по всем правилам - летает быстрее секунды, памяти кушает 300-400 килобайт. Офигенно.
82 1449120
>>49119
гавна и нинужна
83 1449129
>>49114

>В каких?


Когда алгоритм не предполагает одновременное использование нескольких результатов этой функции, потому массив один. В смысле, на уровне отдельно взятого алгоритма. Многопоточность-то возможна, есть thread-local static data...
84 1449161
При закрытии программы операционная система сама же закрывает файлы и освобождает память, поэтому можно же не писать в конце программы free() и fclose()?
85 1449164
>>49161
Да. Если у тебя выделено очень много мелких объектов, то так может оказаться даже быстрее, потому что менеджеру кучи не нужно будет заниматься всей этой бессмысленной возней из-за free(), и он просто дропнет всю память целиком. Главное не привыкнуть и не забывать закрывать/освобождать в других ситуациях.
86 1449167
>>49164
Классно. Теперь буду привыкать не писать.
87 1449186
>>49161
А если программа 100500 раз использует один и тот же функционал, который каждый раз malloc под временные нужды? Наслаждайся утечкой ресурсов.
sage 88 1449209
>>49186
Какое из слов во фразе "не писать в конце программы" ты не понял?
89 1449210
>>49209
ой, мои пардоны, обосрался
90 1449275
В сишке есть вот такое преобразование типов? Когда, например float преобразовывается в unsigned char, то если float > 255, то в uchar пишется 255, а если float < 0, то в uchar пишется 0? Или надо свою функцию писать для этого?
91 1449387
>>49275
В Сишке нет невидимых if-ов. float переведется в int (это процессорная инструкция), но если кастовать char, то просто младший byte от соответствующего int будет.
92 1449704
>>46278 (OP)
Анон, работаю в Code::Blocks. Подскажи, как можно проверять кучу? Хочу удостоверится -- правильно ли я реализовал сборщики мусора, а заодно понять есть ли утечки
x54d8e16b.jpg16 Кб, 392x293
93 1449759
>>46278 (OP)
Посоветуйте веб макаке что писать на сишке для грамотного развития? Сам подергал день синтаксис, ничего сложного не увидел, всё классно и понятно, писать хочу для себя
Куда двигаться, что писать чтобы правильно развиться?
94 1449809
>>49759

> веб макаке


> правильно развиться


Не всё можно обратить.
95 1449852
>>49809
Лол, а если я бэкенд на Си пишу, тоже необратимый?
96 1449854
>>49852
Ну вот, я даже тебя понять не могу.
Что ты пишешь вообще? Оно тебе надо? Может, лучше, сайтик?
97 1449863
>>49759
Напиши простой веб сервер для себя. Можешь заодно посмотреть исходник какого-нибудь nginx-а, в качестве примера.
98 1450001
>>49854
про бэкенд другой анон писал
мимо тот самый другой анон, забыл подписаться мимо
99 1450070
>>49809
Почему?
100 1450071
>>49863
Да ну исходники, а веб сервер вроде на плюсах готовые решения есть, не?
101 1450091
>>50071
Если ты хочешь в прод что-то запустить, то да, лучше взять готовое решение. А если хочешь набить руку на СИ, то можно запилить свой сервер. Тем более реализацию всегда есть где подсмотреть.
102 1450651
Насколько сложно будет использовать C для анализа данных, статистики и визуализации графиков? Если не с нуля, а использовать библиотеки и gnuplot.
sage 103 1450749
>>50651
Скажем так, будет весьма неудобно. Бери нормальный скриптовый язык (лучше всего дефолтный питон). Вот если упрешься по производительности во что-то, и не найдешь под это готовой либы (что очень маловероятно), тогда можно эту часть написать на Си.
104 1450757
Аноны, блядь!!! В мене жопа підгорає!!!

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

В связи с этим, такой вопрос... Можно ли вежливо попросить майкрософтовский cl, чтоб он закрыл глаза на всю эту implicit хуету? Если нет, то я желаю создателям стандарта нестандартной смерти, БЛЯДЬ!!!
105 1450760
>>50757
Все, уже нахуй надо, рот я ебал вашего С++. Обмазался кастами, обожрался даже, пойду чаем запивать.
sage 106 1450771
>>50757

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


Так портируй, поправь .h.
107 1450931
>>50091

>Тем более реализацию всегда есть где подсмотреть.


На гитхабе?
108 1451118
>>50651
Мучительно. Большую часть времени потратишь на написание кода, а не на анализ данных. Бери питон, там куча готовых движков для такой лабуды.
109 1451121
>>51118
А GNU R?
110 1451172
>>50757

>malloc() надо КАСТОВАТЬ


Его же и так надо кастовать в почти любом случае. А если не нравится, пиши на джаве, там все в дженерики можно завернуть, и сишные хедеры к проекту прилепить. А хейт ерестов — ну это ты просто маленький ещё.
111 1451418
Какой же все-таки хреновый алгоритм насыщенности в модели HSL (его работу можно увидеть в программе XnView). Вроде усиливает цвета, но получается то блекло без сочности, то местами пересыщено. Вот в Paint.NET пиздатый алгоритм насыщенности - получается сочно и артефакты не лезут. Хочу такой же себе запрогать, только не знаю какой именно алгоритм там использован.
112 1451422
>>51418
В гугле забанили чтоля? Гуглиш исходник для пыня нет и форкаешь/читаешь.
113 1451425
>>51422
Начиная с какой-то версии, ПыняНет стал закрытым.
114 1451439
>>51425
Тебе не похуй? Openpdn открывай и смотри, вряд ли они что-то кардинальное в могли напиздячить в hsl алгоритм.

Впрочем берёшь последнюю версию пынянет и прогоняешь деобфускатором/анпакером/декомпилятором и читаешь исходный код. На дотнете это делается легко, инструментов навалом.
115 1451506
>>51439
Нашел как там меняется насыщенность. Довольно оригинально. Надо попробовать себе подобное закодить.
https://github.com/rivy/OpenPDN/blob/master/src/Core/UnaryPixelOps.cs#L854
.png11 Кб, 632x194
116 1451561
>>51506
Вот и весь алгоритм. Оказался гораздо проще, чем в моделях HSV/HSL и результат работы выглядит офигенно.
117 1451591
>>51561
Результат работы покажи как выше выкладывал
118 1451621
>>51591
Я не автор XnView, а пилю крохотную программку для проявки raw, которая еще далека до совершенства. Раньше она делала насыщенность как в XnView, а теперь как в Paint.Net.
119 1451629
>>51621
Ну покажи. Выше же выложил результат своей работы.
120 1451910
>>46278 (OP)
Анон, выделяя память с помощью calloc, ее обязательно нужно высвобождать, или же это произойдет автоматически при завершении программы?
121 1451912
>>51910
Да.
122 1451914
>>51912
Охуенный ответ.
123 1451916
>>51914
Вообще-то правильный.
Автоматически произойдет но лучше удалять.
124 1451927
>>51916
Довольно неопределенный хули. Но, спасибо за пояснение.
125 1451935
>>50931
Ну если найдешь на гитхабе можно и там. Я вообще имел ввиду сайт разработчиков. Вот. например: https://hg.nginx.org/nginx/file/tip
1543036214433bulletin.jpe59 Кб, 640x541
126 1452061
Посоны, короче столкнулся тут с такими непонятными вещами, как .text .data .bss скриптами линковщика и прочей низкоуровневой радостью, о которой до этого даже не помышля, но сейчас связался с микроконтроллерами.
Листаю статейки, но общего понимания что эта за хуйня и как она работает так не получить. Чо это такое та, как хоть называется? Что читать?
127 1452067
>>52061

>Чо это такое та, как хоть называется? Что читать?


Ассембоер, плюс формат исполняемого файла ОС
128 1452108
>>52061
Короче, .data - это, грубо говоря, инициализированные глобальные переменные/массивы, значение/содержимое которых занимает место в бинаре (.exe-шнике). Ты прям там же пишешь значения, строки, и т.д., и т.п., и оно все там напакуется, где надо. Под .bss память выделяется тоже в сегменте данных при запуске и заполняется нулями (могу ошибаться), короче эта хуета не составляет вес бинаря. .text - это сегмент кода, он readonly. Ну а дальше там сегмент кучи идет, и с потолка адресного пространства растет стек, но это другая история. Короче, ассемблерный код - это практически 1 в 1 содержимое бинаря, только с удобствами вроде буквенных меток, из которых линкер потом циферки сделает, и мнемоник вместо кодов инструкций.
129 1452187
>>52061
Открой любой экзешник в графическом отладчике типа x64dbg, там есть закладка memory map, в которой наглядно видно что находится в памяти процесса, твой экзешник с сегментами и другие дллки которые он использует, подписаны названия модулей, сегментов и их атрибутов.
130 1452209
Аноны, как жить нахуй? Ноут в ремонте, компуктер под XP, инсталятор MinGW фейлит, CL не умеет в C99, пиздос...
131 1452228
>>52061
Это секции. Для чего и почему так сделано кури форматы приложения.
132 1452234
>>52209
Не знаю, что там у тебя фэйлит, недавно ставил на виртуалку XP и MinGW. TCC возьми, лол.
1111.jpg62 Кб, 692x415
133 1452320
Нуфаг на связи. Как фиксить пикрил?
134 1452322
>>52320
У тебя файл походу называется lol.c.txt
135 1452334
>>52320
Нафиг cd? В проводнике, в нужной папке: Шифт+пкм, открыть окно команд.
1111.jpg63 Кб, 690x395
136 1452338
>>52322

Переделал
137 1452350
>>52338
Вощем заработало, только окно закрывается сразу, а что там в настройках жать я что-то не помню
138 1452355
>>52350
Оно и должно закрываться, у тебя же программа отработала и завершилась. Если ты хочешь, чтобы консоль оставалась открытой, попробуй запускать программу не двойным кликом, а также через консоль, как ты компилятор запускаешь. Либо добавь getch в конце программы, чтобы добавить задержку. Но лучше первый вариант.
139 1452359
>>46278 (OP)
Немного не в тему. Читаю сейчас код одного FTP-сервера, который написан, конечно же, на С. Начав с определенного момента в коде, который мне интересен (а именно того, где клиент подключается к серверу и получает приветственное сообщение) я изучил внушительное такое дерево функций. Я все.
8SIfF6gUp0s.jpg16 Кб, 432x323
140 1452360
>>52355
Годно, спс, интересно на кого же расчитан в моем случае кериган и ричи, если там нет этой инфы в начале
141 1452365
>>52359
Скидывай нам. Тоже полюбуемся.
143 1452368
>>52365
Что скидывать? Мои комментарии к нему могут вызвать лютый кринж, как и зарисовки дерева в блокноте. Я вообще надеялся на то, что смогу уязвимость найти.
144 1452382
>>52368

>могут вызвать лютый кринж


>могут


Какие мы оптимисты :3
Скидывай все, хочу кринжироваться полчаса.
145 1452393
>>52360
Насмешил прям, от души
146 1452394
>>52382
Нет.
147 1452401
>>52394
Пидора ответ.
148 1452479
>>52360

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


На людей, которые обладают базовыми навыками работы в ОС. Особенно если у них винда.
149 1452490
>>52360
Эмм.. наверное, на людей из 80-х, которые и не в курсе, что кроме консоли может что-то существовать.
1369011674169.jpg165 Кб, 1308x720
150 1452539
>>52479
Специально загуглил список

>базовыми навыками работы в ОС


нет такого, попробуйте тоньше
151 1452680
>>52360
КиР для пердунов, читай лучше Прата.
152 1452700
>>52680
Хватит всяких хуесосов советовать. Упрощая себе жизнь, ты обкрадываешь себя. Керниган и Ритчи - годный курс для аудитории с мозгами, а Прата - ньюфаг и вообще муслим.
153 1452748
>>52700
Сначала прочитает Прата, а потом твою древноту, если захочет.
154 1453432
Как генерировать звук на си?
155 1453466
>>53432
А тебе что, 0x07 мало?
156 1453523
>>53432
ALSA API
157 1453564
>>53432
Никак. Звук генерируется операционной системой, её апи и библиотеками.
158 1453617
>>53432

> Как генерировать звук


for (j = 0; j < 44100; j++) sound[j] = sin(2 ∗ M_PI ∗ (j / 44100.0) ∗ 440) ∗ 32767; бззз
159 1453619
>>53466

>putchar('\x07');


Ух ты, оно звучит.
160 1453703
Анон, как лучше всего сделать описание бинарного TLV формата данных дабы он был понятен бекендщикам, которые будут делать парсер данных на своем бидоне (или подобной веб-хуйне)? В гугловском protobuf есть свой IDL, но свой псевдоязык для описания интерфейса пилить совершенно нет желания хотя свой протокол не было лень колхозить, лол
161 1453861
Как лучше записывать?
fwrite(buf + pos1, 1, pos2 - pos1, fout);
fwrite(&buf[pos1], 1, pos2 - pos1, fout);
162 1454014
>>53861
Первый вариант: проще читается
163 1454034
>>53703
Очевидный kaitai struct или вариации на его тему, если ты хочешь машинно-читаемое описание и простые сишные структуры, если не хочешь. Все умеют читать сишные структуры, а питонисты пускай сами в свой unpack ебутся.
164 1454369
Посоны, есть нуб-вопрос. Я тут решил Сями обмазаться. В частности рейлибом (raylib).
Но я никак не могу понять как подключать рейлиб.
В архиве с библиотекой был нотапд++, через который можно execute делать.
Но как конпелировать через минигв или сигвин, чтобы эти биоблитеки програма видела?
Прямой путь казывал - не работет.

И еще вопрос - какая ИДЕ? Или лучше забить и самому научиться шел-срипты писать?
165 1454379
>>52360
что-то представил его авторов юзающих cmd.exe и проиграл
166 1454416
>>54369

> Прямой путь казывал - не работет.


Где скриншот сообщения об ошибке?
gcc -Iraylibpath/include -Lraylibpath/lib filename.c -lraylib -o filename.exe как-нибудь так.
167 1454418
>>54416

>gcc -Iraylibpath/include -Lraylibpath/lib filename.c -lraylib -o filename.exe как-нибудь так.



Спасибо, Антош. Попробую.
168 1455142
Ананы, у менят появилась задачка по развороту Big Endian в Little. Сразу говорю, что POSIX функции мне не помогут, не спрашивайте почему.
Монжо ли типобезопасно int представить как char[4] (считаем, что инт - 32) без цикла заполнения со сдвигами?
Мне в голову очевидно приходит только char x = (char )&int_name;
169 1455143
>>55142
Ну конечно двач звёздочки как курсив переделал, после char звёздочка в обоих случаях
170 1455228
>>55142

>считаем, что инт - 32


Ты считаешь? Инт может быть 64 битный. Выбивай биты маской и ложи по соответствующему индексу в массив
...0
char[1] = int & (11111111 << 8)
...2
...3
171 1455230
>>55228

>Ты считаешь? Инт может быть 64 битный


Я имел ввиду, что в моём случае инт 32 и это точно

Предложенный тобою способ как раз со сдвигами + копирующий массив, а мне нужен указатель в то же место с другим представлением
Мне сейчас в голову ещё union старый добрый пришёл
172 1455234
>>55230

>union старый добрый пришёл


Да
173 1455236
>>55142
как насчет чего-то вроде функции, делающей строку задом наперед, но не по нуль-терминатору, а по заданной длине?
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));
174 1455238
>>55142
трохи обісрався з зірочками
как насчет чего-то вроде функции, делающей строку задом наперед, но не по нуль-терминатору, а по заданной длине?
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));
175 1455251
>>55238
Это аналогично strrev или std::reverse в плюсах
Как развернуть я знаю, проблема именно в типобезопасности, вроде и хочется забить, потому что размеры всё равно выставляю не числами, а sizeof, но и мысль покоя не даёт
176 1455282
>>55251
не ссы, я подстрахую
инб4 от подстрахуя слышу
177 1455311
>>55142

> задачка по развороту Big Endian в Little


В этом треде обсуждали даже: >>48219 Там немного не про то, но bswap тоже распознается и сворачивается в 1-2 инструкции на x86(-64), AArch64 и MIPS.
178 1455348
А вот и автор гринтекста из "этого треда" зашел к вам на огонек с вопросом...
https://github.com/PolazhinetsA/algo/blob/master/lzwarc/diter.c
Как сделать подобную лобудень (рекурсивный итератор файлам в папке) на Windows? Я с гуглом так себе дружу. Запрос "Windows File System API" что-то по low-level выдает.
179 1455356
>>55348
FindFirstFile/FindNextFile/FindClose, но лучше не рекурсивно (рекурсия вообще почти всегда неправильное решение проблемы), а с явной очередью/стеком, в которые ты будешь складывать дочерние директории. Не забывай о FILE_ATTRIBUTE_REPARSE_POINT, ты и в своем коде симлинки не обрабатываешь, а это хороший способ зависнуть нахуй.

> while (dent && dent->d_name[0] == '.');


/home/user/.config ты тоже пропустишь?
180 1455363
>>55356
Оо, спасибо.

>/home/user/.config ты тоже пропустишь?


блин, глюканул самую малость
181 1455366
>>55311
Вот это, кстати, оч интересно
Но как именно собрать в bswap? Просто именно так и скопировать функцию, а конпелятор типа умный? (если это cc)
image.png12 Кб, 373x146
182 1455369
>>55356

>симлинки


тут не понял
183 1455398
>>55369
Ну вот есть у тебя: /foo/bar -> /foo, что получится, если ты будешь рекурсивно /foo обрабатывать?

>>55366

> а конпелятор типа умный


https://godbolt.org/z/U-nIbM а еще у гцц интринсики есть.
184 1455401
>>55398

>/foo/bar -> /foo


это понял. Не понял, как у меня симлинки пройдут проверку s.st_mode&(S_IFDIR|S_IFLNK)
185 1455402
>>55398

>/foo/bar -> /foo


это понял. Не понял, как у меня симлинки пройдут проверку s.st_mode&(S_IFDIR|S_IFREG)
обосрался с константой
186 1455405
>>55398
я там максимально делегировал проверки на часто вызываемые функции, чтоб не дублировать исключения в коде высшего порядка
187 1455406
>>55405

>по-максимуму


>часто вызываемым


фикс
188 1455424
>>55402

> как у меня симлинки пройдут проверку s.st_mode&(S_IFDIR|S_IFREG)


Потому что это &, а не ==. И еще потому, что S_IFLNK = (S_IFREG | S_IFCHR). Страдай.
189 1455473
>>55424
Оце так туебень. Поленился значения глянуть. Ок, понял, не буду выделываться, обойдемся без s.st_mode&(-1<<9)==, примем помощь S_IS макросов...
190 1455535
>>55398
Благодарю
Кстати, второго уровня оптимизации достаточно
191 1455968
>>46278 (OP)
Аноны, помогите. Программуля то работает нормально, то возвращает статус 255, причем набор входных параметров всегда один и тот же. В чем может быть проблема?

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

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

Анон, с чем может быть это связано?
192 1455969
>>55968
Похоже, что пытаюсь освободить с помощью free свободную область памяти
193 1456789
>>46278 (OP)
Кто чем форматирует/разукрашивает логи полученные в различных форматах?
Я пробовал lnav, но чет он или я какой-то слишком тупой и не может нормально работать когда в файле с логами есть строки, которые отличаются от базового формата. Да и форматировать вывод (т.е., например, автоматически выравнивать поля) он не умеет.

Всякие консольные sed+colorize и т.п., конечно, хороши и умеют всё, но я не хочу пердолиться с regex-ами.
194 1456867
Если из функции надо получить более одного значения то как лучше всего это сделать?
195 1456877
>>56867
Если они логически связаны друг с другом (например, абсцисса и ордината точки на плоскости), то struct.
Если нет, то несколько параметров-указателей, ничего страшного в этом.
.png12 Кб, 694x321
196 1456933
>>56877
Сделал через параметр-указатель. Вроде костыльно, но работает хорошо.
197 1456984
Имеются три константы-строки в виде массивов разных длин. Есть способ объединить их в один массив?
198 1456987
>>56984

>их в один двумерный массив?


фикс. алсо желательно это сделать без запросов к памяти.
image.png93 Кб, 645x729
199 1456992
>>56987

>без запросов к памяти


лол?
200 1457159
>>56987
объединить три участка без запросов к памяти?
даже если они все троём на стеке, у тебя не выйдет
201 1457605
Как лучше всего запихать 3(три) float нормализованных значения [0, 1] в 32 бита? Точность хотя бы до тысячных, чем меньше операций при кодировании/декодировании, тем лучше.
202 1457609
>>57605
Пока вижу только по 10 бит на fixed point. Получается 1/1024 точность. А лучше есть?
203 1457611
>>57609

>по 10 бит


Флоат ты туда никак не запихаешь.
Смирись разве что это зависимые значения - но тут уже математика
204 1457649
>>57611
в смысле не (((float))) а вещественное число.
Похуй, точности хватит я щитаю.
https://ideone.com/zW2r6Y
205 1457667
>>46278 (OP)
Доставьте, пожалуйста, парсер консольных параметров от несосунов (suckless soft). Помню, что у них была клевая библиотечка на макросах.
206 1457988

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


>все используют массивы указателей


почему?
207 1457995
>>57988
Динамические многомерные массивы нельзя. Или у тебя указатели (лишняя память), или ты сам считаешь индексы (лишние умножения). Для статических вполне используют массивы массивов, никто не жалуется.
208 1458041
>>57995

>лишние умножения


А разве LEA не делает такие умножиения бесплатно?
209 1458050
>>58041
Не делает, т.к. там используется тот же самый mul порт. Но умножение в современных процах - операция 3-5 тактов, и таких портов там обычно не меньше двух, считай умножение очень дешево.
210 1458057
>>58041
Это не те умножения. Чтобы проиндексировать элементы в одномерном массиве, может быть достаточно lea, но я имел в виду представление двумерного динамического массива в виде одномерного. Например, image[height][width] как image[height ∗ width] с доступом вида image[y ∗ width + x]. Здесь у тебя width - переменная, ее нельзя сократить ни до каких эффективных адресов или сдвигов со сложениями, как было бы сделано для статических двумерных массивов.

>>58050

> умножение очень дешево


Пара лишних инструкций для вычисления индекса у тебя все равно есть. А еще может быть алиасинг, заставляющий индексы и измерения каждый раз заново грузить.
211 1458080
>>58057

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


Это проблемы тех, кому надо писать много-много отдельных точек по рандомным координатам, т.е. долбоёбов с их laba01. Обычно всё сводится тупо к row-major обходу одного или нескольких слайсов массива с прибавлением высчитанной этим самым умножением константы. Посмотри, как делаются софтверные растеризаторы - там тупо обходятся все точки, но ненужные игнорируются. И так оно работает с 90-х по наши дни.
212 1459246
Гайс, помогите найти ошибку. Суть в том, что ошибка происходит на 23-ей строке кода, когда я пытаюсь задать с помощью malloc'а динамический размер строки, в массиве строк. Алсо, когда я устанавливаю жёсткий вариант в той же строке, то никакой ошибки не происходит. ЧЯДНТ? Вот линк на код --> https://ideone.com/OAc7OB .
Ошибка вот такого вида:
213 1459247
Сорри, к посту >>59246
Ошибка вот такого вида: "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."
214 1459342
>>59246

> 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. Это быстрее и очевиднее, чем полагаться на предыдущее содержимое буфера.
215 1459352
>>59342
Спасибо за советы. Исправил теперь эту ошибку. Просто, если честно жопой смотрел, что умножал на тип указатель на char, а не на обычный char.

>clean_buf_str()


Я использовал для того, чтобы очистить буфер после того, как я проивзеду копирования слова в массив указателей. Т.к. мне нужно по заданию вывести каждую строку отдельно в массиве строк, то буфер надо очищать после каждой записи слова, ведь тогда, следущее слово может быть короче предыдущего, и 'мусорные символы' запишутся в следующую строку.
216 1459622
>>59352

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


> и 'мусорные символы' запишутся в следующую строку


Я именно это и имел в виду. Не похуй ли тебе, что у тебя там в неиспользуемой части буфера? Смотри:
char buffer[16];
strcpy(buffer, "abcdef");
strcpy(buffer, "foo");
// buffer = "foo\0ef\0"
printf("%s\n", buffer); // "foo"
217 1459692
>>46278 (OP)
Анончи, русские символы в дефайнах поддерживаются?
218 1459700
>>59692
Юникод поддерживается в идентификаторах в виде escape-последовательностей (\u04xx р) везде, а просто так - в основном не поддерживаются, ибо нахуй никому не нужно. Можешь поиграть в -fextended-identifiers в gcc/clang, может сделали.
219 1459713
>>59700

>ибо нахуй никому не нужно


но но
220 1460126
Анон, из-за чего malloc может возвращать указатель на уже занятое место в памяти? То есть, в одной функции я вызываю:
int C; C = (int )malloc(sizeof(int)); sscanf(buffer, "%d", C);

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

Так вот, значения указателя C и значения указателя value всегда сука равны. Как такое может быть-то?
изображение.png2 Кб, 540x55
221 1460130
>>60126
Быстрофикс:

Так вот, значения указателя C и значения указателя value всегда сука равны. Как такое может быть-то?
222 1460131
>>60130
Эти две строчки расположены в разных функциях, которые поочередно вызываются в еще одной функции. Но, полагаю, это не должно играть роль.
223 1460135
>>60130
>>60131
И потом мой сборщик мусора, который должен освобождать память по указателю C заодно и херит содержимое по указателю value. Да как такое может быть, Анон, помоги.
224 1460169
>>60126
Посмотри valgrind --trace-malloc
225 1460179
>>60169
Бля, из под винды работаю. Есть какие-то анлоги? Спасибо за совет.
226 1460182
>>60169
Блин, спасибо, давно искал такую софтину.
227 1460186
>>60182
Оберни malloc вот таким макросом
https://stackoverflow.com/questions/50120115/calling-malloc-from-within-a-wrapper-macro
Оттуда печатай себе инфу - файл, строка, параметры, ret.value в stderr
228 1460187
>>60186
Промахнулся
>>60179
изображение.png17 Кб, 851x493
229 1460189
>>60169
Ебать копать, ну буду разбираться
230 1460191
>>60186
Спасибо, это тоже попробовал. Пока что скачал себе Dr.Memory, там лог пиздецкий >>60189
231 1460192
>>60191
быстрофикс: попробую
232 1460620
>>59622
блин, точно, гениально и просто. Я просто забыл, что функция будет читать до первого '\0'.
233 1460724
Решил прочитать K&R (прошлый раз забросил на середине), а там заданий меньше чем было. Задания вырезали по сравнению с первым изданием?

Алсо где можно прочитать про хедер файлы нормально? Я нихуя не могу понять чому я не могу сделать #include "smth.c" в нескольких файлах, зачем городить эти хедеры?
В K&R написано "просто ебаште один хедер-файл на всю программу)))", это и есть бест-практис?
234 1460751
>>46278 (OP)
Мне что-то шапка треда не доставляет. Вроде список литературы есть, но что-то не вяжется.

Вот у пайтон есть Марк Лутц, который подробно расписывает что к чему и как реализовать ту или иную функцию.
Я ранее писал на С++ в вузе, но именно на Си не писал. Подскажите учебник, чтобы не сильно тупо разжёвывал, но и не для мидлов.
Прата у меня есть, К и Р у меня тоже есть, но старые (1982 и 1988 годов соответственно) . Их можно читать или взять что-то свежее?
Из чего выбрать :
0. K&R
1. Кочан Вуд.
2. Стивен Прата
3 . Дейтл и Дейтл
4. Столяров
5. Head First C
Кто с чего начинал?
Задачи какие - писать всякие полезные программы для себя чтобы не делать рутинную хуйню. Писать хочу под freeBSD и Windows.
235 1460759
>>60724

> Я нихуя не могу понять чому я не могу сделать #include "smth.c"


Можешь. Делают. Посмотри, например, на tinycc.

> в нескольких файлах


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

> просто ебаште один хедер-файл на всю программу


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

>>60751

> Из чего выбрать


K&R если хочешь страдать и насыщаться духом старой школы, свежее издание Праты, если хочешь просто качественно выучить современный Си.
236 1460760
>>60759
а кочан вуд? мама говорит, что годнота была когда-то.
237 1460781
>>60760
Я читал кочана когда-то, но прата по всем параметрам лучше.
238 1460790
>>60781
спасибо. тогда прата мой выбор
239 1460886
>>46278 (OP)
Сегодня нашел задачку с собеседования на си разраба и решил.
Когда собеседовался не мог, затупил от нервов или я со временем поумнел (врядли).
Кстати, работу я так и не нашел, сейчас вкотываюсь в жаваскрипт.
240 1460917
>>60886
дай линк на зодачи
241 1460949
>>60759
Спасибо, анончик :3

> ты очевидно продублируешь код и данные


Хотя вот это всё равно немного не понял. В высокоуровневых языках я могу делать импорт какого-то модуля/пекейджа в нескольких местах, и это всё разрулится, главное чтобы не было циркулярных зависимостей.
Что мешает линкеру только один раз включить файл? Или так определено в стандарте, что инклуд должен копипастить?
242 1461047
Аноны, подскажите, какой компилятор использовать лучше все?
Вот пробовал 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]

Не пойму из-за чего это так
243 1461222
>>60949
Компилятор отдельно компилирует каждый .c (вместе со всем, что ты туда заинклудил) в .o, и если был инклуд ОПРЕДЕЛЕНИЙ функций и чего-то еще, а не только ОБЪЯВЛЕНИЙ, то они тоже скомпилятся по экземпляру в каждом .o, который делался с инклудом этой штуки. Линкер же не занимается "включением файлов". Работа линкера, грубо говоря, сделать из символов адреса. Даже компилятор, как таковой, этим не занимается. #include - препроцессорная директова. Чтоб заголовочный файл можно было безопасно инклудить везде, где он используется, не задумываясь, не инклудит ли его другой уже инклуднутый файл, делают:
#ifndef FILE_H
#define FILE_H
содержимое
#endif
Препроцессор не умеет, и не должен, в собственную логику с условиями. Он на то есть, чтоб делать все буквально, даже самую странную дичь, если ТЫ знаешь, что делаешь.
244 1461248
--------------------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/
245 1461265
>>60949

> Или так определено в стандарте, что инклуд должен копипастить?


Да. #include не магия. Это просто вставка содержимого одного файла в другой, ничего больше.

>>61248
С кириллицей в винде вообще большая жопа. По-хорошему надо делать свои обертки вокруг 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 не занимается компиляцией.
246 1461269
>>61265
Шёл 2к19, ОС Ш1ИДОШ5 так и не научилась в нормальную работу с кириллицей.
247 1461270
>>61265

>IDE Cfree


Там в настройках сохранения есть выбор ANSI, UTF8, UTF8-BOM, UTF-16 тоже с BOM в ANSI все запускается при других ошибки. Какие настройки нужно смотреть?
248 1461271
>>61269
Попрошу безинсинуаций это XP 2002 год.
249 1461285
>>61270

> UTF8

250 1461286
>>61269
Винда нормально не умеет в UTF-8 (в основном в консоли, и только если использовать стандартную оболочку - во всех нестандартных починено), а вот в юникод она научилась еще раньше линукса, в ядре NT юникод от рождения.
251 1461552
>>61271
ХР - юникодная ОС, нативно поддерживает все языки сразу. Так что давай без инсинуаций.

>>61269

>консоль


>Ш1ИДОШ5


Давай ты посмотришь значение слова windows в словаре.
252 1461554
>>61286
UTF-8 сам в себя не умеет. Это сжатый формат с которым нельзя работать нормально. Так же как нелепо придумать вместо нормального .txt пожатый по какому-нибудь алгоритму, чтобы потом парсить на каждый пук. Просто нелепо.
253 1461555
>>61554

>Это сжатый формат


Чегобля?
254 1461562
>>61555
Ну он имеет в виду, что нельзя перейти к символу n, не распарсив предыдущие n - 1. Хотя на практике такое никому не нужно.
255 1461565
>>61562

>предыдущие n - 1


Ну не совсем, достаточно читать первый байт и пропускать остальные
256 1461566
>>61565
З.ы. а зная какой язык, то никакой разницы с 1 байтовой нет.
257 1461572
Хочу написать гуи апи в ядро линукса, ну т.е вместе с ядром чтобы компилилось, собираю лфс. С чего начать писать этот апи? Посмотреть у вайна ведь можно?
258 1461769
Аноны, нужна помощь. Днонетчик решил прикоснуться к истокам, открыл 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, это помогает. У меня без этого ключа жалуется на отсутствие линкера. Я немного в фрустрации.
259 1461802
>>61769

> 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 должен был положить).
link.png16 Кб, 548x311
260 1461838
>>61802

> Ты обозвал объектный файл exe-шником и пытаешься его запустить


Хех :) Хелп к clang ввел в заблуждение, там ключ -o описан просто как "Write output to <file>", я ожидал там готовый экзешник.

> линкер, который оно у тебя найти не может


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

> Но если у тебя есть студия, зачем тебе шланг вообще?


Вижла жирноватая, я ставил только нужные мне по работе фичи. Поддержку плюсов не устанавливал, только какой-то SDK. План был просто читать книгу, писать примеры в саблайме и компилять их легковесным шлангом. Я еще попробую MinGW поставить, как ты сказал, но что-то мне уже подсказывает, что если столько проблем возникает, проще уже какой линукс в виртуалке поднять. В любом случае спасибо тебе большое за дельные советы, а не обкладывание хуями.
261 1461865
>>61838
Ставь msys2 и не мучайся. Там накатишь mingw64 нужные тебе либы, IDE и т.д Можешь еще conemu поставить(эмулятор термила). Годная вещь, на шинде рекомендую
msys.png10 Кб, 290x233
262 1461895
>>61865
Спасибо тебе, анон! Наконец-то можно учиться, а не сражаться с окружением.
263 1461919
>>61895

>можно учиться


Учись хорошо, придем проверим.
264 1461936
>>61572
С чего начать АПИ писать?
265 1461952
>>61936
С понимания архитектупы ПК и ОС, ты несешь дичь, ты должен не с ядром, а видеодрайвером взаимодействовать. Гугли framebuffer.
266 1461974
>>61952

>https://en.wikipedia.org/wiki/Linux_framebuffer


>There was also a windowing system called FramebufferUI (fbui) implemented in kernel-space that provided a basic 2D windowing experience with very little memory use.


https://github.com/8l/fbui
NEH.png19 Кб, 896x382
267 1462045
Сяп. После ввода 5 элемента - 4 элемент просто берёт и обнуляется, приэтом первые три не изменяются. Далее после пятого элемента - всё нормально (16, 32 итд не обнуляются).
типа программист 268 1462078
>>62045
Ну, во-первых "++" не просто икрементит, а изменяет значение переменной, т.е. [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]

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

В-четвертых, т.к. ты скинул картинку вместо текста, то иди нахуй исправляй и проверяй сам.
типа программист 269 1462080
Блядь... Эта блядская борда не поддерживает тег [code]? нахуй тут сидеть?

Пидарасы.
270 1462082
>>62080
ну так уеюывай на
271 1462093
>>62078
Да, ты прав, дело оказалось в индексации. Получается, я записывал в невыделенный блок, который только на следующем цикле "захватывался". Однако всё равно не могу понять, почему косяк при выводе массива происходил только с четвёртым элементом? Наверное потому что после этого блока realloc просто не находил свободный соседний и брал другой из ебеней.
Вообщем бобров тебе
488135.jpg16 Кб, 554x349
272 1462099
>>62078

>


>code


пробулькано*
273 1462160
>>61265
>>61222
бля у С самое заебись коммьюнити на сосаче
274 1462186
>>61838
Ради интереса попробовал притащить шланг (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 двачую, если лень возиться с настройкой и думать.
275 1462189
>>62160
тут просто есть 1 (один) умный дурачек который любит объяснять новичесам очевидные вещи
276 1462190
>>62189
алсо, поссал на него
долбоеб плодит себе конкурентов
277 1462299
>>62190
Да мы так просто, чтоб мозги не засыхали.
278 1462370
>>62186
Из простого command prompt не собиралось, не могло найти stdio.h. Да и варнинг выдавало, в котором явно было написано, чтоб попробовал через developer command prompt. Сейчас я не хочу тратить время и разбираться, чего шлангу не хватает. Как вы оба сказали, msys2 крутая штука, все завелось с первого раза. Возможно, стоит добавить в шапку.
279 1462379
>>61974

>kernel-space


Значение знаешь?
280 1462391
>>62190
Да мне нахуй этот С не всрался работать на нём, лол, как и большинству, я думаю.
Мне чисто по фану с лоу-левелом поиграться.
281 1462450
Что бы заебашить на Си такое, не сильно сложное, но интересное?
282 1462460
>>62379
Я про него и говорил, ебушка
283 1462559
>>62450
П А Р С Е Р
А
Р
С
Е
Р
284 1462671
>>62450
Простенькую демку к примеру
285 1462772
>>62450
Мозги для микроволновки
286 1463183
Пожалуйста, помогите разобраться с чтением файлов в бинарном режиме. Написал программу, которая просто должна прочитать числа из файла в массив(пикрелейтед 1), а на проверке выводит вот такие числа(пикрелейтед) 2). Сам код тут: https://ideone.com/FkhfiY
Главное, что я не могу понять, так это, что функция вроде как прочитала файл, но те значения, которые она прочитала совсем не те, что я ожидал.
287 1463190
>>63183
Толсто
288 1463196
>>63183
Ты берешь строчку длиной sizeof(int) и считываешь ее в int. Все равно что написать "0010", привести к указателю на int и взять значение, это полный бред. Хочешь считать числа в своем файле - бери fread на весь файл в один char буфер, потом иди по нему функцией strtol.
289 1463206
Читаю kr, дошел до раздела про scope. Там юзают кейворд extern. Буду очень благодарен, если кто-то объяснит нахуй он нужен.
290 1463217
>>63196
Окей, но я если честно все равно не догнал почему мой вариант не работает. Асло я писал по этому примеру: http://www.c-cpp.ru/content/fread . Можешь, пожалуйста объяснить более подробно?
291 1463333
>>63217
У тебя в файле числа текстом. Ты читаешь текст, интерпретируя его как целые числа. Если бы ты хотел читать целые числа, тебе и записать их туда нужно было как целые числа (fwrite из подобной же программы или хекс-редактором, например). Если же ты хочешь читать именно числа текстом, то как тебе уже посоветовали, тебе нужно читать fgets/fread в текстовый буфер и потом парсить strtol или strtok/atoi.

Алсо, ты говоришь, что читаешь в бинарном режиме, а флага "b" в fopen у тебя нет.
292 1463338
>>63333
ах. Я кажется понял теперь, спасибо(чтобы прочитать их как целые числа, то нужно было использовать функцию fwrite для начала, так?). Да, я пропустил флаг, тоже потом заметил.
293 1463340
>>63206

> нахуй он нужен


В целом extern тебе нужен, чтобы сказать, что где-то есть такая переменная (обычно в другом файле, поэтому и extern - внешняя).
294 1463341
>>63340
Да, спасибо, я уже вроде как разобрался.
295 1463347
>>63338
Все равно у тебя большой пробел в знаниях. Посиди и подумай, почему так:
https://ideone.com/R8541f
296 1463356
>>63347
Такое число получается в val из-за того, что мы интерпретируем указатель на char * как указатель на 4 байтный инт(в твоём случае это uint32_t) и сразу разыменовываем его и в итоге он итерпретирует 4 байта строки str как 4 битное число (т.е. возьмёт номера 4 символов из таблицы ASCII и интерпретирует их). Я прав?
297 1463357
>>63356
4 байтное число*.
Пенис Ричи 298 1463539
>>63356
Примерно так, только вот номера символов ни откуда никто не берет, строка так там и лежит, в памяти всегда все в виде чисел и хранится. В >>63183 допущена именно такая ошибка, fread читает сырые данные в буфер, и ничего с ними не делает и в массиве numbers получаем в итоге мусор, если смотреть на него как на массив интов. Чтобы получить числа тебе нужно либо использовать вместо fread scanf, либо как-то самому парсить считанные данные, например sscanf'ом.
299 1463662
>>63539
Спасибо тебе большое анончик. Добра тебе. Да, я заменил fread на fscanf.
300 1465933
Всех с новым учебным годом! Ближе к середине семестра тред оживет!
301 1465950
>>65933
Что, уже смотрел расписание?
302 1465985
Помогите тупенькому пазязя
Есть n элементов, среди которых нужно найти наименьший. Если искать линейным поиском, то нужно сделать n-1 сравнений очевидно, т.е. n-1 итераций. А если сортировать по Шеллу, то проходов будет n/2, т.е. почти в два раза быстрее, и в конце запись одного из крайних элементов. Однако элементарных операций (вроде обменов данных между регистрами) намного больше при сортировки Шеллом. Что в итоге будет быстрее и почему?
303 1465989
304 1466270
Пидоры, помогите!!!! Не могу найти таблицу кодов хэмминга для ascii символов, чтоб проверить правильность своей программы. или я долбоеб, или этот мир охуел!!!!!!!! НЕ ГУГЛИТСЯБ ЛЯЯЯЯЯЯЯЯЯЯЯДЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!
305 1466274
>>66270
бля, уже нашел
306 1466289
У меня задача - сделать последовательный обмен байтами. Создаю так:

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 .
307 1466292
...пока не введёшь точку
echo -e '.' > /mnt/cache/test

Мне нужно, чтобы программа транслировала входящий поток байт-к-байту, пока не поступит байт завершения.
308 1466345
>>66292
>>66289
Странно. Перестало истерить после смены флага на O_RDWR. Странно, ибо мне же в программе нужно только читать поток, а писать извне... Короче, решено.
309 1466437
Зекач, пытаюсь подключить 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
Т.е. как в сигоспода ищут откуда берется какая-то глобальная переменная, если видят ее обявление?

В чем может быть проблема?
310 1466628
Котаны, читаю Прата, и там наткнулся на такое вот:

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.
311 1466639
>>66437

>все равно при компиляции выдает ошибку линковки о том что не может найти символ _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

Отсюда берется.
312 1466642
>>66628

Прочти ещё раз.
Обычно char - это байт. Но на некоторых платформах он может быть любым, аффтар рекомендует перепроверять, когда пишешь под что-то редкое.
313 1466658
>>66628

>Не могу вкурить, как байт может равняться 16 битам, если он вроде как по определению 8.


Байт по определению минимально адресуемая ячейка памяти, и в эмбеде поныне есть 16- и 32-битные байты.
314 1466660
>>66628
Не читай Прата, читай 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++); пройдется по всей памяти этой машины, без скипов.
315 1466665
>>66628

>читаю говно


>возникают проблемы


земля пухом
316 1466676
>>66628

> как байт может равняться 16 битам


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

> по определению 8


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

>>66665
Лучше конечно K&R читать, в котором половина кода давно с предупреждениями собирается, новых стандартов нет, важных мелочей нет, и вообще нихуя нет, и даже ричи умер.
317 1466685
>>66676
Ты определись, или вкатываешься в Си, не зная элементарных вещей, без которох рано думать о нюансах стандарта, или компилятор разрабатываешь.
318 1466687
>>66676
ой бля, не ты вкатываешься
319 1466700
>>66676

>Лучше конечно K&R читать, в котором половина кода давно с предупреждениями собирается, новых стандартов нет, важных мелочей нет, и вообще нихуя нет, и даже ричи умер.


Исторический подход в изучении вещей вообще самый правильный. Чтобы начать разбираться в политике, тебе нужно начинать с Платона и Аристотеля, а не читать их краткие содержания, или, тем более, современный учебник политологии для вузов.
В том числе помогает и то, что ты читаешь устаревшую книгу, а значит заранее настроен на то, что она 100% истиной не будет, и нужно при чтении думать головой.

Конечно, не всегда тебе хватит времени изучать какую-нибудь математику, начиная с греков. Но вот си не изучать с K&R, это совсем тупым куда-то спешащим мудаком надо быть.
320 1466701
>>66700

> Исторический подход в изучении вещей вообще самый правильный


PL/1 выучил уже? Или хотя бы B?
321 1466703
>>66701
Попробуй прочитать последний абзац прежде чем предлагать какую-то высосанную из пальца хуйню.
322 1466731
>>66642
>>66658
>>66660
>>66676

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


Аноны, спасибо за ответы. Вспомнил то забытое ощущение, как когда тебе всю жизнь говорили, что нельзя делить на ноль или брать квадратный корень из отрицательных чисел, а потом в какой-то момент говорят: "Забудь то, что учил в школе".

>>66700

> Но вот си не изучать с K&R, это совсем тупым куда-то спешащим мудаком надо быть.


Я не спешу, мне наоборот показалось, что раз в K&R 200 страниц, значит там многое скипнуто и не разжевано.
323 1466734
>>66731

>не разжевано


А вы, однако, тупенький-с. Я вообще считаю, что некоторые темы противопоказано разжевывать в гуманитарном стиле. Один хуй, не вывезешь потом при таком раскладе. В K&R все дается, но чтоб это взять, надо напрячь извилины, тем самым лучше усвоив. И именно так, сука, надо писать все книги по программированию, а не всякое говно по 1000 страниц, от которого у нормального человека опускаются руки учить что-то современное.
324 1467095
>>66734

> так, сука, надо писать все книги по программированию


И потом человек считает, что a[k] = k++; - это нормальный код. И пишет его.
325 1467113
>>66639
Оказывается это баг, в новых версиях либы забыли добавить SDL_coremotionsensor.m в билдскрипт для гейоси.
https://bugzilla.libsdl.org/show_bug.cgi?id=4357

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

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

Надо будет тоже осилить K&R и Linkers and Loaders в придачу, а то чувствую что слабо представляю как это работает и постоянно спотыкаюсь на таких моментах.
326 1467142
>>67095

>И потом человек считает, что a[k] = k++; - это нормальный код


Что в этом коде кажется тебе ненормальным?
327 1467143
>>66628

>как байт может равняться 16 битам, если он вроде как по определению 8.


Ахахахаха
Определений не читал, чем байт отличается от октета не знает.
Добро пожаловать в программисты, сынок. Одним больше, одним меньше...
328 1467144
>>66660
вот эта хуйня:

>implementation-defined


вообще в С и плюсах будет почти везде
329 1467206
>>67142

>Что в этом коде кажется тебе ненормальным?


Да ничего особенного, всего лишь UB.
image.png76 Кб, 645x729
330 1467407
>>67095
эмм... где взаимосвязь?
331 1467446
>>67206

>>Что в этом коде кажется тебе ненормальным?


>Да ничего


Зато пришел и насрал в треде какую-то хуйню.
Когда будет, что сказать, тогда приходи, унтерменш
332 1467474
>>67446
швитая толштота
333 1467504
>>67407

> где взаимосвязь?


Анон предлагает читать >>66734 короткие устаревшие книги, в которых о важных вещах либо упоминается вскользь, либо не упоминается вообще. Я вспомнил распространенный подводный камень, на который часто наступают вот такие читатели K&R как он. В Прате это разжевано. И таких моментов овердохуя.
Screenshot2019-09-0501-30-29.png395 Кб, 1276x750
334 1467523
>>67504
Прикрепи, пожалуйста, сам, картинку, где я ебу твою маму в рот.
335 1467532
>>67523
Ну окей, этот конкретный пример там есть, но сколько подобных вещей туда не влезло?
336 1467538
>>67532
Туда влезло, например, написание менедежера памяти.
337 1467539
>>67504
Вкатываться так, чтоб со всеми подводными сразу, только долбоебы рассчитывают. Охуели вообще, хотят одну книжку прочитать и быть готовыми к написанию промышленного кода. С Сишечкой это не канает в принципе. Есть множество граней скилла, и нет смысла ставить что-то в приоритет, потому как ты один хуй никто, пока не выдрочишь несколько полных кругов по всем пунктам в течение лет - не месяцев. В начале пути равноценен любой прогресс, а K&R, имхо, дает незаменимый стартовый буст при условии, что читатель не унтерменш. А нежданчики с UB... ну хз, по-моему, опять таки, не будучи обделенным генетически, эту тему можно вскрыть с меньшим оверхедом от вторичности источников, чем оверхед от проеба вначале фундаментальных ништяков, потому что кто-то говно на стол положил и сказал, что это настольная книга. Под фундаментальными ништяками я имею ввиду все те живые знания, которые не привить разжевыванием, а лишь гениально построенным курсом "додумай сам" для ЦА, умеющей в отдачу за книгой.
хуету какую-то настрочил, лень редактировать
338 1467749
Выскажу своё нюфанское мнение. Начинал с КР, вроде всё збс, да только каты там всратые по-началу, алсо листинги на полебла и разжёвываются слабовато. В какой-то момент (начиная где-то со struct) дропнул КР и решил тупа писать хеллоуворлды с Кодворса, а также c cрр и других подобных ресурсов. При возникновении проблем, смотрю КР или того же Прата, или гугл. Если совсем пиздец - осваиваю нужную главу досконально. Имхо сабжи стоит изучать где-то до половины, дальше - только практиковаться. Я что-то делаю не так?
339 1467777
>>67749
Более-менее так.
Если с твоей точки зрения

>листинги на полебла и разжёвываются слабовато


То твой навык отладки в уме недостаточен и нужно его развивать. Можно принтов нахуячить, если совсем все плохо.
А не искать блядь книгу, автор которой пытается заработать денег на даунах. Разжевывание программного кода в книгах - большое зло. Код самодостаточен, и если ты его читать не можешь, как ты его писать собираешься.
340 1467876
>>67749
K&R не обломишься и целиком пройти. А что до разжевывания... ну, щас бы забраковать шедевр, пушто авторы не предсказали, как гцц на бубунте запустить, лол
cbooks.jpg2,6 Мб, 4032x3024
341 1468078
>>67539
По моей практике работы со стажерами, минимум это пикрил. После этого можно о чем-то разговаривать.
342 1468096
>>68078
Что за говно справа? Почему оно мне не понадобилось? Жонглирую указателями хуем, прекрасно себя чувствую.
343 1468106
>>67095

>a[k] = k++;


>Undefined Behavior



Схуяли вдруг там будет UB?
Ты точно ничего не напутал?
Не мог бы ты привести какие-то пруфы?
345 1468123
>>68106
В принципе, есть стандарт. Там написано. В разделе Expressions, что ли.
Но тот анон его не читал, пересказывает по каким-то мудовым книгам, которые принимает за основополагающие.
346 1468131
>>68123
Кто-то слышал звон, просто.

Undefined behavior выглядит так:
a[i++] = i++;

И даже ньюфаг поймёт (интуитивно), что так писать не надо.

https://www.nayuki.io/page/undefined-behavior-in-c-and-cplusplus-programs
347 1468163
>>68131

> какой-то говносайт


Тем временем в стандарте: 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.
348 1468175
>>68163
Чем тебе не value computation?

Давай пруф (с любого говносайта, кроме мейлача) с примером выражения типа a = i++;
349 1468176
>>68175
Блядь, в первой строке должно было быть i в квадратных скобках.
350 1468243
>>68096
Очевидно что речь идет об объеме знаний, как именно они получены значения не имеет, конкретные общеизвестные книжки предлагаются для ориентира.
Capture.PNG19 Кб, 800x452
351 1468252
Я вам покушать принес.
352 1468261
>>68252
высрал хуйню и радуется
и показал пример, чтобы другие не высирали такую же хуйню
353 1468263
>>68261

>пук-сереньк

image.png380 Кб, 723x470
354 1468269
Найс тред живет...
355 1468320
<iframe src="https://pastebin.com/embed_iframe/hg0qhaGQ" style="border:none;width:100%"></iframe>
356 1468322
>>68320
заголовочный файл

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

Объясните долбоебу почему цикл при вводе нормально только первый проход делает а потом пропускает строки.
357 1468343
БЛЯТЬ, понимаю что нужно учить английский для программирования, но я настолько туп что не могу просто. Ничего не лезет в голову
358 1468410
>>68343
потсавь на тлефон сололеарнну или какие другие курсы, выбирай курсы на английском там абзацы не большие читаешь неаонятные слова в словаре смотришь, потом переходи на freecodecamp там курсы объемнее потихоньку нахватаешься по крайней мере читать научишься.
359 1468433
>>68322
Хуй знает, анончик, но если у тебя Windows, то вчера я с такой же залупой столкнулся. Ломается ввод, когда читаешь char, будь то ch=getchar(), будь то scanf("%c",&ch). Пиздос какой-то. На твоем месте я бы просто не выебывался с оптимизацией puts/gets и все 4 раза проделал printf/scanf. scanf сама пробелы пропускает, так что можно обойтись без getchar.
360 1468494
>>68131
Поздравляю, ты тоже вместо чтения стандарта читаешь хуй знает что.
361 1468499
>>68175
a [ i ] = i++;
что в какой последовательности выполнится?
1. i++?
2. определение адреса a [ i ]?
3. присвоение i?
4. присвоение результата i++?

ссылку на стандарт (а не на говносайт) дать?
или сам найдешь?
362 1468526
>>68499
2 1 4 3
363 1468533
>>68433
Windows, там ещё мусор какой то вместо price пишется.
364 1468547
>>68494
>>68499
Ну что ты ёрзаешь?

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

Есть миллион таких примеров для a[k++] = k++;, что не удивительно.
Я же прошу показать всего один.
365 1468549
>>68547
В глаза ебаться перестань: >>67523
Или для тебя K&R недостаточно авторитетный источник?
366 1468559
>>68549
Убедил, лол.

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

Я, всё-же, думаю, что со времён K&R многое изменилось, и теперь такое должно нормально работать везде. Т.е., слева и справа будет взято i, а инкремент будет потом, после присваивания и перед точкой с запятой.
367 1468587
>>68559
Не должно. потому что оператор присваивания не гарантирует что все, что справа от "=" будет вычислено раньше, чем все, что слева.
368 1468604
>>68587
После некоторых размышлений и прочтения куска из K&R, вынужден согласиться.
.png20 Кб, 566x381
369 1468638
Прекольные эти многомерные массивы.
370 1468715
>>68526
а теперь обоснуй
с какого хуя у тебя lvalue первее rvalue
371 1468718
>>68547

>Ну что ты ёрзаешь?


Как на твоей мамке и не ерзать, пока ты хуйню на дваче несешь?
372 1468720
>>68547
Характерно, что на простой вопрос ты так и не ответил, специалист.
373 1468724
>>68559

>Я, всё-же, думаю, что со времён K&R многое изменилось


Вот же ж ебаный мудак.
Думает он.
Тебе сказали русским языком: ЧИТАЙ ЕБАНЫЙ СТАНДАРТ.
А ты все думаешь
Тебе нечем
374 1468829
КиР слишком предания старины глубокой, Прата слишком разжевывает для тупых, а Шилдт охуенен, но чуть староват.
375 1468835
>>68724
Существует ли перевод стандарта на человеческий язык?
376 1468837
>>68835
Стандарты для разработичков компиляторов и форумных аутистов. Нормальный человек просто не пишет плохо пахнущий код.
377 1468875
>>68829

>Шилдт


спасибо, мне как раз масла на яичницу не хватало
378 1469079
>>46278 (OP)
Можно ли отключить stack protector в clang только для одной конкретной функции?
Через #pragma или __attribute__ как-нибудь? Или только вырубать во всей программе?
379 1469121
>>68835
если английский для тебя не человеческий, то ты какой-то червь-пидор с венеры
любой перевод будет ущербным. потому что согласовали все именно в английском оригинале
380 1469123
>>68837
Точно.
Нормальный человек вообще ничего не читает. Сразу пишет. Сразу охуенный код. Стандарты для пидоров и хуесосов
Так держать!
381 1469134
>>69079
Вроде бы нет, но ты можешь просто положить функцию в отдельный файл.
677.png1,2 Мб, 1000x1400
382 1469138
>>46278 (OP)
Мда, начало сентября и тред по Си внезапно и неожиданно взлетел. Интересно, с чем же это может быть связано?
383 1469140
>>69138
Вот это ты открыл всем глаза.Мы то не знали что в си и асмо треде чаще всего сидят студенты и ебутся с лабами
изображение.png100 Кб, 782x241
384 1469143
>>69140
Да грустно это всё. Такой мощный язык, столько всего можно на нём замутить, очень быстрый, очень производительный, очень ресурсоёмкий, можно писать очень близко к железу, при этом он максимально прост и прозрачен. А в итоге получается, что он нужен только школоте с laba1.c.
385 1469145
>>69143
как пример я не студент и не школота, начал изучать си, хотя в свое время был курс и в том числе лабы, о которых я вообще ничего не помню.
386 1469147
>>69145

>начал изучать си


>в свое время был курс и в том числе лабы, о которых я вообще ничего не помню


Кек, вся суть отечественных шараг.
387 1469148
>>69147
курс был не большой, специальность все таки связанна с программирование опосредованно
388 1469153
>>69148
Почему тогда решил вк4атиться, если твоя специальность

>связанна с программирование опосредованно

389 1469231
>>69153
прост0))))
390 1469359
Существуют ли еще языки такие же охуенные как Си?
391 1469456
>>69359
Нет. Я пришел к выводу, что даже если Си не самый удобный язык для всех задач, он является единственным НЕзашкварным языком.
av-11954.jpg17 Кб, 276x261
392 1469624
СВЯТЫЕ МОЗОЛИ СТОЛМАНА ЧТО ЭТО БЛЯДЬ ТАКОЕ!?
static char ×
concat (s1, s2)
char ×s1, ×s2;
{мясо функции}
Листаю стандарт кодирования GNU, и тут такая хуйня. Это чо эта такое та? Какое то хитровыебаное определение типов у аргументов функции?
393 1469633
>>69624
Это синтаксис из 80х
394 1469668
>>68829

>Шилд


это какой?у него там несколько книг?
новичек
395 1469753
>>69143
Ну мне нужен! Пишу только на нём в основном, точнее на крестах как си с классами. Только спрашивать нечего, язык-то простой.
396 1469937
Можно ли с помощью сишного винапи отслеживать действия юзера? Ну типа нажата такая-то клавиша, курсор в позиции икс и т.п.. не малварь. В Гугле только доки и примеры на сишарп, но не хотелось бы ради этого учить новый язык
397 1469952
>>69937
Можно.
399 1469970
Дейтелы "Си для погромистов с введением в Cи11" - топовая книжка по Си.
400 1470026
>>69967
спасибо,няш
401 1470377
Днонетчик >>61769 снова тут. Читаю 4 главу K&R и не совсем понимаю необходимость раздельного declaration и definition функций. Поэкспериментировал немного, объявляя функции в разных файлах, и в этом случае я еще могу понять, для чего нужен прототип - компилятор компилирует каждый файл по отдельности и на этом этапе ему достаточно просто заголовка вызываемой функции, я так понимаю, дальнейшее это уже забота линкера. Но зачем нужен прототип, если вызываемая функция расположена в том же файле, что и вызывающая, просто чуть ниже по тексту? При этом если вызываемая функция определена выше вызывающей, все работает даже с -sdt=89
402 1470378
>>69121
>>68638
>>69359
>>69456
>>69668
>>69753
>>69952

Как же круто и интересно читать говно от душевнобольных школьников из Б да, я знаю что ты уже первокурсник
403 1470381
>>70378
Ты ошибся не просто тредом, а даже целкой доской
Тебе в /га, там тебя заждались
404 1470412
>>70377

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


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

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


А тут компилятор функцию уже распарсил, запомнил, информация о типах есть, поэтому все ок.

Поэтому чтобы избавиться от прототипов в пределах файла часто просто располагают все функции "снизу вверх" (main внизу, нужные ей функции повыше, всякая мелочь в самом начале файла, прототипы только для рекурсивных функций).
405 1470470
>>70412
Спасибо, анончик. Добра тебе!
406 1471410
>>46278 (OP)
int count_one_bits(int n) {
int count = 0;
while (n) {
if (n & 1) { ++count; }
n >>= 1;
}
return count;
}
Задание 1) что делает этот код не запуская? 2) найти проблему в коде
407 1471441
>>71410
Тебе кажется, что тут викторина для альтернативно одаренных?
Если ты знаешь, что в коде есть проблема, то на хера тебе знать, что этот код делает?
Вот когда исправишь проблему, приходи, мы тебе ответим, что он делает.

Кстати, если ты склонен писать иф блаблабла в одну строку, то на хуя ты там скобочки вкрячиваешь?
Какое-то особое извращение.
408 1471448
>>71410

Что делает? Неправильно считает единицы в двоичном представлении числа. Где проблема? В том, что если старший (знаковый) бит - единица, он будет копироваться в младшие биты до бесконечности, и условие всегда будет истинным.
409 1471458
>>71441
Что ты такой злой, тебе задачку принесли размять мозги.
>>71448
Да. Если число отрицательное, то бесконечный цикл.
410 1471528
>>71458
Я себе так мозги разминаю по 40 в неделю
ЗА ДЕНЬГИ!

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

>>> в вашем древнем языке есть?

411 1471530
>>71458

>Если число отрицательное,


то ub ub кладбище пидор
412 1471554
насрал в тред жидким #define anusPTR ((void *)anus)
413 1471557
ой блин, забыл место в жопе освободить после int ANUSAPI ANUSSTACKRULE GOWNOSTACKRULE destroy_gowno(void , void , void , void , void *) ну все пиздец
414 1471560
может объясните мне почему каждый сишный проект превращается в 100 тысяч строк кода с 8 точками входа для апишек а самый используемый тип данных это void? студенты не отвечайте на вас всем похуй
415 1471638
>>71530

Да ваще пиздец, даже + не гарантирует, сто не будет ub.
416 1471655
>>71560

>студенты не отвечайте на вас всем похуй


ну блядь, за что ты нас так?..
417 1471672
>>71560

>а самый используемый тип данных это void?


с ним можно указатели вертеть
418 1471795
>>71448
В чем разница между n>>=1 и n/=2, если n>0?
419 1471803
>>71795

Нет её. Компилятор заменяет умножение или целочисленное деление на 2 на сдвиги.
420 1472102
>>71560
Потому что 10-е правило Гринспена. Как ты динамическую типизацию без войдов запилишь?
421 1472174
Аноны, как вкатиться в Си если все что я делал, связанное с программированием - это чуть-чуть писал на АВР ассемблере. С чего начать?
.png2,7 Мб, 300x420
422 1472190
>>72174
В картинке - 7z-архив, а в архиве - книга.
423 1472225
>>72190
А есть для не программистов?
424 1472244
Какую библиотеку посоветуете для работы с json?
Желательно, чтобы она умела раскидывать выходные данные в заданную структуру, автоматически выделяя память.
425 1472325
>>72190
А брат не умрет?
426 1472365
>>72225
Это для новичков на самом деле. Для программистов есть справочник Шилдта и стандарты.
427 1472552
>>46278 (OP)
C джуны вообще существуют, или все, кто профессионально пишет на c рождаются с 10-летним стажем?
sage 428 1472893
>>72552
ломают матрицу ещё у бати в яйцах, че хотел то?
429 1473028
>>72552
Ребята, не стоит вскрывать эту тему. Вы молодые, шутливые, вам все легко. Это не то. Это не Чикатило и даже не архивы спецслужб. Сюда лучше не лезть. Серьезно, любой из вас будет жалеть. Лучше закройте тему и забудьте, что тут писалось. Я вполне понимаю, что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь пытливых - стоп. Остальные просто не найдут.
На самом деле, всю низкоуровневую инфраструктуру создают сущности не от мира сего, но чтоб у людишек не возникало слишком много вопросов, придумали Си, на котором что-то эдакое можно худо-бедно закосплеить и смириться, что просто не осилил.
430 1473032
>>72552
В embedded существуют, я был им де факто, работал за еду в продуктовой электронной компании, меня выпиздили потом.
431 1473092
>>72174
С любой нетолстой и неновой книжки, K&R там или даже прости господи Бочков-Субботин.
Тебе будет просто - си это макроассемблер (если есть в этом сомнения, включи у компилятора трансляцию C в ASM и поизучай выдачу).
IMG20190914182833536.jpg85 Кб, 1280x720
432 1473358
Парни, где проблема? Когда пробую ввести цифры, то выдаёт nanт(может подскажете как правильно вводить данные) Буду очень благодарен. Начал изучать сишку неделю назад.
433 1473363
>>73092

Это верно, только если отключить оптимизатор.
434 1473364
>>73358

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

Само уравнение вводить нельзя, можно вводить только коэффициенты.
435 1473375
>>73364
Большое спасибо за помощь) Теперь это работает. Вот только при других цифрах иногда выводит пустую строку.
IMG20190914191329437.jpg10 Кб, 502x132
436 1473378
>>73375
Пофиксил. В строке с puts надо было поставить кавычки.
.png2,8 Мб, 300x420
437 1473871
>>72190
Забыл исходники примеров добавить. Исправляю сию оплошность.
438 1475817
Почему аллоки так криво работают в функциях?
К примеру:
struct t challoc (void) {
return (struct t
) malloc (sizeof(struct t) * n);
}
в мэйне после каста "поинтер = challoc ()", указатель точно не будеть указывать на NULL (т.е. типа память точно дали), но записать что-либо на его структуру нихуя не получится.
439 1475826
>>75817
Мудак, ты должен поинтер возвращать, а у тебя какая-то хуйня
440 1475827
>>75826

>(struct t) malloc (sizeof(struct t) n);


Это же опечатка, каюсь-изеняюсь
441 1477599
Посоветуйте что можно про структуру программ почитать, например пишу условный калькулятор делаю функции 1 ввод-вывод перевод из одой ситемы в другую как определить сколько вообще функций делать?
442 1477618
>>77599
Зачем тебе это? Лепи как получается.
443 1477775
>>77599
Code complete?
444 1478156
>>46278 (OP)
вонючее веб-чмо решило вкатиться на досуге в Сишечку. Прочитал учебник, пожонглировал указателями, хотел бы какой-нибудь проект мини запилить, чтоб вкинуть на гитхаб и порадоваться, какой он нужный и скачиваемый. Что можно запилить? За полвека существования С разве не написали на нём все либы, какие вообще можно представить только?
445 1478173
>>78156
напиши игру на SDL
446 1478269
сап, начал читать Кернигана- так там с первых строк уже неактуальная инфа, приходится банально гуглить, что прогу в СИ уже нельзя начинать с main{ , а только с int main{ , не работают элементарые проги из самого начала книги, вместо того, что говорится в книге, печатается либо нихуя, либо что-то левое из юникода, есть вообще смысл дальше ковыряться в этом говне мамонта? слышал, что это библия для сишников, но не думал, что она и правда настолько стара
447 1478271
>>78269
Хз что за у тебя компилятор, но в майне можно ничего не возращать даже если он инт. А можно вообще поставить войд)) и оно скомпилируется. Всё там работает, перепроверь что правильно скопировал код.
448 1478335
>>78269
Что-то не припомню глобальных проблем. Даже если они и есть, то только вначале. Вкатился в среду - идешь по книжечке и радуешься жизни. Эти минутки гуглежа ни в какое сравнение с часами гуглежа для неумеющих мыслить, кто начал Си с современной говнолитературы.
ПыСы сам уже с добрых полгода под Linux сидел на момент вката в Си. Ибо нехуй. Там в конце еще интересное про системные вызовы UNIX, read/write, brk/sbrk, хуё/моё.
449 1478338
>>78269
>>78335

>современной говнолитературы.


это какой?прата - говнолитература?
450 1478357
Только не обоссыте сразу, ок? Студенота. Стоит ли вкатываться в Си и микропроцессоры, если в мухосранске ничего об этом не слышн?. Зато есть несолько школ жавы с возможностью трудоустройства
451 1478368
>>78357
С нуля в микроконтроллеры и низкоуровневое говно,да так чтобы получить работу ты не вкатишься( см. >>73028 )
если фо фан,то можно
452 1478410
>>78269
Вот тут актуальная инфа. >>73871
453 1478629
Насколько долог путь от первого чаптера Кер&Ритчи до создания своей первой кошкодевочки? Да так, чтобы с нейросетью и асции-рисунком?
454 1478671
>>78629
Не долго. Достаточно выучить язык, потом освоить нейросетки, потом вывод графики и можно начинать пробовать. Язык осваивается за три дня, нейросетки за день, а графика и прочий гуй за два, плюс еще день на запил прототипа. Неделя всего.
455 1478739
>>78671
Это если ты сеньёр-помидор, который уже всё повидал и новые технологии осиливаешь с пол-пинка. У новичка же уйдут годы.
456 1478769
>>78671
Бда бда бда, а потом у таких мегамозгов через допустим все работает и дальше примитивного прототипа не уходит.
457 1478770
>>78769
Через жопу*
458 1478773
>>78368

>(см. 1473028)


Эмм, я рофлил вообще-то. А за всамделишную ситуацию не шарю.
мимо студент-не-бейте-лучше-абассыте
459 1478775
>>78770

>автокоррекция


Сидит на борде со смартфона, стало быть, не достаточно уважает наш тред, чтоб соблюдать культуру капчевания за настольным ПК. Мы ему не фастфуд! Обоссым его!
460 1478893
>>78775
Ахаха, отошёл от сычевальни на кровать, и сразу попался.
461 1479105
>>46278 (OP)
Двачеры, ответьте: есть ли компилятор Си для Sublime Text 3? Если есть, как его установить?
462 1479132
>>79105
А просто через gcc собирать, не? Честно говоря не шарю за этот редактор, но обычно в подобных редакторах можно открыть консоль, и собирать через консоль с помощью gcc.
463 1479147
>>79105
Сердце обливается кровью за любимый тредик...
Screen Shot 2019-09-22 at 16.21.36.png75 Кб, 561x565
464 1479169
>>46278 (OP)
Есть тут спецы по pthread?
Правильный ли это код для корректной работы pthread_cond?
Может ли тут случится deadlock?
466 1479190
>>79169

>спецы по pthread


Сап двач, в моей мухосрани нет такой вакансии, переквалифицироваться западло, еот бросила, реквестирую способы ркн.
467 1479338
Сап, Сишники! Вопрос -- есть ли в СИ функция нахождения целой части от деления?
468 1479352
>>79338
int n = 4/3;
469 1479359
>>79352
Спасибо большое, всё работает!
470 1479450
>>79338

>функция


Алё, DIV/IDIV оставляет целую часть в AX, а остаток - в DX. Если с float, то или кастами, или floor().
471 1479452
>>79338

>функция


Алё, DIV/IDIV оставляет целую часть в AX, а остаток - в DX. Если с float, то или кастуешь в int (поддерживается на уровне архитектуры), или floor().
472 1479453
>>79450
сука Абу, нахуй косплеить возможность отмены отправки, когда оно не працюет?!!
473 1479925
>>46278 (OP)
Добрый день.
У меня возникло пару вопросов.
1) Как оформлять библиотеку в Си?
В .c файле писать тела функций, а в .h файле - заголовки, переменные, массивы и макросы, верно?
А если сделать библиотеку полностью в .h файле, не будет ли это быдлокодом?
1)Зачем вообще нужны inline функции(фактически макросы).
Увеличить быстродействие? Но пару дополнительных тактов на вызов никак особо не повлияют на быстродействие, если там не частоты, сравнимые с частотой процессора.
Только больше проблем доставляет тем, что их нужно объявлять только в .h файле, как макрос, и увеличивает вес программы.
474 1480091
>>79925

>полностью в .h файле


Охуенно ты придумал. Вот у тебя скомпилированы .o, использующие одну библиотеку. Функции же библиотеки не находятся в отдельном .o, а продублированы в каждом из твоих .o. И откуда линкеру-то, блядь, знать, что они идентичны, и какие копии можно выбросить?

>те же макросы


Нет, макросы обрабатывает препроцессор, который без задней мысли тупо заменяет текст(текст1,текст2,...) на то, что в дефайне, подставляя содержимое скобок. Ему похуй на типы - это уже проблемы конпелятора, которому скормили развернутые макросы. inline же позволяет компилятору не делать call/ret, полностью сохраняя при этом поведение, определенное для вызова функции, копируя что надо, и т.д. и т.п.
475 1480241
У меня есть код, там используется void (как по-мне, так код чище и понятнее, не надо городить присваивания к другим типам и все такое. В той конкретной ситуации считаю оправданным).

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

Как писать-то? Вариант который использую я (типа vptr += 8, например) кажется мне некрасивым.
476 1480243
>>80241
Звездочки сожрало. В приведении типа, где (uint64_t) конечно же я имел ввиду указатель на 64 битное беззнаковое
477 1480249
>>80243
5 + 5
(5 + 5)
(5) + 5
Есть ли между этими выражениями, какая то разница? Мммм?
478 1480251
>>80249
Да, с точки зрения компиляции есть, так как по стандарту выражение рассматривается справа налево, скобки меняют этот приоритет.
479 1480253
>>80249
Дополню. Лично я, когда непроходимо просто инкрементировать на 1, пишу так:
(uint64_t)x++;
Если больше чем на единицу, то:
(uint64_t
)(x + 3);
480 1480256
>>80253
В данном случае мне нужно инкрементировать УКАЗАТЕЛЬ, а не число.
481 1480257
>>80251
Да, это так. Но в данном случае, как при компиляции может поменяться выражение?
Или речь не только об сложении?
482 1480259
>>80257
Ну так, если я инкрементирую указатель на uint16_t, к примеру, то в памяти значение куда указывает указатель должно сместиться на 2 байта, а в случае указателя на uint64_t на 8 байт.

Вот я и спросил, можно ли это как-то написать в случае в void-указателем, или только так как я и делаю сейчас - прибавлять sizeof(type)?
483 1480267
>>80259
Дошло)
Можно так:
void p;
p = (uint16_t
)p + 1;
Увеличит на uint16_t.
484 1480268
>>80267
Моча все звездочки трет, но там везде указатели.
485 1480270
>>80259
void нельзя инкрементить\декрементить по стандартну. Там где это можно (данное расширение в вижуал студии есть точно) - там void инкрементится как char*
486 1480275
>>79169
Хз,как ты эти функции вызываешь и где...
487 1480280
>>80270
Спасибо за ответ
488 1480284
>>80270
Но можно привести voidЗВЕЗДОЧКА, к какому либо типу и инкриментировать, как я описал здесь:
>>80267
489 1480291
>>80284
Тогда уж более чисто написать vptr += sizeof(uint16_t)
490 1480296
>>80291
Ну это если только тебе нужно инкриментировать на размер какого то типа. А если нужно инкриминтировать на n размеров какого либо типа?
491 1480297
>>80296
vptr += sizeof(uint16_t) * n
sage 492 1480299
>>80297
vptr += sizeof(uint16_t) * n; // Я не осилил адресную арифметику. Извините.

исправил, не благодари
493 1480304
>>80299
Че это? Компилятор раскроет sizeof(uint16_t) как 2 и умножит его на n , если это неизвестная то в рантайме умножит, если я его введу в виде константы то во время компиляции.

vptr += sizeof(uint16_t) * 6 раскрывается как addq $12
494 1480337
>>80297
Ну чорт знает, операция умножения вродь больше тактов занимает, да и постоянный вызов sizeof(), ну хз хз.
495 1480343
>>80337
Так там не будет умножения если n является константной. Sizeof точно так же на этапе компиляции раскрывается (или препроцессора? Не уверен), это не вызов.
А если n не является константой, то там в любом случае будет runtime вычисление
496 1480353
>>80343
А почему умножения не будет? Поподробнее...
497 1480356
>>80353
Ааа, кажись понял, ты про то, что компилятор эту переменную еще в препроцессоре посчитает? Ну да... это если обе константы.
А в Runtime вычислении, сложение выиграет sizeof()*n
498 1480357
>>80353
Потому-что в случае если на месте n константа, то компилятор производит вычисления во время компиляции, так как они всегда будут неизменны.
Пример:
x = 6 2. Компилятору нет смысла это компилировать как sall $1 (сдвиг влево на 1), или тем более как mul $2 (умножение на 2), потому-что значение можно вычислить во время компиляции.

Так и в случае
vptr += sizeof(uint16_t)
6
Компилятор из этого сделает
vptr += 12
499 1480359
>>80356
Это как же ты в runtime неизвестное количество n посчитаешь без умножения?
500 1480364
>>80356
Алсо, на godbolt проверил - что vptr += sizeof(uint16_t) n, что vptr = (uint16_t) + n компилируются одинаково.
501 1480365
>>80241
ну хз, я бы вообще писал ++(uint64_t∗)vptr
502 1480368
>>80365
Не будет компилироваться
503 1480411
>>80368
Ой бля, точно, cast же rvalue...
Тред утонул или удален.
Это копия, сохраненная 21 октября 2019 года.

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

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