Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь 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 помогает читать сложные сишные декларации.Прошлые треды:- №43: https://arhivach.ng/thread/441686/- №44: https://arhivach.ng/thread/444396/- №45: https://arhivach.ng/thread/448906/ >>1393395 (OP)
Что я делаю не так?Sample Output:_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
>>1416785Запутался в циклах, очевидно же, ну и не проще ли сделать использую массив? Достаточно будет даже одного
>>1416849Я переменную не туда внес, из-за этого цикл получился бесконечным. Для меня там все очевидно, я же сам писал.
>>1416864По возможности объявляй счетчики внутри for, не используй глобальные переменные и while вместо for.for(int count = 0; count < 15; ++count) printf("a");Код станет в разы более читабельным, найдешь ошибку.Если знаешь про функции - заверни печать в них:int print_symbline(char c, int num){ // for или печать массива}
Решил, я значит, что достаточно зашкварился на ближайшее время с printf-дебагом, и у меня, как всегда, подгорела жопа. Как в этом вашем ебучем gdb параллельно и input печатать, и комманды типа next, step, p ∗(int ∗)array@7 ?
>>1416956Он сам переключается в режим общения с программой, когда она блокируется в ожидании инпута. Но если прога хочет ввод, а ты хочешь сначала кое-что посмотреть по памяти, например, то можно вручную в диалог дебагера вернуться Ctrl+C, пробить что надо под промптом (gdb) и опять опять постучаться в выполнение командой continue.
>>1417000Спасибоу. Надо бы тоже сесть за gdb, а то плотные обмазывания трассировкой из printfов до добра не доведут.
Народ подскажите как в clang узнать какие либы используются, в gcc можно было через -MD все в файл засунуть
Сап. Хочу поупарываться в сишном велосипедостроении.Как я могу переписать стандартную библиотеку си? Хочу половину ненужной мне хуйни оттуда выкинуть. Слышал вот что люди сами пишут эти библиотеки, хотелось бы так же.Как можно например изменить стандартные типы, это где то в самом компиляторе храниться?Да и вообще, что есть си? Хотелось бы в этой алхимии разобраться чтобы все свое запилить. А то от вида исходников мне больно. Как подумаю что кроме нужного мне тянется еще 20кг говна аж в дипрессию впадаю.
>>1418264В современных осях стандартная библиотека довольно сложно реализована. Можешь посмотреть реализации для встраиваемых решений или для реликтов вроде доса. Там все попроще но не намного
>>1418264>хочу переписать стандартную либу>iso646.h, string.h, math.h, stdatomic.hвряд ли на что-то большее терпения хватит. За отправные точки бери реализации из gcc.Если хочется поебаться и безуспешно пытаться поисправлять 30 летние костыли, то перепиливай unistd, stdlib, stdio
>>1418264> Как я могу переписать стандартную библиотеку сиБереш стандарт и реализуешь описанное поведение. Собираешь с аналогом ключа -nostdlib в твоем компиляторе, линкуешься, идешь переписывать еще и стартап. Линкуешься, радуешься.> Как можно например изменить стандартные типыНикак, на то они и стандартные.> Как подумаю что кроме нужного мне тянется еще 20кг говна аж в дипрессию впадаюС возрастом это пройдет и придет понимание, что байты надо экономить там, где это на что-то влияет, а не просто потому что все детали реализации не помещаются в твою голову.
>>1418264>Как подумаю что кроме нужного мне тянется еще 20кг говна аж в дипрессию впадаю.Ты точно на С пишешь? Что у тебя там тянется и откуда? Ты ебанутый?
>>1419211Разработка низкоуровневых компонентов операционных систем, программирование микроконтроллеров, поддержка легаси кода.
https://progtips.ru/c_expressСи-экспрессСборка «Си-экспресс 2.0» – это среда CodeBlocks с набором бесплатных инструментов программирования на языке Си. В состав сборки входят все необходимые программисту инструменты и библиотеки. Сборка предназначена для работы в среде Windows.Сборка “Си-экспресс 2.0” не требует установки и организована по принципу «распаковал и запустил».Пойдет такаясреда для обучения? Может кто этого чувака знает?
>>1419387Хороший такой завуалированый под вопрос на который отвечает шапка пиар параши, на уровне сммщиков в телеграме/инстаграме.
>>1419388Вот только наткнулся, хотел попробовать калькулятор простой под виндовс собрать. Кроме онлайн сред не пользовался ничем.
Аноны, этот ваш Си не умеет в кроссплатформность у меня проблема. Надо кросс-компилить кое-какой код под винду, а он юзает malloc_trim и tdestroy. Их, естественно, под винду не завезли. Без malloc_trim течет память. Гигабайт может висеть на процессе просто так, про запас, если не вызвать malloc_trim(0) вручную. А без tdestroy я не знаю, какой костыль пилить и скармливать twalk для аналогичного результата. Че делать, сука???
боевую картинку забылАноны, этот ваш Си не умеет в кроссплатформность у меня проблема. Надо кросс-компилить кое-какой код под винду, а он юзает malloc_trim и tdestroy. Их, естественно, под винду не завезли. Без malloc_trim течет память. Гигабайт может висеть на процессе просто так, про запас, если не вызвать malloc_trim(0) вручную. А без tdestroy я не знаю, какой костыль пилить и скармливать twalk для аналогичного результата. Че делать, сука???
>>1421285> Гигабайт может висеть на процессе просто такЭто уже у запущеной под виндой программы? malloc_trim это вроде как чисто линуксовая хуйня, и на win таких проблем изначально нет, но я не разбираюсь в этом дерьме.
>>1421296А.. ок, значит можно malloc_trim убрать. Но вот чтоб заменить во всех местах tdelete, надо к тем еще изъебам с одноразовыми функциями прибегнуть. Я уже хочу голыми руками задушить того, что придумал, что нужно в стандарт glib включать, а что и так сойдет.
2ch'ик помоги.Ухх, решил заняться эпликейшином. До этого работал лишь в терминале.У меня есть 3 поля Edit. В них я записываю имя, фамилию и адрес. Нужно как-то записать всю эту красоту в структуру данных(массив данных). Пробовал через strcpy(STU.FN,Edit1->Text.c_str);, но вылазят какиенто непонятные ошибки. Помоги(
>>1422089Вот держите и помогите(https://anonfile.com/79z9Ebw1n4/Anon_am.png_rar), таксказатьб. У меня всего 6 заданий (из которых ни одна еще не готова...) Ковырять нужно 4 форму.
>>1422636>эта кривая ссылкаВся твоя жизнь одним постом.>нужно Кому?Мне не нужно, тебе нужно - ты и ковыряй.
>>1422639https://drive.google.com/open?id=1EXSfPTuOw6USDIoyQVqIJ5dI6GYE0MR1 У меня качает с той ссылки...
>>1415970 (OP)если тред жив, скажите, я учил Си по учебнику Прата лет 5 назад.давно не писал ничего на нём.Сейчас пишу на пайтоне.С какой книги лучше начать повторять Си. K&R?пикрил у меня дома. мамкин Я хочу понять как в современном Си все делается, чтобы это не было нормально.
>>1422808стандарт читани в онлайне и статейки по многопоточности, и все ок будет. Если уж прям хочется с нуля, то книжка Язык Программирования C, но она крайне посредственна. доки компиляторов тоже почитай. бля девчонке бы в качалку такая жопа была бы пиздатая... эх
>>1422881Стандарт? А у меня мозги не выкипят? Ты о чьей книге говорил, прата или к и р?А как насчёт козьерока?.
>>1422890Прату читай. Совет читать стандарт, да еще если постоянно на Си не пишешь - это явный троллинг.
>>1415970 (OP)Анон, помоги разобраться с функциями, которые принимают переменное число аргументов.Например, есть функция foo() (пик), которая, по моим задумкам, должна последовательно выводить элементы переданных ей массивов (сначала выводятся элементы массива first, а затем, тех, которые были переданы, так сказать, неявно).Что я делаю? Погуглив как работать с функциями с переменным числом аргументов, я понял, что для того, чтобы получить последующий аргумент, следует использовать указатель на первый аргумент (first), а затем, с помощью инкремента будет происходить сдвиг указателя по последующим, переданным аргументам.Собственно, все вроде бы в порядке с массивом first, его элементы последовательно выводятся, но, когда элементы заканчиваются, вместо того, чтобы также вывести следующий массив (b), происходит какая-то хуета (пикрил 2).Аноны, молю, помогите разобраться.
>>1423336В теле объявления структуры задает 6-битовое поле. Если у тебя критические требования к экономии памяти, а какая-то структура будет паковаться целыми массивами, то можно так ее сжать, оставив минимально необходимый диапазон значений для того или иного int поля, и для всех операций сгенерируется маш.код со всеми необходимыми побитовыми сдвигами для корректного результата. То есть за счет процессора экономишь память.
>>1423374Хотелось бы разобраться в азах: как работают указатели и тому подобное. Знаю про эту макрокоманду, но все-таки... Хочется понять С
>>1423378> Знаю про эту макрокомандуФункции с переменным числом аргументов работают только с va_list. Реализации зависят от платформы, поэтому вручную читать не стоит.>>1423372> сначала выводятся элементы массива first, а затем, тех, которые были переданы, так сказать, неявноНеправильные у тебя задумки. Почитай, почему аргументы-массивы в функциях на самом деле всего лишь указатели. Алсо, твое &first[0] всегда равно first, зачем ты это делаешь?>>1423391> а если этот код будет вне обьявления структуры ? Тогда ты будешь послан нахуй компилятором.
>>1423601>Функции с переменным числом аргументов работают только с va_list. Реализации зависят от платформы, поэтому вручную читать не стоит.Ну, Анон, как это... Например, если вместо массива передать foo(1,2,3,4,5,6,7), то все они выведутся поочередной, каждый аргумент, причем, разделены они будут нулевым байтом.>Алсо, твое &first[0] всегда равно first, зачем ты это делаешь?Делал для себя. Мне так понятнее. Смотря на такую запись, я понимаю, что амперасанд возвращает адрес первого элемента массива.
>>1423756> адрес первого элемента массива. а не первого элемента, первого массива?надо указатель на первый элемент каждого массива.
>>1423772Я понимаю это. Но как это сделать? Если массив first объявлен и получить адрес на первый элемент просто, так получить адреса первых элементов массива, которые передаются в функцию "неявно"?va_list рационально использовать, я понимаю, и придумывать велосипед смысла нет. Просто интересно, все-таки, как реализован, например, тот же va_list. Хочется разобраться во всем.
>>1423858может тогда самому выделять память под массивы? типа задаешь динамически память (стек) для аргументов функции в этой же функции и они по порядку встают, точнее не смогу пояснить сам только 2 месяца как учить начал.
>>1423881Вообщем, без __builtin_va_list не обойтись никак.Но, мне не понравилось то, что если использовать __bultin_va_args нужно помимо объекта _va_list еще и использовать тип считываемого аргумента. А если тебе неизвестен тип?Таким образом, можно воспользоваться следующем способом:Объявив переменную __builtin_va_list и записав в нее адрес первого аргумента с помощью __builtin_va_start, можно использовать эту переменную следующим образом:Создав на нее указатель достаточно сдвигать его с помощью p++, теперь ты получаешь значения каждого аргумента: это работает, например, при передачи одновременно масссивов char, и, например, обычных чисел int.
>>1423911на втором пике результат работы программы при использовании ключа %d в printf. Значения в рамке -- как раз те char-массив.
>>1423912Интересно то, что указатель p указывает вцелом на массив, а не на его конкретный элемент.На пике видно как отличаются адреса к массиву к первому аргумента first (который по умолчанию массив char).VA_START -- адрес, полученный с помощью функции __builtin_va_start, а CHAR -- адрес полученный обычной операцией cp = first, где cp -- char *cp;
Еще вопрос, Аноны. Есть ли в Си следующая возможность. Например, при подключении заголовочного файла выполнять операцию.Самый банальный пример: при подключении с помощью include выполнять операцию printf (которая должна быть написана либо в хедере, либо же в файле реализации).Для чего это нужно? Ну, например, при подключении файла, нужно автоматом просчитать некоторые значения, или сформировать готовую и инициализированную структуру.
>>1423997шта? что значит при подключении с прмрщью include? Ты не понимаешь как программа собирается, или я просто не понимаю что ты хочешь?
>>1423997#include "fileblya" просто вхерачивает содержимое fileblya вместо себя. Дальше сам фантазируй, как заставить препроцессор захардкодить что-либо в зависимости от контекста (того, что перед #include). Например, в инклудируемом файле следующее:#ifdef VALUE_FOR_ZALUPAint zalupa = VALUE_FOR_ZALUPA#elseint zalupa = 0;#endifХз, что еще ответить.
>>1424064ой, мои пардоны, хуйню написал, нельзя в хедере определения имен делать, т.к. если он инклудится в нескольких местах, получается дублирование. Функции только прототипами, а глобальные переменный - extern (реально лежит в одном из исходников)
>>1424066Можно, только надо немного по-другому делать.mylib.h:#ifndef MYLIB_H_#define MYLIB_H_#include <stdio.h>static int __mylib_local_val;void __attribute__((constructor)) __mylib_constructor{ __mylib_local_val = 22; printf("mylib\n");}#endif
>>1423756> например, если вместо массива передать foo(1,2,3,4,5,6,7), то все они выведутся поочереднойЕще раз. Зависит от архитектуры. Где-то оно, лишь завидев ... в аргументах, положит аргументы сразу в стек, где-то в регистры по очереди (причем очередь разная, и регистры тоже). Поэтому вот просто так взять и сделать решение нельзя. Например, вот такое будет работать на 32-битном x86 (gcc -m32), но не работает на ideone, потому что там x86-64: http://ideone.com/joRPgl
>>1424055Ну да. Хуяришь такой библиотеку какую-то и надо, чтобы, как только ты ее заиклудил, хуяк, и надпись такая в консольке: "подключена библиотека олололололо", причем, оператор вывода надписи должен быть в хедере например, который ты инклюдишь
>>1424278Тому что атрибуты есть у функций, а у тебя тут хуй пойми что. Добавь (void) перед фигурной скобкой что ли.
>>1424286https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#Common-Function-Attributes
В чем проблема? и как фиксить Ткните носом...Алсо все время путаю в чем разница между . и ->, как понять навсегда?
>>1424619Если ты обращаешься к полям/методам объекта, то используешь operator.Если у тебя есть указатель на объект, то тебе нужно дереференсить его, прежде чем обращаться к компонентам класса. Чтобы лишний раз не дереференсить поинтер и обращаться через точку [i.e. (A).B], можно использовать operator-> [i.e. A->B]>>1424620А ошибка у тебя в том, что a - это указатель, а ты пытаешься точкой обращаться к его полю. Либо делай (a).city.name, либо a->city.nameДальше код не смотрел, могут быть ещё и другие ошибки
>>1424625Я уже понял что надо a->city.name, но там другая ошибка получается...(с числом) все ок,temp.coordinates.latitude = a->city.coordinates.latitudeно стрингу (текст) не могу назначитьtemp.name = a->city.nameerror: assignment to expression with array typeи я не пойму почему пишет аррей тайп если там вроде как стринг...других ошибок вроде как нет, так как код работает просто не сортирует
>>1424643Строки в C - массивы символов. Чтобы скопировать строку, тебе нужно циклом пройтись по каждому символу и скопировать его в массив char name[]. Или же воспользоваться чем-то вроде strcpy().
>>1424686Дефайн-оптимизация - рофл. Не думаю, что strcpy реализован, как в книжке while (∗dst++ = ∗src++), или как memmove с поддержкой оверлаппинга (с побайтовым копированием от начала до конца, если адрес src больше, или от конца до начала, если адрес src меньше). Наверняка в ридонли считает конец и потом быстрыми обращениями к оперативке нужные куски переносит.
>>1424698Двачую этого. Тут у >>1424666 strlen() один проход и у memcpy() один проход, т.е., всего два, в то время как в strcpy() справляется за один.
>>1424720Дык memcpy - это не проход побайтовый, там круче все, но массивы не должны пересекаться. Вот memmove традицонно медленный, да.
>>1424730> Дык memcpy - это не проход побайтовыйИ что? Это все равно проход, там просто в середине массива данные копируются через SIMD обычно, блоками размером побольше, чем байт. strlen() тоже можно через SIMD реализовать или, например, 32-битными словами читать и сравнивать, но это опять же все равно проход. Вместе это все равно два прохода, хоть ты на голову встань.
Аноны, может кто знает либу под Шиндовз, чтоб http реквесты/респонды составлять/парсить и на сокет писать/читать? Есть кое-какое задание, я уже через голые сокеты сделал, но надо бы мои json заворачивать в правильный месседж, а руками пердолить как-то неправильно. Нагуглил WinHTTP (а для сервера там какой-то нёх HTTP Server API), и шото так лень в этих абстракции вникать по Микрософтовским докам, шопиздец.
>>1424739Нахера симд? Он не сделает никакой погоды, мб даже замедлит, ибо придется грузить и выгружать данные в векторные регистры.https://github.com/gcc-mirror/gcc/blob/master/libgcc/memcpy.c
>>1424746Хотя интелы пишут, что симд роляетhttps://software.intel.com/en-us/articles/performance-optimization-of-memcpy-in-dpdk
>>1424739хм, а я думал контролер памяти умеет в команды типа "copy 4kb otsuda tuda". Ну, ведь страницами же все ремапится в виртуалку процесса, то есть каждые 4192 байт гарантированно лежат рядом
>>1424750> контролер памяти умеетСходить в ядро, чтобы поболтать с ним об этом, стоит гораздо дороже, чем из кэша в кэш через SIMD перекидывать.
//...AnsiString text = RichEdit1->Text; //AnsiString to char const char c = NULL; // пишу в C++ Builder... text = c; char *ctext; ctext = text.c_str();//... RichEdit1->Lines->Add(ctext);//Что я делаю не так? Почему не выводится? Подозреваю нужен цикл, но я не знаю как это реализовать.
>>1425208Не особо.Блин. Как мне быть... Мне нужно на си написать. Как мне это реализовать не на крестах.Агрр...
Господа, А есть ли в С что-то для приколов со спрайтами? Я внезапно наткнулся на QB64, там это искаропки.
>>1424543>Алсо все время путаю в чем разница между . и ->Это каждая иде автоматически подсказывает вроде, нет?
Кстати, кроме graphics.h из прошлого века что-то есть под винду? Хочу легко и просто рисовать линии и пиксели.
>>1425197>Что я делаю не так?>const char c = NULL;Это не указатель, чтобы ему присваивать нулл, но прокатит.>text = c;Ты обнулил свой text, в который ты записал данные двумя строками выше.
>>1426215Да не так уж и сложно. Разобраться в построении логики на таймерах, написать пару функций для работы с текстурами, использовать структуры.
>>1426300> просто рисовать линии и пиксели"Старый" Windows GDI API.>>1426587Возьми и добавь в свой проект. Тысячи их.
Какие есть фреймворки для написания оконных приложений на си? Под линукс, но в идеале чтоб можно было и под винду скомпилировать(если такое возможно). P. S в C руб, только дочитываю K&R
>>1426891Вот я выше спрашивал >>1419387https://progtips.ru/c_expressСи-экспрессСборка «Си-экспресс 2.0» – это среда CodeBlocks с набором бесплатных инструментов программирования на языке Си. В состав сборки входят все необходимые программисту инструменты и библиотеки. Сборка предназначена для работы в среде Windows.Сборка “Си-экспресс 2.0” не требует установки и организована по принципу «распаковал и запустил».Пойдет такаясреда для обучения? Может кто этого чувака знает?
>>1426898Никто не знает про это твое васяноподелие. Под винду есть вижуалстудия, есть нормальный Code::Blocks, есть Pelles C, наконец.>>1426891> Какие есть фреймворкиКроссплатформенные - все как один говно. Пиши под линукс на GTK, как уже посоветовали, под винду на Windows API.
Анон, мне че-то ссыкотно. Я ведь по этому направлению учился, а сейчас чувствую что как в тех шутках про сишников, которые нищие в свитере программируют за еду. Чувствую прям душа к этому лежит, регистры, апи виндовс, сокеты по сей день интересуюсь этим, но че-то гнетет как-то чувствую себя отсталым от мира и тенденций, как старый дед с рубанком и паяльником. Касперски сейчас обмазываюсь еще и windows internals. Но работаю прикладником, правда.Не проебался ли я, анон? Может настало время похоронить эту мечту. Извел себя весь уже, а бросить не могу, затягивает сам знаешь...
>>1427052Все мечтаю написать для винды расширение одно или даже свою ос, дурак. Надо было перекатываться в джаву мли в дотнет хотя бы. Вон однокурсник звал же меня в Нижний, я не поехал. А он уже по тем временам нормально зарабатывал, сейчас поди уже и дом построил. Че делать теперь, хуй знает, не молодой уже, 30-ник...
>>1425303Подсказывает, но работают обе версии swap(NODE* a) {a->city; }и swap(NODE a) {a.city; }и не разберусь хоть и немного мне пояснили по понятиям
>>1427465> СЛОЖНАПроще, чем на GTK. Но ты прав, долго. Но это если у тебя сложный интерфейс. А полторы кнопочки (т.е., то, что обычно нужно новичку) реализуются с помощью диалогов строк в 50, считая обработку событий.
>>1426891>Какие есть фреймворки для написания оконных приложений на си? Под линуксНикакие. Юникс-вей это libyoba написанная на си, консольный фронтэнд yoba, написанный на си, и гуевый фронтэнд, написанный на каком-нибудь питоне.
>>1427504Ну я чет уже на прикручивании пары инпутбоксов и кнопок для выбора директории, и инбутбокса, для вывода типа консольного, запутался и потерялся.
>>1427520А в чем проблема нарисовать диалог мышкой? Обработать WM_COMMAND для IDC_твоякнопка1 и IDC_твоякнопка2, вызвать SHBrowseForFolder (почитать справку, охуеть, обернуть в функцию - это самая долгая часть - минут пять, наверное), сделать SetDlgItemText с результатом в инпутбоксы, сделать функцию, которая будет делать твоему "консольному" текстбоксу SendDlgItemMessage(EM_SETSEL и EM_REPLACESEL) . Не намного сложнее, чем на каком-нибудь шарпе, особенно если взять windowsx.h с ихними HANDLE_MSG и макросами вокруг посылки сообщений. Проблемы начинаются, когда ты делаешь ресайзящиеся окна со сложным дизайном, вот там действительно проще сразу взять C#, чем в сишку ебаться.
>>1427541>А в чем проблема нарисовать диалог мышкой?Тааак, падажжи ебана. Это Студия такое позволяет?
>>1427545Студия, Pelles C, борланд вроде тоже умел, плюс какой-нибудь рандомныйhttps://www.google.com/search?q=resource+file+editor из интернета.
>>1427052Да всё норм, в вебе к этому возрасту уже сеньёры выгорают. Правда, там и зарплаты поменьше, что-то уровня 6к$ грязными. За Си же больше платят? По крайней мере, должны, я не шарю просто
Пердолюсь немного, подскажите может как нормально избавиться от if-ов в мейне, хочу вызвать структуры по другому, но как? Что то не выходит
//Использую GIFImage.//q:Какого фига пишешь в Билдере?!//a:Практика в колледже. Заставляють нахой.Можно как-то реализовать прозрачность гифки в C++ Builder 6? Чтобы как-то убрать черный фон. Хотел через Transparent Color, но TImage не имеет такую опцию.
Чуваки, нужна книжка или сайт, где с нуля и понятно показывается реализация связных списков и деревьев на С
>>1428186На каждую комбинацию язык-задача-парадигма книг не напасешься. Про всякие структуры данных на уровне идеи можно хоть в SICP почитать, или в introduction to algorithms. Если суть ясна, и интересует техническая реализация, то K&R в помощь, библию не переизобретешь. Если стоит вопрос адекватного процедурного интерфейса - OOC (в шапке есть). Хз, что еще посоветовать.
>>1428186связные списки - хули тут сложного?стракт есть, указатель есть. что тебе еще надо?деревья на массивах - смотришь в реализацию на любом языке (псевдоязыке) с массивами
Подскажите, вот есть меню, есть клава опрашивающаяся раз в какое-то время.Захожу в отдельный пункт меню, у меня происходит "вошел в меню=1" и пока я кнопкой не делаю "вошел в меню=0" цикл повторяется.Я чувствую что есть более нормальный способ это сделать.
>>1427675Полезный комментарий клоуна, который из GUI под Windows осилил только высирать текст в консольку.
>>1428807>(имхо каждое приложение само пусть ренедерит картинку)>именно так было в DOS>Некроманты в треде!Не некромант, а лич уже, сам давно дохлый и трупы выкапывает.
>>1428943> Не некромант, а лич ужеТы так говоришь, как будто эти ваши кутэ используют системные контролы, а не рисуют самостоятельно все, что внутри окна.
>>1429011Я понял в чём проблема треда, это пердолики с консолькой, которые при упоминании гуи/виндовс, начинают рваться и нести сивый бред.
>>1429529говорят, они еще ту хуйню в которой офис-менеджеры проставляют сколько ручек закупили разработали
>>1429779Вопрос закрыт. Каталоги не подключил. Совсем уже ебанулся с этим WINAPI...>>1429781Почему? Совсем плохая IDE?
>>1429795Ну да, я по-разному пробую, пытаюсь разобраться как все работает.Кстати MinGW это не собирает почему-то
>>1429795И правильно делает. Родные либы майкрософта под винду всяко удобнее левых линуксовых костылей.
>>1430102Это не ответ.Не важно что ты делаешь, пользоваться лучшим инструментом в любом случае лучше. Или, другими словами, брать в данной ситуации заведомо худший инструмент это иррациональный неадекват.
>>1430075Когда пишешь серверную или какую-то системную хуету. А так, компилятор сишечки и микропидоров - кал, даже в C99 не умеет.
>>1430075inb4 знаю, что объявление не в шапке подконтекста - гавнокод, но все равно кал. Я не говноед и хочу пользоваться стандартизированным для языка интерфейсом многопточности и красивостями вроде thread_local. Кормить сишным кодом компилятор крестов тоже нахуй нужно, ебал я каждый чих кастовать.
>>1430153>Кормить сишным кодом компилятор крестов тоже нахуй нужно, ебал я каждый чих кастовать.Ну тогда тебе только парсеры XML писать
>>1430075> Родные либы майкрософта под винду всяко удобнееНапомни, в этой 2010 студии snprintf() уже есть, и он ведет себя правильно? Или там только _snprintf() с нестандартным поведением?>>1430149> А так, компилятор сишечки и микропидоров - кал, даже в C99 не умеет. Анон бы еще шестую студию взял. Современные версии cl давно уже все умеют.>>1430153> красивостями вроде thread_localПользуйся, кто ж тебе мешает: в новых версиях все есть, в старых можно #define thread_local __declspec(thread), полноценная реализация <threads.h> тоже существует, еще с момента выхода стандарта.
>>1430180И как его поставить без накатывания Студии и без гарантированного засирания забитого системного диска? Алсо, C::B и пресета для новых версий не имеет, руками настраивать надо.
извиняюсь за небольшой оффтопчитаю прата в пдфке и происходит вот такая хуйнясимволы копируются хуй пойми как,иногда вообще пропускаются.Руками выписывать это очень неудобно,особенно когда прата просит исправить какие-то ошибки там или код непонятный и длинный.искал в других форматах - та же хуйняпомогите блядь
>>1430153>ебал я каждый чих кастоватьДля laba12.c не нужно многопоточности, красивостей вроде thread_local, C99, правильного snprintf() и прочего бла-бла. А вот удобство нативного програмиирования и божественной документации нужны всегда.
>>1430075>левых линуксовых костылейУже писал, напишу еще раз.Ебаная glib! Там tdestroy не входит в стандарт, а доп.хуета, доступная после #define _GNU_SOURCE, не входит в mingw.
>>1430284Ну хз, иногда к книгам можно качнуть исходники отдельным архивом. А pdf - это тебе не doc, это typeset. Есть шрифты, есть буквы определенных размеров и их координаты/ориентация. И нехуй с нулевым опытом написания кода уже лигу ленивых устраивать.
>>1430284Взял прату на английском 6е издание, попробовал скопировать, все ок. Но удвою вышеотписавшихся - лучше руками набивать, привыкая писать код, а не пиздить.
>>1430284Пробуй скопировать в английской раскладке. Потом пробуй вставлять в блокнот и выбирать windows 1251 кодировку. Если не помогает, значит текст в пдфке криво распознан и неисправлен
>>1430394:: вместо = как бы намекает, что там явная ошибка распознавания, и никакая раскладка ему не поможет.
Каким же я себя тупым чувствую, особенно после работы, когда башка уже не соображает.Я создаю файл "ввод.тхт" с набором символов "qwer123", задаю его в программе, задаю файл "вывод.тхт", но ничего не происходит.
>>1430628Лучше совмещать. Пару раз в CTF писал эксплойты, ловя краши с помощью gdb - ну, нормально. Не очень удобно, благо есть дополнения к нему, но все же.
>>1430675Извиняй, инстинктивное отвращение, когда в компьютеры лезут обыватели которым там не место. Ладно бы хтмл и подобное, но си это особое.
Есть где примеры написания простых оконных приложений на си и винапи? Особо интересует примеры рисования всякого в gdi или что там есть в винде для 2d рисования.
>>1430896> Есть где примеры написания простых оконных приложенийУ Microsoft? Не знаю, как в современной студии, но ты можешь качнуть Platform SDK постарше (для Windows XP/2003, например - там точно есть), и смотреть примеры из комплекта. Алcо, короткие (часто неполные) куски есть прямо в MSDN, вот примерно так: https://docs.microsoft.com/en-us/windows/win32/winmsg/using-windows> примеры рисования всякого в gdi Feng Yuan "Windows Graphics Programming: Win32 GDI and Directdraw" и с примерами (http://www.fengyuan.com/sample/ и http://www.fengyuan.com/sample/Samples.zip). Оно слегка подтухло, но в целом подходы не поменялись. Хотя в винде много чего еще есть для рисования - и Direct2D, и GDI+, и Direct3D/OpenGL/VK, все зависит от задачи.
>>1430941Круто. Скомпильнул пример из книги бородатого года в tcc и он работает.>>1430944Там что-то всё для крестов, а мне бы для обычной сишечки.А gdi позволяет сглаженные линии и фигуры рисовать? Поддерживает полные цвета?
>>1430987>Круто. Скомпильнул пример из книги бородатого года в tcc и он работает.Поэтому и нужно порой изучать технологии Древних, хотя многие это ругают и фукают. Это полезно для понимания современных. Кроме того, там дается зачастую исчерпывающая информация об интересующем тебя предмете доступным языком. Ну либо это я не умею искать современные источники. Например по архитектуре 80486 или 80286.
>>1430987> Там что-то всё для крестов, а мне бы для обычной сишечки.Как будто для Windows API есть разница.> А gdi позволяет сглаженные линии и фигуры рисовать?GDI+. Официально - только кресты. Неофициально ищи либу, например, на forum.pellesc.de.> Поддерживает полные цвета? Да.
>>1430896https://pastebin.com/e1sggH6FДержи. Специально ради тебя лазил к деду в комп, теперь пизды получу, но из допотопного мингв достал.
>>1431069https://pastebin.com/gkYERVDN HELLO_DLL_Chttps://pastebin.com/e1sggH6F - HELLO_WIN_Chttps://pastebin.com/kCW4j0b8 - DLL_Cкури эту хуету
>>1431069Не совсем понятно, зачем там CenterWindow, хотя достаточно было int width = 360, height = 240, left = GetSystemMetrics(SM_CXSCREEN) / 2 - width / 2, top = GetSystemMetrics(SM_CYSCREEN) / 2 - height / 2; прямо перед CreateWindow. Видимо, пердолинг ради пердолинга.
Так бльйбнврт, мне это все остоебенило! Аноны, взываю к помосчи, хотя бы моральной, как в ябучем ШиндоХТТП разобраться? При помощи HTTP Server API Version 1.0 надо принять реквест и вернуть респонс. С HttpReceiveHttpRequest разобралсо, а вот HttpSendHttpResponse вызывает вопросы. Дело в том, что хуюнкция, ссылка на описание которой висит на странице Version 1.0 Functions, принимает PHTTP_REPONSE - указатель на структуру HTTP_RESPONSE, в описании которой указано Windows Vista и новее. То есть документация Майкрософта - это какая-то лютая хуета, где старая и новая версии намешаны в один чан, и читать это говно, не зашквариваясь на всю жизнь, невозможно. Я понимаю, что HTTP_RESPONSE - всего лишь тайпдеф _HTTP_REQUEST_V1, но сука, где почитать про это нормально, чтоб не тыкаться как слоненок даун?
Короче, просто посоветуйте максимально простую HTTP хуйню, чтоб принимать реквесты и возвращать респонсы. А то клиентская WinHTTP еще куда ни шло, но вот серверная залупа, простейшие примеры использования которой включают дохуище пользовательских макросов и вспомогательных функций, меня сука напрягает. Уже сто раз сделал бы через winsock такую простую задачу, но пердолить свой костыль для проверки корректности ожидаемого HTTP запроса как-то не комильфо.
>>1431849Мне по Windows надо, там моя программа общается еще кое-с-чем через SDK, который только под Windows есть. Тащемта похуй, winsock полностью косплеит berkley sockets, но это ж лютый пиздец руками пердолить парсер HTTP. Хотя.. зато саморазвитие дохуя, rfc1945 почитаю, лол)
>>1432972Берешь MinGW, правишь в 56 строке Makefile CROSS_PREFIX=mingw-, в 86 строку CFLAGS += -std=c11, в 153 строку в конец -lpthread, еще добавляешь куда-нибудь в начало cutils.h #include <malloc.h> я еще LTO оторвал, и все собирается make CONFIG_WIN32=1. Ну или то же самое из-под линукса, только без правок (наверное).
Как сборсить захват bootvid’a после InbvAcquireDisplayOwnership? Естественным образом он слетает после изменения расширения экрана / входа-выхода из сна и есть неэкспортируемая InbvSetDisplayOwnershipКакие есть выходы?нубас
>>1433429Ты понимаешь что ты блять поехавший? Не Балмер блять, не Руссинович, а ты! Пиздуй на wasm с такими вопросами, шизик.когда-то не осилил программирование под Ring 0 на винде, так и забросил, пиздец сложно, информации нихуя
>>1433429Уважаемый нубас, нужен ваш совет.На одной винде (семерка) есть такой баг, после загрузки или переключения дисплея, если запустить игру (обычно на directx9), то она крашится с ошибкой инициализации графики directx, но если запустить снова - всё окей, и все последующие тоже. Вот такой запуск не с первого раза. Что это может быть и как пофиксить?
Здрасте, у меня нубский вопрос.Мне нужно сравнить значение указателя, объявленного uint32_t*, со значением переменной, объявленной uint16_t.Я делаю так:if ((uint16_t)ptr > var) {}GCC выдает варнинг: cast from pointer to integer of different size [-Wpointer-to-int-cast]Как мне правильно оформить приведение типа, чтобы избежать варнинга и чтобы правильно работало?
>>1434125> Мне нужно сравнить значение указателяПри обычных условиях значение указателя заведомо больше, чем любое значение, влезающее в uint16_t (в первые 4к памяти никто не пишет в принципе, чтобы ловить обращения по нулевому указателю, а в первые 64к пишут очень редко). Если тебе нужно сравнить значение по указателю, то if (∗ptr > var) { ... }.> Как мне правильно оформить приведение типа, чтобы избежать варнингаУказатели кастят к uintptr_t из stdint.h, тогда будет работать независимо от разрядности платформы.
>>1434167> Если тебе нужно сравнить значение по указателюНет, именно значение указателя, т.е. некоторый адрес сравнить с некоторым значением, хранящимся в переменной (которое тоже по сути адрес, но 16-разрядный). Это работа с периферией микроконтроллера, нужно от первого 32-разрядного адреса взять младшее полуслово, старшее отбрасывается.> Указатели кастят к uintptr_t из stdint.hСпасибо, покурю.
>>1434167Предупреждение исчезает, если написатьif ((uint16_t)((uint32_t)ptr) > var)или жеif ((uint16_t)((uintptr_t)ptr) > var)потому что на моей архитектуре uintptr_t = uint32_t = unsigned int
>>1434038Спасибо, добра. Отличная мысль.Обновления отключены и забыты как страшный сон, попробую погуглить KB-шку. Ставить всё подряд неохота, ненавижу азартные игры вроде русской рулетки, т.к. неизвестно где и как они могут наломать дров, а сейчас всё вроде работает, кроме упомянутого бага. Да еще потом зонды чистить, ну нафиг.извиняюсь за оффтоп
>>1434593Ум сам по себе ничего не значит. Имеет значение для каких целей он используется. И как показывает опыт, чем больше ума, тем обычно хуже, потому что больше чсв, жадности, в результате умный либо ничего не делает, хотя мог бы, либо делает что жиды говорят за бабло, что тоже сомнительная польза.В результате получается, тупые люди делают хорошие вещи из за лучших человеческих качеств, а умные дрочат свою пипиську, унижая других. Кто из них жалкое говно понятно без лишних комментариев.
>>1434605>результате умный либо ничего не делает, хотя мог бы, либо делает что жиды говорят за бабло, что тоже сомнительная польза.бла-бла. умный понимает, что он должен не забывать про себя. что он не обязан всем вокруг дарить благо, не получая ничего взамен. и что значит "мог бы делать"? Для кого? Для окружающих? Думаю, для себя-то он точно что-то делает.а польза для кого? для тебя? для него польза наверное тоже есть.
>>1434605>унижая других>Кто из них жалкое унижаемое говно понятно без лишних комментариев. И то правда, согласен с этим дебилом.
>>1415970 (OP)Анон, помоги, расскажи, какие есть способы обнуления массива?В частности, у меня есть массив каких-либо структур. Я передаю указатель на него в функцию, которая, к примеру, заполняет поля этих структур.При каждом вызове функции мне нужно "обнулять" этот массив, чтобы прошлые значения уходили в null-небытие.Должен же быть какой-то каноничный способ, а?
Поясните нуфагу, часто ли используют это псевдо ооп с Си?Даёт ли это какие-то профиты?Полезно ли мне будет выучить этот язык, если я никогда микропроцессоры программировать не буду?
>>1436222Что значит псевдо? ООП и есть парадигма, а не фича каких-то там крестов. Используй ровно настолько, чтоб удобные абстракции для себя сделать.
>>1436227Но там так сказать "из коробки", а тут надо ебаться и выворачиваться, как я понял после нескольких статей.Пока я ебусь и изворачиваюсь, попутно борясь с ошибками, я могу столько времени потратить, что смысл вообще потеряется
>>1436233Ты никому ничего не должен. Зачем сразу полиморфизм косплеить, если сложна? Просто void ∗, конструктор/деструктор и функции с аргументов this, в чем проблема?
Аноны, у меня идея охуительная. Прикрутить к сишечке препроцессорный конвертер иницилизированных массивов в обратное отображение. То есть, по объявлении my_direktiva char arr[] = "ABC"; генерируется массив, в котором элемент с индексом 'A' (65) имеет значение 0, 'B' (66) - 1, 'C' (67) - 2, а все остальные пустые -1. Размер массива в данном случае 68. Когда нужна подобная хуйня, или в рантайме генерирую, или не менее громоздким switch-case пользуюсь. Это шо, прагмами какими-то можно сделать?
>>1436274Хосспаде, ООП - это просто то, как ты структурированно разбиваешь задачу на процедуры, которые работают со структурами данных, и фсё. Нет понятия ограниченного ООП, псевдо ООП и т.д. и т.п. Просто со временем начинаешь делать это более красиво.
>>1436288>ООП>красивоООП может быть красиво только в ограниченных областях вроде библиотек. Полноценное же приложение в ООП это джава-дрисня, хуже наверное только функциональщина.
>>1436627Но ведь, разрабатывая крупный проект с уникальными алгоритмическими решениями, ты сам пишешь что-то вроде мини-библиотек под свою конкретную задачу.
>>1436627>функциональщинакстати, норм ли косплеить хвостовую рекурсию, как в LISP, просто меняя локальные значения аргументов и goto на начало?
>>1436636хвостовая рекурсия очень просто заменяется на циклы, нет никакой необходимости делать ее в императивных языкахдругое дело, когда алгоритм основан на более сложных случаях рекурсии, тогда в той же си, чтобы сделать его промышленный вариант, все равно приходится заменять его на итеративный вариант, который получается не очень красивым
>>1436239>Просто void ∗, конструктор/деструктор и функции с аргументов this, в чем проблема?проблема в том что это отключает систему типов, используешь void* - берешь на себя часть работы компилятора
>>1436222на си, в конечном итоге, удобней использовать не эмуляцию классического опп, а идеи компонентного программирования, в частности концепцию интерфейсов, идею включения вместо наследования.. в свое время были созданы компонентные системы на си - это com майкрософт или gtk от gnome, но зачастую проекты не используют библиотеки поддержки компонентного программирования, а просто сами реализуют нужный служебный функционал
>>1436222второе - это когда есть необходимость использовать динамический полиморфизмтогда напрямую реализуют vtableстатический полиморфизм опять же тк нет прямой поддержки в языке, то делают само собой макросами, либо теми которые есть в языке, либо внешними макропроцессорами, либо вообще внешней кодогенерацией
>>1436639А ведь это тоже можно бы автоматизировать какими-то прагмами. Объявляем функцию с красивым рекурсивным алгоритмом внутри с волшебной директивой, и на выходе получаем итеративный маш.код.Чтоб переделать рекурсию в итеративный алгоритм вручную, надо всего лишь определить struct args, повторяющую набор аргументов, с доп.полем retcode для адреса возврата, и отбросив те аргументы, что не используются на спуске, сгенерировать макросы st_push, st_pop, st_top (возвращает указатель на верхний элемент в стеке или NULL если пусто) для ведения стека на динамически расширяемом массиве struct args, ну и...обернуть все вrettype retval;do { исходный_код} while (st_top(stack));return retval;rval = func(_a,_b,_c);где a не нужен на спуске, заменить наa = _a;struct args _sa = {&&_l, _b, _c};st_push(stack, _sa);continue;_l:rval = retval;return r;заменить наretval = r;void ∗_retcode = st_top(stack)->retcode;st_pop(stack);goto ∗_retcode;все остальные обращения к аргументам аналогичноst_top(stack)->argname_ обозначены имена, которые имеют уникальный индекс каждый раз, как встречаются (_l это l1, l2, l3...)Может упустил чего, но суть доставил.
>>1433429Бамп вопросу, даже этой неэкспортирумой функцией не помочь. Нужно еще вытащить оригинальное расширение экрана, и как я понял, дернуть какую-то апи в gina (винлогон), которая ходит к драйверу видеопорта
>>1436212Ну мемсет же.>>1436222ООП в Си обычно ограничивается something_create/destroy/do_smth(something ∗this, args), используется почти везде. Наследование на структурах реже, таблицы виртуальных функций тоже встречаются. За ADT на void ∗ периодически бьют ногами.>>1436269> препроцессорный конвертер иницилизированных массивов в обратное отображениеИспользуй внешний кодогенератор, пожалей читателей твоего кода. Встроенными макросами сможешь достить чего-то вот такого: char arr[] = { DEF('A'), DEF('B'), DEF('C') };, где #define DEF(x) [x] = какая-нибудь ебля на тему __COUNTER__ или его эмуляции.
Cап, хочу покопаться в режимах процессора. Защищённый, виртуальный и прочий и написать хоть какой-нибудь код чисто для практики и немного исследования и опыта для себя.Как это сделать на Сях, или мне катится в ассемблеро-тред?
>>1437448бле, серьёзно? в спп тред катиться? Я тут АРхитектуру Компьютера курю, там код на асме и сях, думал мб точно на сях писать. Хотя я и си с++ знаю, но не до степени копания в в режимах процессора.
>>1437467Так что ты хочешь сделать? Из твоего поста ничего не понятно, если ты хочешь свой виртуальный процессор, то можешь писать его на чем хочешь. Другое дело, что уверен ли ты, что хватит скиллов реализовать на асме/сишке дескрипторы, параллельность, каталоги, кольца, треды, рекурсии?
>>1437400>Защищённый, виртуальный и прочий и написать хоть какой-нибудь код чисто для практики и немного исследования и опыта для себя.Реальный режим - это когда процессор 2019 года выпуска делает вид, что из восьмидесятых, запуская железный досбокс. При чем натурально досбокс, потому что смысл только в обратной совместимости.Даже "адресация физических адресов памяти" уже никакого смысла не имеет, потому что адресуется аж один мегабайт.У этой хуйни сейчас только музейная ценность.
>>1437571вот ты охарактеризовал что я хочу сделать.Процессор виртуальный я могу на сетях Петри набросать, аля мат.мод.НО вот заебенить что-то с использованием архидревних режимов мне интересно. Так как это как я понял system programiing old-school
>>1437571> потому что адресуется аж один мегабайтЭто ты зря. Unreal mode как был, так и остался, адресуй не хочу. Отличается только лимитами в сегментах. Мало того, именно в сорт оф unreal mode процессор и стартует.>>1437573А в чем проблема? Берешь мануалы интела, которые System Programming Guide, можно от процессоров постарше. И с песней дрочишь cr0.
Двач, есть структура, которая содержит в себе массив других структур. Когда я инициализирую массив из таких структур, то при указании размера, например, 100, получают Segmentation fault.Шо делать то
>>1438238Бро, его дохуища. У меня рантайм еррор. Ошибка всплывает тогда, когда я объявляю Block blocks[255]. Далее выполнение программы прекращается
Учу С, транслятор выдаёт ошибку, ссылаясь на такую строчку:void function ( float x1, float y1, float x2, float y2, float&k, float &b)что я делаю не так?
Сап Сисяч, учу Си не давно, хотелось бы прояснить один момент:Что это такое перед функциями помимо типа ретурна?
>>1438651Короче, напрямую можно передавать, принимать и т.д. компактные структуры, но с вложенными массивами массивов это не канает. Через указатель все делается.struct huerga ∗hrg = malloc(sizeof(struct huerga));Потом везде, где надо обратиться к этой структуре, используется hrg->, но и под конец надо free(hrg) сделать.Мне так кажецца.
>>1438683Это макросы, так что нужно смотреть исходники или так и гуглить: #define ИМЯ_МАКРОСАТвою луу загуглит, держи. Твой макрос определяет другой макрос, который на пикче.
>>1439035Это из за этого он медленно работает? Нужно сразу крупными кусками писать, а не по одному байту?>>1439036Например?
я немного извращенец и пишу на плюсах но мне кажется в ситреде про иксы должны знать лучше.можно как-нибудь узнать, какой у окна ShapeInput регион? Ставится он через XFixesSetWindowShapeRegion, а функцию получить регион обратно не сделоли? Я могу только сам размер окна получить через XFixesFetchRegion.Хранить окна, которые я сделал инпут-прозрачными, не могу, т.к. не хочу постоянно запущенной программу держать или в файлы записывать.
>>1439052Неее, буферизация у тебя подрублена в stdio для твоего файла.Хз, зачем это ему. Вполне нормально определил размер файл, мне нрафки.
>>1439177>вызывать миллионы раз функцию, которая вызывает другие функции>Да неее, всё заебись, у тебя буферизация подрублена в stdio
>>1439277>вызывать миллионы раз функцию, которая вызывает другие функцииА что не так с rand()?((((И пусть тогда сам буфер реализует, если на write() всё построит.
>>1439295Так вроде чуть быстрее работает. rand() быстро считает, основная задержка происходит при записи на диск.Почему-то не могу буфер больше мегабайта сделать.
>>1438649>И как можно узнать размерность стека? ↓>>1439309>Почему-то не могу буфер больше мегабайта сделать.
>>1439312Стек 16, ограничение в 1 компилятор делает, чтоб совсем уж по одном фрейме все не засрать и не словить seg.fault от пары вложенных вызовов. Ну, на linux64 точно, там под сегмент стека зарезервированы адреса 0x7fffff000000-0x7fffffffffff, то есть он растет сверху и индексируется последними 24 битами.
>>1439433Ниочень. У тебя там есть число, назовем его период, зависящее от rng - это количество символов через которые повторяются значения rem. Суть в том (если я нигде не обосрался) что если в строке поменять местами символы находящиеся на накоторой позиции х и на позиции х + период у тебя хеш строки не изменится.Лучше высчитывай через sha256. Если тебе не нужен такой длинный (надо например только 8 бит) - то просто или бери только часть от полного хеша или разбивай его на восьмибитные куски и ксорь между собой (я думаю что два этих подхода равносильны между собой). Если тебе кажется что sha256 медленно - операция нахождения остатка очень медленная. Если тебе нужно какой-то свой хеш придумать - лучше обойтись сдвигами и ксором. Можешь посмотреть на алгоритм ксоршифта (xorshift) и двигаться приблизительно в том направлении. Например применить преобразования ксоршифта к первому символу, потом прибавить второй, применить к полученому преобразования, прибавить третий символ и так далее. Но тут тоже нужно осторожно - суммирование опасная операция (из-за коммутативности и ассоциативности). Если ты суммируешь дохуя каких-то результатов - сумма может получиться не такой неожиданной как кажется на первый взгляд.
>>1439309> Почему-то не могу буфер больше мегабайта сделать. Никогда, никогда не используй VLA. Сделай со static, лучше. Хочешь динамический буфер - есть malloc().>>1439521> Лучше высчитывай через sha256Это введение к мануалу "как заставить твою хэш-таблицу работать медленнее последовательного поиска по массиву"? Где скачать другие охуительные советы?
>>1415970 (OP)>Ben Klemens "21st Century C: C Tips from the New School"Сама книга не очень. Чувствуется, что автор сам не такой уж эксперт по best practices.Кому интересно почитать действительно серьёзный современный труд по грамотному программированию на Си - смотрите CERT C Secure Coding Standard.
>>1439727Не самая лучшая функция, но пойдет. У тебя реальные данные - слова естественного языка, или ты не знаешь, что будешь хранить?
>>1437400А я мечтаю заполучить в своё распоряжение какой-нибудь старый компьютер, вроде ZX Spectrum или MSX. Там ещё процессор Z80.И вот попробовать с этой техникой что-нибудь сделать.Например, попробовать пописать код для Z80.Интересно, сейчас продают ли микроконтроллеры или платы с таким процем?Есть ещё эмулятор BlueMSX.
>>1440004Правильно мыслишь. В школе были MSX, других нигде не было тогда, поэтому с них начал, офигенные машины, кончал радугами и буквально жил в них, жаль только доков по прошивке не было нормальных, приходилось ото всюду по крупицам инфу собирать. Несколько лет спустя познакомился с ПК, ох, какой же хлам, не может ни в графику, ни в звук, ни во что, а что может - через жопу, гробина убогая. Так и не смог их полюбить.
>>1440016А из современныого, хочется пописать код для альтернативных систем, нежели чем этот x86, мать его ети.Вот эти вот SPARC, MIPS, ARM. Ещё бы доступ к мэйнфрейму IBM где-нибудь заполучить, поиграться посмотреть что там.
>>1437400>или мне катится в ассемблеро-тред? Да. Не представляю, как переключаться между режимами, например, на Turbo C.>>1440004>Например, попробовать пописать код для Z80.А есть под него нормальные компиляторы С? Да и ассемблер у него несложный, влёгкую изучается по книжке Ларченко и Родионова. даже я, будучи школотой, осилил его
>>1440004>Интересно, сейчас продают ли микроконтроллеры или платы с таким процем?Ты на авито хоть зайди раз в жизни, там этого хлама тонны, это спеков до геймбоя
>>1440246> А есть под него нормальные компиляторы СДа, что-то завезли, но нормальным это не назовешь, да и смысла нет. Z80 без ассемблера - это какой-то аутизм уже.
>>1440004>микроконтроллеры Z86 (о котором много писали в "Радио" 90-х), eZ80 (который никто не видел, но все о нём слышали)
>>1427249swap(NODE a) {a->city; }В этом ↑ случае 'a' - указатель на структуру типа NODE. Обращение к полям структуры по указателю на структуру выполняется операцией '->'. Т.е. 'pointer_to_structure->field_of_the_structure'. Для того чтобы обратиться к полю 'city' структуры типа NODE, на которую указывает указатель 'a', надо написать 'a->city'.swap(NODE a) {a.city; }A в этом ↑ случае 'a' представляет собой саму структуру типа NODE. К элементам структуры обращение происходит с помощью операции '.'Видимо, это сделано для того, чтобы комплиятор мог понять, где структура, а где указатель на структуру.Вместо a->city можно было бы написать (a).city, что было бы преобразовано компилятором после операции разадресации '*' в 'structure_pointed_by_a.city'.
Я новичёк в Си, столкнулся с одним кодом, и ни где нету ответов.Хотелось бы узнать чем является LUA_API, так-же почему тут две пары скобок, хотя в объявлении функции идёт одна пара для аргументов.Так-же почему во второй строчке вообще не указано имя?P.S: Это код обьявление функций из Lua библиотеки
>>1440515>Хотелось бы узнать чем является LUA_APIgrep -R "define LUA_API"> так-же почему тут две пары скобок, хотя в объявлении функции идёт одна пара для аргументов.Кто-то ебанулся. Вообще пробел перед звездочкой пишут говноеды, которые не понимают, что такое тип данных.
>>1440521>Вообще пробел перед звездочкой пишут говноеды, которые не понимают, что такое тип данныхКрестоблядь ошиблась тредом, смешите видеть.
Я щас понял что две скобки это указатель на функцию, а насчёт define LUA_API, нашёл вот такое: #if defined(LUA_CORE) || defined(LUA_LIB) / { /#define LUA_API __declspec(dllexport)#else / }{ /#define LUA_API __declspec(dllimport)#endifСпасибо тебе за ответ
>>1440521Вообще, звездочку слитно с типом пишут говноеды, которые не понимают, как определяется логика обращения к имени в Си.
>>1440970нашел, из-за пробела перед второй кавычкой в scanf " %c", не висло а ждало ввода, если два раза Y ввести всё работало.
А можно ли устанавливать позицию в FILE отдельно на read и отдельно на write? fseek чет хуйзнаит как себя ведет в этом плане
так блять, мне вот еще что интересно...Если я открыл непустой файл fopen("filename", "a");то что скажет ftell?Допустим, я хочу открыть файл, и если он достаточно большой (с прошлого запуска), то вычитать в буфер соответствующего размера, иначе догенерировать данных, необходимый количество которых выясняется по ходу дела, и лишь затем выделять буфер по факту достигнутого размера файла.
>>1441309Уже понял. Позиция чтения и записи неразрывны. "a+" особый случай, когда запись всегда с конца, и ей похуй на fseek, а ftell похуй на нее.
>>1441301> А можно ли устанавливать позицию в FILE отдельно на read и отдельно на write?Можно. Никакой магии не существует: делаешь свои обертки для read/write, которые трекают чтения/записи и твой fseek_custom, при необходимости вызывая реальные fseek/fflush и т. д. Писать подобный код - это нормально.
>>1441328та да, думал о том, чтоб свой FILE-интерфейс реализовать через системные вызовы, но как-то пиздос
>>1440532>Я щас понял что две скобки это указатель на функциюНихуя ты не понял, даун. А ответ про скобки вокруг имени функции ищется за 30 секунд в гугле.
>>1441301>А можно ли устанавливать позицию в FILE отдельно на read и отдельно на write?Открой файл 2 раза.
>>1438520>щас бы контейнеры делать через plain old data. Юзай кучу, человек Чё за хуйню ты написал, дебил? Какая связь между кучей и POD?
>>1431035>GDI+. Официально - только кресты. Неофициально ищи либу, например, на forum.pellesc.de.Нахуй ты пиздишь?
>>1441491Ну, типа, когда структуру передаешь, как аргумент, или возращаешь, как значение, это все через стек делается. А если структура содержит все массивы в теле (POD), а не через указатели (куча), то и они хуярятся туда-сюда по стеку.
>>1441491Бля, хуево сказал. Короче, я понимаю, что и структуру, которая все массивы в теле носит, можно в куче выделить, но судя по проблеме, анон ее держит в стеке, а значит хотя бы массивы надо делать указателями на кучу, таким образом, отказ от POD и применение кучи связаны.
>>1441594страуструп писал, что POD - это то, что можно смело копировать, и никаких общих ресурсов не будет
>>1441503Ты читай полностью, а не первое слово:> It is recommended that you do not directly call the functions in the flat API.И заодно попробуй написать на этом без крестов что-нибудь реальное, а не просто красный прямоугольник. Удовольствие то еще, приходится делать всевозможные обертки и адаптеры.
>>1415970 (OP)Анон, вопрос на засыпку. Теоретический такой. Я тут реализую интерпретатор своего собственно маленького скриптового языка (что-то по типу питона), и вот такой вопрос: Как лучше всего и грамотнее реализовать вопрос хранения переменных этого языка? С учетом того, что язык то мой, по задумкам, совсем не строго типизированный.Создавать что ли массив структур с тремя полями? Поле имени переменной и поле значения (void-указатель) и тип значения переменной? Ну как-то слишком очевидно, чтобы это было грамотным способом. Жду Ваших советов, умные Аноны. Буду рад почитать любые предложения. Заранее спасибо.
>>1441886Скачал тут исходники Lua, рылся-рылся, так пока и не нашел как они там реализуют вопрос пространства имен...
>>1441887Ну хэш-таблицы, очевидно же. Переменные - таблицы объектов имя-тип-значение, пространства имен - таблицы имя-указатель на таблицу с переменными или на дочернее пространство имен.
>>1441840>Ты читай полностью, а не первое слово:Ты читай на что я отвечал, довн.Было заявлено, что официально в GDI+ есть только кресты, а для C надо на каком-то васянском сайте искать либу.Что, конечно, пиздёжь. Либа для C есть официальная.Про recommended или не recommended и сложность использования API речь не шла вообще. Нахер ты про это пишешь?
>>1441965Не понимаю, почему ты горишь. Но давай еще раз для непонятливых. Плоский апи у GDI+ используют через крестообертки. Это официальный способ, цитату с MSDN я тебе уже привел. В GdiPlusFlat.h специально для тебя написано "Private GDI+ header file". Документация на MSDN написана для крестооберток. Да, обертки тонкие по большей части, и крестовый апи почти везде совпадает с ними по параметрам, но, тем не менее, отдельных статей для функций типа GdipLoadImageFromFile в MSDN нет, описаны только соответствующие крестовые конструкторы (а вот для них статьи есть).
>>1441965>>1442002Начнем с того, в GDI+ нет крестов, там си с классами, которые структуры.Кресты это что-то вроде пикрелейтед.
Ну вот почему в Си нет аналога крестового <filesystem>? Хотя учитывая, что и туда-то его добавили аж в C++17, вопрос, наверное, отпадает. Году к 25 прикрутят.
>>1442052>сделайте в си как в крестах>но кресты я брать не буду>мне нужно чтобы си был как кресты, но си, но как кресты
>>1442044Ты шизик ебучий, каким хуем Struct эквивалентен классам? Если ты про C OOP, то читани хотя бы книгу из шапки. Стракты там вообще не причем, а все работает на void ptr void ptr void ptr void ptr ptr ptr ptr
>>1442116Это в до-диезе struct везде копируется, а class только ссылка передается. В крестах же единственная разница: нулевой (который до первого явного) спецификатор доступа public, если struct, и private, если class.мимо
>>1442083Странная претензия. Неплохо ж было бы иметь в стандартной библиотеке возможность взаимодействовать с директориями.
>>1442066твоей квалификации явно не достаточно для решения поставленных задачтак чтож, давай, щеночек, барахтайся, может выплывешьтолько не надо клянчить в интернетах те знания, что ты должен по дефолту иметь чтобы это кодить
>>1442052а зачем? надо готовое, то почти всегда это будет в библиотеке, которую будешь юзатьнапримерhttps://apr.apache.org/docs/apr/1.7/group__apr__file__info.html
>>1442002>Не понимаю, почему ты горишь.Обосрался — скажи, что оппонент горит. Типично.> Но давай еще раз для непонятливых.Да, давай.>>1431035>GDI+. Официально - только кресты. Неофициально ищи либуЗаявляется, что официальной либы для C нет. Я показал, что это — пиздёж. Официальная либа для C есть.Всё остальное что ты пишешь — про документацию, про хуйню, малафью — это тупо манёвры. Про это речь вообще не шла.
>>1442052К сожалению, в 21 веке стало модным превращать Си в говно. Манифест они еще в C99 поменяли. На самом деле в стандартной библиотеке не должно быть ничего, кроме управления памятью, потоков/синхронизации и математики, т.е., там должно быть только то, что требует особой поддержки от компилятора при реализации. Все остальное можно (и нужно) тащить внешними библиотеками.
>>1442422> Заявляется, что официальной либы для C нет> Про это речь вообще не шла.Нет. Именно про это и шла речь. Заявляется, что официально - только кресты:> Whenever you make calls to GDI+, you should do so by calling the methods and functions provided by the C++ wrappersЯ не говорил, что нет либы для плоского апи, я сказал, что существует готовая, но неофициальная либа, в которой взяли крестовые обертки GDI+ и портировали на си, не меняя интерфейсы. Вот из всех этих Image::FromFile тупо сделали Image_FromFile. А теперь иди нахуй, заебал отрицать очевидное.
>>1442431Короче, ты не смог найти в документации инфы об официальной dll от Microsoft и пользовался каким-то затрояенным говном с какого-то левого сайта, а теперь маневрируешь что дескать в официальной документации не рекомендуют пользоваться C API, а значит ты прав.Это пиздец.
>>1442425> управления памятью, потоков/синхронизации и математики, т.е., там должно быть только то, что требует особой поддержки от компилятора при реализациив компиляторах си/крестов вроде нет никакой особой поддержки этого всего, все выносится на уровень библиотек
Проигрываю с зелени итт. Винапи это ИНТЕРФЕЙС. Его можно даже на пайтоне или джаваскрипте его использовать.
>>1442453> нет никакой особой поддержкиhttps://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html Ну или, например, возьми компилятор, не умеющий в C11 и запили там thread_local.
Из одного процесса можно как-то вызвать некоторую функцию другого процесса?Допустим если через какую-нибудь общую память передать ссылку на нужную функцию. Будет ли валидно, или нет?
>>1442313Ахаха, доволен, чмоня? Может быть еще что-нибудь про мою мать скажешь? Жаль твою психику и самооценку.Барахтаться будет хуец твоего начальника в твоем рту или рту твоей жены, хуила.
>>1442587На реальный хороший реплай ты ответить забыл, зато на откровенную жирноту сразу же повелся, так что твою не менее жалко.
>>1442776смари кароче делаешь файл закидываешь в нево все байты всех файлов которые надо заархивировать а файлы удаляеш ну естественно оставляешь какие-то разделители и точки по которым можно будет достать определенный файл из этого файла. да это далеко от настоящего архиватора, но для начала сойдёт
>>1442776Гугли RLE-алгоритм. Для начала сойдет, чтобы вкатится в алгоритмы сжатия. Конечно, такой способ может привести и к безразмерному увеличению размера, но, порой подходит, если требуется сжимать монотонные данные.
>>1415970 (OP)почему на первую строчку компилятор ругается:error: incompatible types when assigning to type 'double *' from type 'double'а вот на вторую нет.
>>1442883Вроде бы разобрался. Понял. Перед присваиванием, нужно показать, отсчет так сказать, начинается с первой ячейки памяти.
>>1442882Читать сообщение компилятора об ошибке.>>1442896Ячейка первая по адресу, индекс в массиве у неё нулевой.Разберись с русския языком сначала, а то пиздец что несешь.
>>1442872> может привести и к безразмерному увеличению размераНе может. Оверхед RLE с одним байтом-счетчиком около 1/128 размера файла: половина значений байта для повтора, половина для пропуска несжимаемого. Итого, сжимая несжимаемое, ты через каждые 128 байтов втыкаешь лишний байт.>>1442875> компилятор ругаетсяПлохой компилятор. Добавь ему -Wall -Wextra, и начнет ругаться на вторую тоже.>>1442942Он хотел сказать первая по порядку.
>>1443014>Он хотел сказатьА по факту признался в умственной неполноценности.Еще реплики в защиту животных будут?
>>1442891Блядь, даунский пидор, по нулевому СМЕЩЕНИЮ находится первый элемент массива, а не какой не ебучий нулевой. Съеби в свои анекдоты про программистов считающих от нуля ржали всем офисом
Посоветуйте простенькую либу для регулярок. В идеале, чтоб просто функция regex_match(const char ∗, const char ∗) была. Например, regex_match("13ABC", "[0-9]+[A-Z]+") == 1.
Всем привет, написал свой простенький сервер на C. Хочу его задеплоить, чтобы к нему могли подключаться рандомные люди. Где это можно сделать бесплатно или достаточно дёшево?Заранее Спасибо.П. С. У меня есть доступ(вроде как) к виртуальной машине своего университета, мне необходимо чтобы к серверу можно было потключиться из универского wi-fi. Можно ли это как-то реализовать на этой машине?
>>1443233Смотря что за доступ и в чём виртуальность заключается. И в настройках сети ещё. У тебя реально могут быть разные посети, твоя машина может быть за NAT относительно сети университета, и ещё могут быть различные межсетевые экраны и просто настройки машины, которые будут блокировать трафик по левым портам.>>1443233> Где это можно сделать бесплатно или достаточно дёшево?Ты можешь купить настоящий VPS с выделенным IP буквально за 5 долларов/евро в месяц. Это дорого? Не думаю. И ты там сможешь делать всё. Мне кажется, что если ты занялся сетями, надо потратиться. Правда нет гарантии, что из сети университета есть выход в интернет. И к твоему серверу нельзя будет подключиться. В общем может это и не решение.
>>1442932Я обычно говорю про ячейки не "первая", а "начальная" и "последняя". Так оно куда как яснее.
>>1443246Это синонимы, ясны одинаково, если владеешь русским. "Нулевые" и прочий бред можно говорить про массивы, где это имеет силу, но конечно не про обычный счет, который начинается с единицы, никаких нулей там нет.
>>1443262Хотя, даже это неправильно. Вообще любой счет начинается с единицы. Ноль может быть когда говорится только про индекс ("индекс N"), когда же идет счет (N-й элемент), нумерация всегда с единицы.
>>1443242Спасибо за ответ. Нашёл более простое решение, хотя решение с VPS мне тоже понравилось. Для моего проекта нужна была возможность подключаться к серверу из моего универа. Я просто подключился к своей сети и в ней создал сервер. Мне этого достаточно оказалось
>>1443263> Вообще любой счет начинается с единицы. В куче стран счёт, например, этажей начинается с нуля.
>>1443511Нет, просто первый этаж называется "земля", а нумерация идет от выше. Ноль как синоним этого дефолтного этажа, он не является частью нумерации.
>>1415970 (OP)Ищу кого-нибудь для общения вокруг программирования и матана, обмена ссылками и книгами, а так же для парного программирования.Мои языки C, Python. Считаю что программист из меня так себе.Сферы интересов: Теория игр, теория принятия решений, Управление и оптимизация, многокритериальное принятие решений, Марковские модели, конечные автоматы, теория графов, теория вероятностей, статистические методы, имитационное моделирование, ии и коллективное поведение и проч.korbelan@mail.ru
>>1443956это рисунок справа или фото? если рисунок он был неплохим художникомалсо я сегодня катался на самокате и в парке ко мне подошёл похожий мужик, только старше. у него в кармане пиджака были одуванчики, клевер и все такое, и ещё несколько в руке. он увидел как я стою и залипаю в телефон, сказал "вот настоящий гражданин россии!", подошёл и начал рассказывать что-то что он хранит очень много денег каких-то людей, которые заболели. мне стало неуютно, я попрощался и уехал. жаль мужика, его любовь к цветочкам у меня даже симпатию вызвала
>>1444063не делал...да меня никогда в газете не публиковали, по телевизору максимум мелькал пару разили это он не себя из газеты вырезал? но тогда в чем смысл?
>>1415970 (OP)>Brian Kernighan, Dennis Ritchie "The C Programming Language":Но ведь куда лучше вместо этой книги использовать справочник Шилдта "Полный справочник по С". Там куда быстрее и понятнее описана база языка и больше практических примеров, больше работы с встроенными библиотеками .А книгу Kernighan и Ritchie нет смысла читать, я считаю.
>>1444199> по телевизору максимум мелькал пару разТолько не говори что ты там рассказывал про конечные автоматы и теорию игр
>>1444239>Шилдт "Полный справочник по С"А есть где это чудо в формате epub? Сейчас читаю книгу про луа от Иерузалимски в этом формате - очень годно.
>>1443798О, а у меня одна вышка Computer Science со специализацией в Embedded Systems, а вторая системы связи и телекоммуникации. Норм?
Итак, ебанарот.. Есть цикл, который посимвольно читает инпут, пока не кончится файл. Но если файл не текстовый, то значение 255 может оказаться очередным байтом файла, а не EOF. Значит ли это, что вместоwhile (EOF != (ch = fgetc(file)))надо юзатьwhile (fread(&ch, 1, 1, file));?
>>1444752fgetc возвращает int, проблемы нетint fgetc(FILE *stream);то есть возможные значения -1, 0-255
>>1443716Можешь поизучать пердолинг микроконтроллеров. Там все в основном на си/си++. Востребованность небольшая, но она есть.Вообще интересно, есть ли здесь те, кто в работе регулярно использует си? Для чего вы его используете?
помогите плез понять, от чего бинарник раздувается?нужно было взять проект с гита с котором используется куча с++ библиотек вроде iostream и прочего, и заменить это все на библиотеки от с, чтобы можно было запускать хоть на чайнике. предполагаемый размер бинарника после strip и оптимизаций ~300кб, но что бы я не делал, ниже 2мб опуститься не получается. очевидно, что туда вставляется какая-то статичная библиотека, но я не могу понять какая именно. nd нихера полезного не показывает.
>>1444895А почему нельзя взять с++ и запустить на чайнике? Какой смысл перелопачивать то что уже работает, и написано под микрики?,
>>1444950потому что мне нужен бинарник минимального размера, и чтобы он запускался на большом кол-ве серверов. далеко не везде стоит stl, и я собсно уже все сделал в этой области. довел уже до 800кб, но это все равно очень много.
Баганутый оптимизатор ломает семантику, о я ебу, или просто UB в исполнении прямолинейным маш.кодом заходит, а хитровыебанный варик нет?https://github.com/PolazhinetsA/algo/tree/master/lzw-O3 вообще норм вещь, или официально хуета без гарантий?
Алсо, почему Intel такая контринтуитивная залупа? Результат побитового сдвига на ширину типа (int)val<<32 - не логичная с математической точки зрения крайность (0), как продолжение <<31, а по сути зануляется и идет по кругу сама величина сдвига, будто не shl/shr, а rol/ror какой-то, то бишь на выходе исходное значение. Это жи порождает дохуище исключений, которые надо костылировать if-ами, когда алгоритм предполагает, что 32 - значит всем дорога нахуй за пределы поля до следующей остановки, пиздос.. Может, я чего-то не догоняю, и в реальной индустрии такое поведение признается более корректным?
>>1445095> -O3 вообще норм вещь, или официально хуета без гарантий? Норм вещь, если ты пишешь качественный код без UB (или понимаешь, что делаешь, умеешь в -fno-strict-aliasing и т.д.).Отлаживать твой код мне лень, читается он не очень, с хэш-таблицы с маллоками для сраного lzw я уже проиграл, лучше бы ты сразу 18к выделил - посмотри, как посоны делают.>>1445104> Алсо, почему Intel такая контринтуитивная залупаВ мипсах, например, так же. В железе такое поведение реализуется проще и поэтому очевиднее. И вообще тебя это ебать не должно, потому что ты пишешь не для процессора, ты пишешь на Си, а стандарт такие сдвиги явно запрещает.> когда алгоритм предполагает, что 32 - значитЗначит, что алгоритм неправильный, и твой код сломан.
>>1445157>сразу 18к выделилЭто типа размер хеш-таблицы N+12.5% с открытой адресацией на x86 с 4-байтовыми укзаателями? Да я htbl прост уже сделал раньше, вот и заюзал.>алгоритм неправильныйя имел ввиду, что правильный алгоритм с некрасивыми if получится просто чтоб вернуть 0 там где полный сдвиг
>>1445183> чтоб вернуть 0 там где полный сдвиг Пример давай, где у тебя внезапно возникают сдвиги на 32 и более.> Это типа размер хеш-таблицы N+12.5% Не совсем. Я имел в виду размер таблицы для 14-битных кодов (максимум), плюс что-то около 10%, с открытой адресацией там следующее простое число 18041. И указатели там не нужны, там вообще с последовательностями работать не нужно - вместо этих твоих data ptr и size ты просто хранишь предыдущий код и суффикс к нему.
>>1445215> bitio.cНе вижу, ткни носом. У тебя там должна быть простая логика: если в буфере меньше uintwid (почему у тебя дефайн не капсом?) бит, ты докладываешь их туда. Сдвиг менее 32 по определению. Доложил - flush-ишь, если нужно и дописываешь остатки. Остатков опять же меньше 32 по определению.
Аноны, не обоссыте за оче глупый вопрос, но если сабж - побитовые операции переменных и констант, то компилятор принимает их в восьмеричном виде? А если один из операндов задан в виде какой-либо функции вроде 2^n ?
>>1445266Да есть там пара мест в bget, где прямо внутрь выражения тернарный оператор вхерачен, чтоб имитировать поведение 0x00000001<<32==0, например. Но я, кажется, понял. Маску можно по-другому делать, а второй случай вообще вхолостую крутится, когда сдвиг полный, и его обойти нормальным if лучше.переделал хеш-таблицу и словарь, как было сказано)
>>1445285>восьмеричномда хоть в двенадцатеричном (12x13b0a, а это идея)>2^nты о чем? 2^n == 1<<n, выделение временных ресурсов под вовращенное значение функции - забота конпелятора, что ты хочешь услышать?
>>1445807Если серьезно, чтоб быть хорошей книжкой, мало проехаться по всем пунктам. Старички очень методично доставляют знание, а Шилдт.. ну, я по Java читал, то еще говноедство, а в Си, говорят, тот и вовсе зря совался.мимо не читал Шилдта, но для праведного восхищения классикой и обсирания любителей альтернаив первоисточнику причин не надо
>>1445807А, ну все понятно, лол. Их сранивать нельзя. K&R - это курс, с охуительными упражнениями и т.д. и т.п., который реально надо осилить. А справочник с лирическими отступлениями.. ну чет говно без задач, хз кого он поставить на ноги рассчитывает. Какой-то ликбез для общения в Си-треде, не больше.
>>1445917>ликбез для общения в ситредевот это самомнение у студентишек. Чтобы с вами общаться никаких книг не надо читать. более того, если и почитать, то общаться с вами не захочется.мимопроходил из крестотреда
>>1445927ну и что это за хуйня? Если индекс или приведенный к нужному типу указатель, то просто инкремент, а если generic функция аки qsort, то type вообще не фигурирует, а непосредственно шаг в аргументах (опять таки, никто не мешает запилить локальную копию, как char (∗p)[sz]) и не кастовать потом, как еблан.
>>1445157>-fno-strict-aliasingЭто как-то связано с возможностью разыменовать указатель на структуру, кастуя в тип первого поля? Напимер, tsearch (поиск по дереву от glib) возвращает не мой указатель, а указатель на мой указатель, который еще предстоит проверить на NULL прежде, чем разыменовать, потому что это на самом деле указатель на структуру-узел, чтоб можно было использовать, как аргумент к другим функциям, или вообще внутри их реализации вызывается. <search.h> то еще говно, там даже элементарная функция для очистки дерева в одну строку пользовательского кода tdestroy реализована вне стандарта (_GNU_SOURCE) и не портирована mingw, тем не менее, технически все норм. Это потому что .so скомпилирован до меня. а если я решу исходники взять, то с голым -O3 все сломается?
>>1445562Да хз, контракт в одной скандинавской стране уже подписан, там работы много с embedded, 6 месяцев испытательный срок будет сейчас.