Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Что читать:- Классика от Отцов: http://www.cypress.com/file/56651/download- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html- ООП, например: http://www.cs.rit.edu/%7Eats/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 2015 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.Что еще почитать:http://c-faq.com/FAQ из comp.lang.c. Древний, но все еще актуален.Stephen Prata "C Primer Plus, 6th Edition" (2014)Свежая знает про C89, C99, C11, описывает различия, объемная около тысячи страниц, годная хотя есть некоторые шероховатости, с вопросами, упражнениями и ответами. Читать после K&R или до.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? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).Ben Klemens "21st Century C: C Tips from the New School" (2012)Stephen G. Kochan "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+StandardЕще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_CПрошлые треды:- https://arhivach.org/thread/106153/- https://arhivach.org/thread/131949/- https://arhivach.org/thread/140570/- https://arhivach.org/thread/153698/- https://arhivach.org/thread/155908/- https://arhivach.org/thread/173837/- https://arhivach.org/thread/180461/- https://arhivach.org/thread/182958/- https://arhivach.org/thread/188294/- https://arhivach.org/thread/193780/- https://arhivach.org/thread/198868/- https://arhivach.org/thread/206632/- https://arhivach.org/thread/211714/Шапка: http://piratepad.net/bJ1SdmkZyu
Ура, товарищи.
В чём профит голого C?
>>869924Ибо воистину, первый язык. Основа основ.Все стандарты (OpenGL, OpenMP, OpenCL (API настройки девайсов, не сам язык для их программирования) ) написаны под него.
int main(int argc, chat argv[][]){ потом закрыть не забудьте
>>869968}закрыл азазаза
>>869971Нещитово
>>869911 (OP)Анон, как мне сменить язык с С++ на просто С, я ультраньюфаня
>>870044Это невозможно, придется тебе учить плюсы. Извини.Это была си шутка. Просто создайфайол с расширением .с
>>870045Сразу еще один вопрос, почему программа не выполняется? Я жму "скомпилировать и выполнить" и выходит эта ошибка? Что не так делаю
>>870048А, все, разобрался
>>870048Кто так пишет исходный код? Не будь макакой, приучайся писать нормально.1. Где форматирование? IDE не поддерживает автоформатирование - делай вручную.2. Название файла кириллицей - из-за этого однажды утром ты можешь не проснуться. Подумой.3. Нет проверки введённых значений. А вдруг ввели белиберду. Проверь, чтобы scanf возвращал единицу.4. Если кодишь под Windows - __try, __finally, __except.
>>870064> Если кодишь под Windows - __try, __finally, __except.Ты зачем новичков плохому учишь?
>>870113Что плохого в обработке исключений?
>>870128антипаттерн
>>870138Ой да ладно тебе, кто в твой код заглянет? Пиши как умеешь, расшумелся тут.
Короче, надо заполнить массив случайными элементами целочисленного типа из заданного диапазона, вводимого пользователем.Заполняю при помощи rand() без всяких примочек - если ввести одинаковые границы диапазона, вывод всегда будет одинаковым.Если использовать сранд srand() со временем - выводятся одинаковые числа, я так понял, потому что генерируются одновременно.Есть что простенькое, чтобы помочь мне выводить случайные целые числа, которые будут меняться каждый вывод и не будут совпадать (т.е. не будут закономерно совпадать)?Простенькое, так как только начал изучать массивы, я грю уж про рандомные числа.
>>870142Ты перед каждым вызовом rand делаешь srand? Код показывай, из описания не разберёшь, что у тебя там за проблемы.
>>870143Я не делаю srand(), тамушта везде в тырнетах пишут сранд этот сраный со временем, что мне не подходит
>>870145Или подходит?Т.е. мне бы узнать, с какой точностью он время берёт для рандомизации
>>870142Давай весь код с выхлопом. Используй pcg.
>>870155Да держи, только расскажи, что за pkg.И мне способ простой нужен, если ты не читаешь по-русски с первого раза
>>870157Делай stand(time(NULL)); в начале программы.Почему i <= 11? i < 12 должно быть.
>>870161> Почему i <= 11? i < 12 должно быть.Ты серьёзно? Это важно? Это действительно важно?!И ты хотел написать srand(time(NULL)), верно?Ок, сейчас запилю,
>>870157Ну и где у тебя srand?>способ простой нуженhttp://www.pcg-random.org/Скачал, заинклюдил один файл, вызвал две функции - куда уж проще.
>>870147>мне бы узнать, с какой точностью он время берёт для рандомизацииsrand - это начальное значение для генератора псевдослучайный чисел. Без него у тебя всегда будут одинаковые значения. В некоторых случаях полезно, но не здесь.
>>870163> Скачал, заинклюдил один файл, вызвал две функции - куда уж прощеМне нельзя так делать, давайте в рамках ANSI C и без примочек, мне это ещё сдавать.
>>870162>Ты серьёзно? Это важно? Это действительно важно?!Это очень важно. У тебя 12 элементов, самому проще будет.>И ты хотел написать srand(time(NULL)), верно?Именно так и написал, как хотел. Только ';' в конце ты пропустил. Не сконпелируется.
>>870163Сделал с srand, внезапно, всё заработало, а в прошлый раз были схожие значения
>>870044//Можно еще так:#ifdef __cplusplusextern "C" {#endif//...#ifdef __cplusplus}#endif
>>870231Это не влияет на язык, только на метод создания имен экспортируемых символов.
Какую книгу прочитать, чтобы научиться писать красивый, с хорошей декомпозицией, многократно используемый код?
>>870048> conio.h
Допустимо ли в 2016 году использовать глобальные переменные? Например, у меня есть функции, работающие с сокетами. Хэндл сокета я сделал глобальным, чтобы другие функции могли работать с ним. Или лучше передавать сокет как параметр функции?
>>870384>Допустимо ли в 2016 году использовать глобальные переменные?В допустимых пределах всё допустимо.
>>870384>лучше передавать сокет как параметр функцииТак ты как минимум сократишь возможность написать лапшу, в которой закроешь сокет раньше чем последний раз будешь в него стучаться.
С чего лучше начинать, с сишечки или с питончика?
>>870410>С чего лучше начинатьс пива и беспорядочного секса
>>870435Как же ты прав, анончик…
>>870410>питончикаПитухон для пидоров, начинай с Перла, он наиболее близок синтаксически к Сифактически интерпретируемый Си с плюшками.
>>870486>Сифактическихотел быстрофикснуть, но кекнул
>>870410Абсолютно похуй, с какого языка начинать. Гуманитариям питон лучше идет. А вообще, питон и сишечка превосходно друг друга дополняют.
>>870492>питон и сишечка превосходно друг друга дополняютТипа обмазанный ООП Путухон дополняет процедурный Си, ну хз.
>>870522У нас в проекте кодогенерация и всевозможная поддержка билда на питоне, например.
>>870523> всевозможная поддержка билда на питонну это модно и молодежно, не более.а я прототипирую на перле, а затем практически перевожу один к одному на си.
>>870526Питон читаемый, и его знают все. Перл знают только олдфаги, а написать на нем неподдерживаемый код можно даже случайно.
>>870528>и его знают всея не знаю>неподдерживаемый код можно даже случайнонельзя
Есть вот такая лапша уровня LABA_XXX:http://ideone.com/u1q82PМеня устраивает почти всё, кроме одного. Нужно, что бы если числа повторяются, то они выводились со степенью. Пробовал завести перменные, типа предыдущий делитель и count и сравнивать новый делитель с предыдущим, и т.п.Но выходит какая-то хуита.Как это реализовать?
>>869924В примитивности и скорости.Но узконаправленные языки для узконаправленных задач быстрее должны быть, и есть.
>>869968Поясните зачем это? Я ничего этой функции передавать не хочу, а если хочу то что передавать?
>>870678Каждое число сравнивать с всеми остальными, что уже сравнил исключай.
зигулю всем сисятым. давно мысль вынашиваю, ведь то что компилятор не знает что значение в свитч строго не может быть неправильным, типо ему не позволяет сделать тупо таблицу с указателями да. но можно ли как-нибудь пропихнуть эти знания до компилятора, например через assert(v >= 0 && v <= 10) к примеру, прокатит не? или нужно строга хуярить if'ы по харду? так то я могу и gcc'шным методом проредить но как-то в заёб городить макросы для совместимости (хотя видимо так и сделаю, не могу же я проверить выхлоп компилятора потому что жирный лентяй). я тут просто посчитал количество кейзов при удалении элемента из 2-3 дерева (4 на 1 элементного батю и 12 на 2х) и как-то дико прихуел пишу чисто в академический интерес. кстати заебатые слайды тут: http://web.eecs.umich.edu/~sugih/courses/eecs281/syllabus.htmlнапример http://web.eecs.umich.edu/~sugih/courses/eecs281/f11/lectures/10-Mway.pdf
>>870142просто съебись с винды и используй /dev/random как царь. в общем-то, по сути не барское это дело, генерировать случайные числа. или как илатка любит поправятся, вынув изорта болт на время, псевдо.
>>870687например ключики передавать, и также путь до программы система передаст. ты совсем деревянный чтоль?
>>870688Я уже весь извертелся как мог, в голову уже ничего не идёт.Тыкни носом пожалйста.
Аноны, расскажите, сложно ли с вашего языка перекатываться на другие (java, python, ruby)?Хочу изучать Си, как первый язык, так как он довольно интересный и монументальный. Изучать хочу по расово правильной книги от отцов, правильно ли я поступаю, или стоит начать с чего то по проще?
>>870782Правильно, дерзай.
>>870690Компилятор нормально делает таблицу, если вариантов не полторы штуки, а разброс значений не очень велик. Проверка верхней границы диапазона стоит всего две инструкции, это не слишком дорого.
Сделал дамп одной криптованной программы, таблица импорта разрушена. С помощью какой-то программы восстановил соответствие адрес-экспортируемая функция:00416C31: Directly-> 0C570000 : 77F06B7E : RtlEnterCriticalSectionКак и IDA создать таблицу импорта вручную? Или заменить адрес 7DE922B0 на осмысленный RtlEnterCriticalSection?Самый простой способ, который вижу - создать комментарий с функцией с помощью скрипта. Но хотелось бы знать, вдруг можно по другому.
>>870811Проще всего запилить новую таблицу импорта в бинарнике (автоматически ImpRec-ом или вручную) и заново загрузить файл в IDA. Если не получится или нельзя по каким-то причинам:0) Берешь IDAPython, а то заебешься в IDC писать.1) Ищешь, где была IAT. Или создаешь сегмент новый - похуй.2) Делаешь в скрипте таблицу маппинга между адресом и именем функции.3) Заполняешь сегмент импортами (не обязательно в формате PE, просто списка func1 dd ?, func2 dd ? будет достаточно), т.е., делаешь IAT.4) Проходишь по всей программе, патчишь относительные адреса в call, чтобы указывали на нужную функцию в твоей новой IAT.Я бы как-то так делал. Алсо, существуют всякие idc.SetManualInsn/idaapi.set_manual_insn или даже просто idc.OpAlt/idaapi.set_forced_operand , но это решение уровня комментариев. Хотя может тебе подойдет. Можно и вручную по Alt+F1 на адресе имена прописывать, лол.
>>870782>Изучать хочу по расово правильной книги от отцов, правильно ли я поступаю, или стоит начать с чего то по проще? Ты медицину начал бы изучать по книгам от отцов?
Как разрешать такие проблемы с разными типами данных (и как вообще правильно использовать типы - только встроенные или только типы WinAPI)? http://ideone.com/BuXRndУ меня объявлены:TCHAR processName[BUFFER_SIZE];TCHAR dllName[BUFFER_SIZE];Но при компиляции такого кода strncpy(processName, buffer, BUFFER_SIZE); возникает ошибка из-за того, что функция не принимает тип TCHAR. Однако если заменить тип данных на char, тогда ошибка возникает в GetWindowText(hWnd, buffer, sizeof(buffer)); потому что эта функция требует аргумент типа LPWSTR. Что делать?
>>870844Ну можешь использовать виндовые апи (типа lstrcpy, или StrCpyN), можешь поинклудить tchar.h (_tcsncpy), а лучше не еби мозг, скажи компилятору -DUNICODE и используй юникод всегда. Нахуй тебе ансишный билд в конце 2016 года?
>>870846В смысле, у тебя и так уже юникодный билд, судя по ругани, поэтому просто всегда пиши WCHAR вместо TCHAR, LPWSTR/LPCWSTR вместо LPTSTR/LPCTSTR и т.д. Ну и #include <wchar.h>, там есть wcspy, вся хуйня.
>>870800да и хуй с ним. как называется такая хрень, что я гарантирую, что после добавления, удаления того-же элемента (например, в том же 2-3 дереве), вся структура будет такой же как и в начале? ну то есть, та же память, те же указатели. вроде это важно. хотя и хуй пойми каким боком к ц, просто лень из вкладки выходить.скажи лучше, а дохуя на call жрётся? например, когда по указателю. так то, с учётом конвертеров, кешей, всех этих ебучих заморочек в современных процах. в тех же деревья, вообще, адекватно использовать со внешней функцией cmp ?
Анон, ты когда-нибудь писал файл main.h с прототипами функций, используемых в main.c? Мне эот хедер кажется ужасно непривычным.
>>870880Но зачем? В основном файле должно быть полторы функции для управления всем остальным, зачем им прототипы? Кто будет их вызывать кроме main()?
>>870678> Нужно, что бы если числа повторяются, то они выводились со степеньюДели в цикле, не переходи к следующему делителю, пока не получишь остаток. Количество итераций минус 1 будет как раз степенью. Алсо, в сишечке есть функция lldiv, которая позволяет вычислить сразу и частное, и остаток, с ней будет быстрее. Алсо, не совсем понятно, что ты там меряешь. Если уж мерять, то построение таблицы и факторизацию каждого числа отдельно.
>>870880Хорошее место для предварительного объявления или включения всех заголовочных файлов.
>>871038с инклюдом в main.c, модно придумано.
>>869968>chat argv[][]Даже не скомпилируется.
>>871043хуёвый какой-то у тебя компилятор, даже чаты не поддерживает.
>>870880Хедеры делают, чтобы не писать в каждом файле (единице трансляции) одни и те же объявления типа:[CODE]extern char g_yoba;int allo(void);int ebal(struct tvoyu_mamku );[/CODE]Если твой main.h будет подключать ещё какой-то файл, то это имеет смысл. Если только файл main.c - это бессмысленно.
Анон, вот этот вот код: http://ideone.com/wV9a26 не хочет компилироваться в гцц при вводе более чем 6 элементов, вылетает ошибка Error in `./b.out': realloc(): invalid next size: 0x000000000229f010 У другого человека в Dev C++ все нормально работает. ЧЯДНТ?
А давайте все ньюфаги съебут в свой тред и не будут осквернять тред своими смердящими высерами.
>>871090присоединяюсь, реально заебало
>>871092Что обсуждать будем? Предлагай тему.
>>869911 (OP)>С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.ну ахуеть.
>>871103>Что обсуждать будем?давайте философствовать. что выносить в подпрограмму? считаю, повторяющуюся часть кода не возвращающего значение можно задефайнить, если результат работы порождает новую сущность (аки возвращаемое значение) в подпрограмму. абасыте.
>>871103>Что обсуждать будем? Хохлов.
>>871111Что-то такое было уже. Избегаю писать многострочный код в дефайнах до последнего. Как минимум потому что функции читаемее, а компиляторы неплохо их инлайнят сами. Но если контекста дохуя, а производительность важна, тогда дефайны, что поделать-то.>>871088Смотри, что ты выделяешь память под 1 инт, пишешь туда элемент. Всё ок. Потом i становится 1, ты делаешь реаллок, (пере)выделяешь массивчик под 1 инт, и... пишешь инт по индексу 1, то есть за пределы массива. Из этого следуют простые мысли:1) Однобуквенные переменные зло. Написал бы length, не ошибся бы.2) У гцц есть охуительная фича. Пишешь -fsanitize=address и он по хардкору разноцветным текстом поясняет, где и как ты портишь память. Другие -fsanitize тоже заслуживают внимания.3) Реаллок, на каждом шаге, кстати, тоже зло. Выделяй с запасом (вдвое больше, чем раньше, например), запоминай, сколько выделил. Классический динамический массив - это array, length, capacity.
>>871122>У гцц есть охуительная фича. Пишешь -fsanitize=addressЭто не она требует пересборки всех либ с этой опцией?
>>871122>Что-то такое было уже. в прошлом треде, но был перекот. >Как минимум потому что функции читаемеевсмысле код в теле? но ведь теперь функция будет маячить перед глазами как нечто важное, а на самом деле это просто сокращение для копипасты.
>>871124но если ты код делаешь грамотна раскидывая по юнитам, то такие функции у тебя будут static inline. и например, нигде не будут видны за этим конкретным местом.
>>871123Да вроде не требовалось ничего рекомпилить, если, конечно, в либах нет багов, на которые оно ругается. Оно маллок хукает.
>>871127А. Я с сатанайзером, который чтение из неинициазилированной памяти ловит, спутал.
а вообще, всё время жалею что в ц нет функций в функциях.
>>871132Ну пиши исключительно под гцц, у них есть такое расширением.
>>871133>исключительноещё что посоветуешь в ц треде? хотя тут и так половина подсосков на вин ап.
>>871122> Реаллок, на каждом шаге, кстати, тоже зло. Выделяй с запасомlibc не должна сама это разруливать?
>>871137ну ты, кстати, почитай как она разруливает.
>>871137> libc не должна сама это разруливать?Не должна, зависит от реализации. Лучше уж самому выделить, чем гадать, как оно будет работать.
>>871140Ну это явно зависит от конкретной реализации. Но логично предположить, что никто не будет делать реализацию, которая будет выделять всё время один в один запрашиваемый размер. Как минимум, он будет округлён до ближайшего оптимального размера, который подбирается с учётом данной архитектуры (размера страницы, кешлайна и хуй знает чего ещё), чтобы скорость доступа к памяти была наиболее высокая.
сажа приклеилась
>>871169А я всегда с сажей пишу. И не стесняюсь этого.
>>871151>Лучше уж самому выделить, чем гадать, как оно будет работать.Преждевременная оптимизация — корень всех зол. Тем более для лабы1, где уж точно больших проблем из-за реаллоков не возникнет.
>>871173>Преждевременная оптимизация — корень всех зол. Использование быстрой сортировки вместо пузырьковой для тебя тоже "преждевременная оптимизация"?
>>871173> больших проблем из-за реаллоков не возникнетЯ частично согласен с высказыванием про оптимизацию (бывает, что из-за запоздалой оптимизации нужно нихуево перепидорасить код), но в данном случае дело не в проблемах и не в тормозах, дело в том, чтобы научиться. В том числе и в динамические массивы без реаллока на каждую итерацию. А потом уже думать про профилировщик и особенности аллокации в glibc.
>>871174и нахуя использовать сортировки/массивы, когда есть деревья? что бы как прадеды хуячить по харду, перелопачивая память в угар, во славу перуна?
>>871187> и нахуя использовать сортировки/массивыСлышал что-нибудь про кэши, локальность данных, вот это вот всё?> то бы как прадеды Прадеды могли хоть деревья, хоть хуевья использовать — у них не было кэшей.
>>871190>локальность данныхпро м-вей деревья слышал что-нибудь, и вот это всё? или просто по приколу хуй сосать?
>>871191Это какой-то костыль, вместо использования массивов?
>>871193это способ использовать деревья поверх деревьев.
>>871174Слушай, я не топлю за подход анона >>871088 вызывать реаллок на ввод каждого нового элемента. Очевидно, что это ебануто. Но выделять "вдвое больше, чем раньше" для лабы1 это лишнее переусложнение. И в твоём подходе тоже можно доебаться до того, что у тебя происходит перерасход памяти без особой на то причины. Т.е. возможна ситуация, что пользователь ввёл N+1 элеметнов, а выделилась область для 2xN, большая часть которой пользователю была не нужна, допустим. При особо больших N это будет крайне ощутимо.Что касается меня, я бы просто статический массив бы юзал. Нахуя вообще для такой задачи malloc/realloc.
>>871216Перевыделять в два раза — это стандартный подход. Никаких "преждевременных оптимизаций".А вот делать множитель зависящим от количества уже выделенной памяти, чтобы не перерасходывать — это уже преждевременная оптимизация.
>>871220Я вообще предлагал использовать статический массив, какой в жопу множитель.
>>871220>Перевыделять в два раза — это стандартный подход.Где это он стандартный? Можно какой-нибудь пруф?
>>871172Это оттого, что у вас много ума но мало совести
>>871227> пруфНу загугли сам-то. Можешь отсюда начать: https://habrahabr.ru/post/242279/ инбифо ализар
>>871227Потому что если множитель не 2, то надо объяснять, почему.
>>871235>Перевыделять в два раза — это стандартный подход>Почему буфер должен расти экспоненциальноЭкспоненциально - это не обязательно в 2 раза.
>>871240тебе же говорят: для экономии памяти. или мы про в 2 раза от чего, от минимально необходимого для работы за всё время? или всего используемого?
>>871240http://stackoverflow.com/a/1100426Как тебе такое объяснение, умник.
>>871288Норм.
>>871288Есть еще такое объяснение: всем похуй на своп, поэтому 2x выделять норм. Зато вариант с 2x предельно простой, работает всегда, для него не нужно всяких проверок, условий и прочей хуйни (как, например, для 1.5x: length += length >> 1; выглядит красиво, но только пока length по каким-то причинам не окажется равной 1).
>>871299assert(length > 1) азазаза
>>871308-D_NDEBUG азаза, ой, что-то свалилось все у меня на продакшене.
не понял, а в чём проблема посчитать издержки на переаллок и и предполагаемою необходимость памяти в будущем, понятно намазав на время? ну как-то так. забейте, сусяны, я чисто так, хуй знает о чём вы там, пис блять.
Анон, посоветуй, с чем бы реальным мне поработать (либа, фреймворк), чтобы немного въехать в Си? Пока придумал написать расширение для Питона на C API, повозиться с GTK. Что ещё можно сделать?
>>871500Игру на SDL.
>>870142srand (time(NULL));int rand_int(int min,int max){ double scaled=1.0/((double)RAND_MAX+1.0); return (int)((max - min + 1)scaledrand()+min);}И рекомендую пару раз прогнать в холостую сначала
>>870936Всмысле чего меряю? Я сделал решето до мульта и просто беру из него простые числа, дабы не пытаться делить непростыми.
>>871920В смысле я про clock(). Результат будет зависеть не от быстродействия кода, а от того, как быстро ты вбиваешь числа во время scanf.
>>871952Я их из текстового файла ввожу. У меня там пара тысяч чисел.Алсо, всё уже решил.
анон, а где можно почитать про создание собственного представления int-ов, не влезаю в 64 битный, числа большие, на них потом будет пара алгоритмов из теории чисел?( не заметил новый тред, копирую из 13 )конретно интересует факторизация целых чисел
>>872017g:Длинная_арифметика
>>872023длинную арифметику то я представляю - на другом языке напишу (написал)но вот с собственными представлениями чисел на си я не сталкивался, собственно у меня числа длинной до сотни знаков ( на си потому что быстро )
>>872025Так же, как и на другом языке.
>>872041да я понимаю как вопрос выглядит ноодно дело писать алгоритм на каком-нибудь условном питоне, я же ищу оптимальный способ представления чисел, чтобы не производить тонну велосипедного говнокодано вот к примеру: с упаковокой стуктур я сталкивался -> понадобиться сделаюно в другой язые этож не впихнешь=> то есть спрашиваю за языковые тоности/особенности
>>872048Не занимайся преждевременной оптимизацией, анон. Напиши сначала как-нибудь и попрофилируй.
>>872067речь не об оптимизациия умею в факторизацию в открыве от того что нужно запилить свое представление чиселболее того сишный код для64 битных быстрых целых я написалпроблема в том что мне нужны числа куда большето есть я просто ищу способ (чтоб как полагается) представлять очень большие целые на си + мне пару операций на таком представлении (сложение, цел. деление)тогда я перепишу алгоритмы на новое представление -> profitочевидные способы типо представить это все символами или массивом 64 битных интов мне в голову приходят но вот как правильно я хзесли ты анон знаешь рецепт поделись плиздля кристальной чистоты числа в духе:1851858457003052118736699169041398614849121954728255181191590943881041451112971339223193346124917(87 символов например)
>>872097Анон, ты тупой?Тебе уже сказали - гугли длинную арифметику (mpi)Посмотри как она реализована в криптографических библиотеках (лайк openssl, nss, tomcrypt)Там практически везде указатель на массив лимбов, где оптимальный размер лимба (32 или 64 обычно) высчитывается макроопределениями для каждой конкретной платформы на этапе компиляции
>>871105>компилироватьНичего охуенного.А засунуть в оперативку весь проэкт можно и юзать GCC, make, собирать будет наверно даже быстрее, если не статически линковать.
>>872025>на си потому что быстро>математикаНе, для этого математический язык надо, он быстрее, Фортран быстрее, Ада может тоже.
>>872097>64 битов не хватаетЕсли чисел с минусом нет то делай uint_fast64_tчитайman stdint.hесли надо минус то запакуй в структуру число и bool значение которое будет вместо минуса.
Поясните нуфагу: арифметика указателей часто используется?
>>872168Нет
>>872097Ну я же тебе отвечал уже в предыдущем треде.> представить ... массивом 64 битных интовНу вот и представляй. Что не так-то?> но вот как правильноКакие тут могут быть правила? Быстро это или медленно - подумай или потести.Вот этого >>872162 не слушай, он бегает с доски на доску и несет всякий бред. Знак у него отдельно в bool, ну охуеть вообще.>>872159TCC даже не пытается ничего оптимизировать, поэтому GCC по скорости компиляции его никогда не догонит. TCC был бы охуенным компилятором для сборки тестовых билдов, если бы он полноценно умел в C11 и если бы при дебаге в очередной раз не оказывалось, что баг был в компиляторе.>>872168Постоянно. *p++ и a[j] тому примеры.
Привет. Есть говнокод эмулятора на Си: https://github.com/HerculesWS/Hercules/Как и чем этот говнокод можно покрыть тестами? Есть ли тут те, кто покрывают Си код тестами? Чем пользуетесь, как тестируете, что почитать, что изучить? Короче любой фидбек будет только на пользу.
>>872205А что именно тебе тестировать надо?Бери и проверяй что сомнительно, gprof gdb для мониторинга, собери с самыми дотошными настройками компилятора с конкретным стандартом языка.А говнокод можно почти весь стереть, ксорг устарел, перекатывай на Wayland.
>>872196А в GCC если оптимизации вырубить?А Clang? у меня шланг медленнее гсс компилировал, а говорили мол некстген компилятор, а джисиси легаси параша.>если бы мог в 11А он не швабодный разве?Можно из других компиляторов код реализации стандарта похитить.
>>869911 (OP)аноны, я вообще не понимаю, как тут рассчитывать z, чему оно равно? Ответам всем трех уравнений?
>>872230if (x ... && y ...) { ... } else if (...) { ... } else { ... }?
>>872245Если честно, я ничего из написанного не понял, вот мой уровень в си на примере первой "программы", можешь подробней написать?
>>872245Тобишь от значения переменной выбирается уравнение?
>>872253Ну да. Можешь это в строчку через ? : записать, но будет хуже читаться.
Как правильно обращаться с типом void и указателями на void при использовании их для передачи аргументов? Например, есть код:void TrackChildProcess(void hChild){ WaitForSingleObject((HANDLE)*hChild, INFINITE);}Функция потока принимает LPVOID. Мне нужно передать потоку хэндл другого потока, но если использовать указатель на void как аргумент, то его нельзя разыменовать по правилам языка.
>>872402ПизДец
>>872411Что не так? У меня небольшой вынос мозга от передачи параметров через LPVOID.void TrackChildProcess(LPVOID hChild){ char szExePath[MAX_PATH]; WaitForSingleObject((HANDLE)hChild, INFINITE);}
>>872402> если использовать указатель на void как аргумент, то его нельзя разыменовать по правилам языка.Скастуй к указателю на HANDLE
>>872097ебанутый даун научись излагать мысли.>>872159ну ты и тормоз. сейчас ты мне расскажешь что ты не можешь быть тормозам, потому что ты человек?>>872402очередной вын апи дурачёк вкатился блин.
>>872488Таки что ты имеешь против Windows API? Не осилил?
>>872425Стыдно спрашивать, но почему это возможно?void * - 32- или 64-битное числоHANDLE - это тоже числоПолучается, что я пишу как на ассемблере, забывая про типы и работая только с двордами?
>>872425>>872558Точнее, не к указателю на HANDLE. Вопрос в том, как ты хочешь передать. Скастовав HANDLE к void* или передав указатель на переменную, хранящую HANDLE.И первое, и второе легально обратимо.
>>872564>Скастовав HANDLE к void*Хотя это implementation-defined, но все знают, что это работает.
>>872558>>872567HANDLE - на самом деле указатель. Что-то типа:typedef struct tag_HANDLE *HANDLE;И кастить такой указатель на несуществующую структуру к указателю на void и обратно абсолютно легально, и implementation-defined behavior там отсутствует.
>>872570Ок. Я думал это число.
>>872570>HANDLE - на самом деле указатель. Что-то типа:typedef PVOID HANDLE;
>>872573Ну да, плохо уже помню про винду, извиняюсь. Но остальные типы хэндлов при -DSTRICT как раз "типизируются" неполными структурами в качестве дополнительной защиты от дурака.
>>872490как будто есть смысл осиливать жрать говно
>>872628Лучший ответ.
Господа, нужно вытащить все используемые функции из файла, подскажите, как это сделать. Думаю по встречающимся скобочкам их вытаскивать в символьный массив по одной, а оттуда постить в другой файл, я все правильно понимаю? Но вот часть с детектированием этиъ самых функций меня вводит в ступор.
http://ideone.com/J4CVCAПодскажите как сложить два массива, пожалуйста.
Почему при выводе массива char выводится его содержимое до нулевого байта, а при выводе всех остальных типов массивов наоборот выводятся их адреса в памяти? В то же время при передаче массива в функцию они оба передают в функцию свои адреса.
>>872898Потому, что во всех остальных случаях это массивы указателей ну или так сложились звёзды, наверное
>>872883Жава-тред дальше по коридору.
>>872898Что ты подразумеваешь под "выводом массива"?
>>872974cout
>>872978Пожалуйста, проследуйте нахуй сюда >>866503 (OP)
>>873003я уже проследовал к твоей матери в сраку
>>873009своим хуем
>>872834Тред или два назад был кун с подобным заданием. Задание сложное, надо писать почти полноценный парсер или вводить какие-нибудь ограничения синтаксиса. https://arhivach.org/thread/206632/#846642https://arhivach.org/thread/206632/#846663
>>872834Написать парсер для yacc. Так просто ты не сможешь по скобочкам вытащить название. Или попробовать какую-то часть от LLVM, где парсится файл.
посоветуйте корпоративных, федеральных стандартов NASA, JPL, GOV. на чем там прогают? API всякие
>>873090Ada, C++11.
>>873096Всегда упоминают ADA, но я ни разу не видел вживую никого, кто бы на ней писал на работе.
>>873096Оно сложнее Java?
>>873098Ну это такой как бы паскаль на стероидах.
>>873097>>873098>>873099На чистой Аде там тоже не пишут, погуглите SPARK, это диалект Ады.
>>873099а схож с objective C? на mac osx10.10 в какой IDE кодить можно? сильно требуется математическое образование, алгоритмы, уровнения, вот это вот все? сисадмину (*NIX) сложно перекатиться?
>>873118Сразу видно американца.
>>873127Да, да. это Трамп.
>>873097А я однажды писал на работе на Ada (просто вспомогательное приложение, не было разницы на чем его писать), хотя я работаю не программистом. По-моему нормальный язык, очень даже. Примерно как C++ в своей изначально задуманной форме, но только сделанный нормально. Честно не понимаю, почему в зк практически никогда не обсуждается, годнота же.>>873118Не знаю насчет мака, IDE по-умолчанию — Gnat Programming Studio, неплохая. С сишки (и думаю с obj-c тоже) перекатиться легко, там нет функциональщины или каких-то особых выебонов, просто нормально сделанное структурное, generic и object oriented программирование.
>>873149> сделанный нормально. Проверка границ массива есть?
>>873152Есть. Но если вдруг где-то мешает, то можно попросить компилятор выключить.
Пишу порт сканер на асинхронных сокетах. Вопрос, почему в результате определяются все активный хосты, а не хосты с открытым заданным портом?http://pastie.org/10959217
>>873156> ЕстьЗначит Ada не нужна.
>>873158Тебе надо воспользоваться этими требованиями:http://www.hq.nasa.gov/office/codeq/doctree/871913.pdf
>>873159Странный ты. Нужна проверка - вот тебе проверка. Не нужна, или ты уверен, что и так все збс - за пару секунд отключаешь и продолжаешь радоваться жизни. В чем проблема-то?
>>873162Мне интересно. Вот эти все языки с проверками границ типа Ada или там Java. Ну, допустим, прилетело исключение о нарушении границ. Дальше что? Один хрен валить программу.
>>873163Главное чтобы ты учился хорошо и маму слушался.
>>873163Дальше heartbleed, когда проверок нету.
>>873163Я сам не особый сторонник исключений и вообще люблю сишку больше всех языков, но почему же сразу валить. Теоретически, баг может быть несмертельный и проявляться только в определенных ситуациях, например при получении запросов или входных данных определенного вида / в определенное время / etc. Можно конечно упасть и перезапуститься (и это если повезет, и баг приведет просто к сегфолту, а не к уязвимости), а можно залоггировать это дело, откатиться и попытаться продолжить работу, надеясь, что ситуация единичная, ну или перезапуститься тоже. Ну и еще раз: какбы фича отключаемая, если не видишь в ней смысла — можно и не использовать.
>>873174а ты можешь на C написать БД, сервер приложений, хранилище документов, и простенький ERP ?
>>873180Всё можно написать (и на чём угодно), вопрос только во времени. Раскрой свою мысль, а то не совсем понятно, к чему ты это спросил.
>>873160
>>873185На языке Тьюринга я ж не прошу написать, или перфокартами набить. Есть framework(код, dll, binary) на c/c++ который заменит по функциональности weblogic + oracle rdbms + siebel crm( или что-то, хотябы одно)
>>873191На сишечке пишут, когда есть требования к быстродействию или иные ограничения. Написать CRM на сишечке можно, но экономически невыгодно.
>>873195RTOS типа?
>>873201В основном на сишечке либы и embedded.> RTOSИ обычные. И у винды, и у линукса, и у OS X ядра на Си.
>>873097В вакансиях её маскируют и называют oracle pl/sql
>>873191А чем-тебя Оракл не устраивает? Он написан, вероятно, как раз на сишке/крестах по большей части, да и api имеет сишное. Заменить его на 100% тяжело будет, в конце концов его пилят уже сто лет, причем за сотни денег пилят. С остальными двумя приложениями не работал, ничего не могу сказать. В целом crm на сишке — более чем реально, все равно основное это база данных там, а остальное по большому счету без разницы на чем делать (я как-то делал не слишком сложный бэкэнд на сишке и каких-то особых препятствий не заметил).
Хэй, есть кто?
>>873388А вам зачем?
>>873400Не могу понять как решить одну задачуПод буквой б. Что значит A|2b? Зачем тут "|"?
бляяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
В чём отличие ++slovo от slovo++?
>>873429прединкремент сперва увеличит на единичку, после чего использует слово в выражении, а постинкримент наоборот
>>873429разный приоритет, разная ориентация.
http://pastebin.com/8KZLEfy1 где ошибка?
>>873458> conio.hгде вы этой хуйни начитываетесь? и в жопы друг друга ебёте потом
>>873460ну, _getch же, нет?
>>873458В строке 14. Правильно пишется "диапазон".
>>873477А еще н вдефайне надо бы капитальными буквицами написать
>>873477аахаххахахаххаhttp://pastebin.com/uZAr1QQR - пофиксилдолжна считать A[n][n]*b[n]но как то странно работает
>>873481Всмысле?И да, апнул её до 50
>>871500> повозиться с GTKНинад, там не столько C, сколько обмазывание макросами.
Эй, быдло, зачем вы программируете на этой древней херне когда уже лет 40 как изобретён лучший язык программирования C++?
>>873565Зачем нужен C++, когда есть Haskell?
>>873565А за эти 40 лет изобрели ОС, написанную на крестах?
>>873618BeOS, но она сдохла.Олсо, http://www.includeos.org/
>>873620Гайка жива, юзерспейс-то у них на крестах, а ядро?
>>873624Вижу, кресты, да.
>>873624>Гайка живаА чо воняет так по-трупному?>>873624>юзерспейс-то у них на крестах, а ядро?http://cgit.haiku-os.org/haiku/tree/src/system/kernel
>>873626> А чо воняет так по-трупному?Денег мало, длинный шмель. А была бы охуенная десктопная ОС.
>>873565> C++> лучшийЧет толсто
>>873429========a = b++:-----------a = bb = b + 1========a = ++b:-----------b = b + 1a = b========
>>873766а теперь с указателем, с указателям я сказал.
Что можно простенькое такое написать на Си?
>>873964конпелятор
>>873970Конпеляторы легко пишутся на функциональных языках, на си это боль и унижение.Зацените кстати ответ майкрософта на раст — https://www.microsoft.com/en-us/research/project/checked-c/Иии... Это си с проверкой границ! Авесоме! на деле просто скопировали реализованное в стандартной библиотеке плюсов в язык, зато пейпер больше стандарта сиПусть хуесосы из леночкатреда расскажут ещё что рисёрчиские отделения компаний — не просто удобная основа для распилов.
>>873964парсер форта
>>873988Хуйня какая-то от индусов и китайцев. Знаем мы, кто у них там в исследовательском отделе сидит.
>>873988ога
>>873996для этого целый гитхаб придумали, чтобы можно было легко и непринужденно копипастить код! получая зарплату и гранты
Анон, почему функция получения значения ключа реестра работает неправильно? http://ideone.com/GUrzUZСтоит Win7 x64, программа 32-битная, поэтому выполняется отображение в ветку Wow6432Node. Ключ там есть. При выполнении программы выводится пустая строка. http://ideone.com/u2oBEY
>>874029не заливай код на идеоне если о не компилируется. заливай на пастебин
>>874029>>874131Вроде, заработало. Почему-то помогло добавление == ERROR_SUCCESS, пойду курить мануалы.http://pastebin.com/B0JYpuKk
>>874145Потому что ERROR_SUCCESS = 0.
Написал макрос для удобной (как мне показалось) инициализации auto и static массивов с присоединением значения длины к указателю, чтобы можно было не передавать в вызываемую функцию длину массива в отдельной переменной. http://ideone.com/0SsuoHСчитается ли такое уже абъюзом препроцессора, или еще норм и вполне можно использовать?
>>874301Слегка абьюз, потому что arr() выглядит как вызов функции, а на самом деле создает переменную. Даже если документируешь, будет неочевидно. Я бы сделал что-то типа struct xy *points = DEFINE_ARRAY(struct xy, ...); Несмотря на то, что тип приходится писать дважды, из такого кода очевиднее, что он делает. В len каст к указателю на void лишний. Макроса LENGTH в таком виде общепринято называется countof (по аналогии с sizeof). В остальном норм.
>>874301в c90 не скомпилится.
>>874303Нинужен. Можешь назвать платформу, где не поддерживается хотя бы синтаксис С99 (без библиотечной-то поддержки платформ дохуя).>>874301Алсо, желательно использование имени ARRAY в макросе len обернуть в скобочки, а то мало ли, все бывает, решишь выражение передать, и произойдет что-нибудь веселое.
>>874304>Нинужен. Можешь назвать платформу, где не поддерживается хотя бы синтаксис С99 (без библиотечной-то поддержки платформ дохуя).какие мы дерзкие.
>>874302Каст через воид используется, чтобы заткнуть clang, который иначе почему-то жалуется на несовпадение требований к алайменту, хотя вроде бы очевидно, что там все нормально.По поводу названия / синтаксиса макроса думаю, что ты прав, если сделать как ты написал, то это выглядит уже не так странно, но при этом все равно намного удобнее, чем объявлять эту структуру вручную.>>874304>Алсо, желательно использование имени ARRAY в макросе len обернуть в скобочкиСпасибо, учту.
Объясните как в С найти произведение положительных элементов в одномерном массиве
>>874315Сделай переменную, присвой ей 1, пройдись циклом for по массиву, если очередной элемент больше нуля, умножь свою переменную на него.твой кэп
>>874317Для меня это сложно, без кода непонятно
>>874315http://pastebin.com/q0PXbr74
>>874322Борешься с конкуренцией?
>>874322Спасибо, но я учусь в пту, для меня такие вещи как sizeof и size_t неизвестны
>>874323>Борешься с конкуренцией?Эксплуатирую её )
Объясните тупо как быдлу, как дыбилу тупо
чуваки вот скажите, а как вы тесты хуярите? есть какие-нибудь системы, схемы, хуй знает. просто как-то это странно, у меня просто валяется в специальной папки набор main.с'ов которые инклюдяд заголовки того что они тестят, а это ещё и собрать нужно. на каждый делать по мейку? а если всю кучу прогонять, как-то детектировать какие провалили, как вообще прогресс теста указывать, или хуй с ним, падает значит проебал? вообще не ебу как это делается всё.
При ближайшем рассмотрении этот >>874301 макрос работает только для статических массивов (т.е. указатель может быть на стеке, но сам массив остается статическим со всеми вытекающими). Можно ли как-нибудь сделать макрос, который бы мог создать такой же массив (с префиксом длины), но на стеке (пусть даже без инициализации)? Я сам что-то никак не додумаюсь.
>>874433вот например, вообще не ебу, как тут с тобой кто-то ещё разговаривает, хуету какую-то пишешь непонятную. что у тебя там не на стеке?
>>874437Все, что в круглых скобках в макросе arr является static.Чтобы было более понятно, оно раскрывается во что-то типаint ⁎a = ((struct {size_t n; int u[3];} []){3, {1, 2, 3}}).uСоздается статическая структура, состоящая из двух полей: длины массива и самого массива int этой длины. Затем адрес этого массива в составе структуры копируется в указатель a, который может быть где угодно (в т.ч. на стеке), но сама структура с массивом, тем не менее, остается static.Такую структуру можно создать и на стеке, но я никак не могу придумать, как сделать это максимально удобно (чтобы не нужно было два раза вручную вводить размер массива, а потом еще и инициализировать это же количество элементов). Также не хотелось бы создавать лишнюю локальную переменную для самой структуры, т.е. чтобы переменная была только у указателя на массив в составе структуры, но сама структура (безымянная) при этом тоже лежала на стеке (но вот это вот скорее всего совсем уже невозможно).
>>874451Там должно было бытьint ⁎a = ((struct {size_t n; int u[3];}){3, {1, 2, 3}}).u;
>>874451что? там и так будет всё на стеке, где оно по твоему ещё может быть? что ты несёшь? с чего ты взял, что не создаётся экземпляр структуры на стеке, а потом о не заполняется?
>>874437>>874458Ты прав, я просто немного запутался. Похоже, что эта хуйня действительно на стеке. Статиком там является только временный массив, длина которого считается макросом LENGTH. Просто с таким способом автовычисления длины возникла проблема: макрос отказывается работать, если среди инициализаторов того, к чему применяется LENGTH, есть не константы (потому что этот массив считается статиком). Если передавать длину массива в макрос вручную, то такой проблемы нет. Ты открыл мне глаза, спасибо.
>>874458Алсо, ты вроде хорошо разбираешься во всем этом, может подскажешь какой-нибудь хитрый способ вычислить в макросе количество переданных в него элементов массива, чтобы все-таки не приходилось вручную длину передавать?
>>874462хуй его знает. я на макросах дохуя писал, можно организовать цикл и в нём перебрать все аргументы из __VA_ARG__, например держа счётчик как несколько 16ричных разрядов-аргументов. но это всё полный дроч, ненужно этим заниматься. а так-то можно хоть математику хуярить, правда у компиляторов есть ограничения в раскрытию... и это одна из причин почему это нахуй не нужно.
Для чего здесь переменным типа DWORD присваивается результат вызова функции GetProcAddress, приведенный к LPDWORD? Из-за этого код не компилится. Защита от дурака или какая-то древняя магия? Судя по HMODULE LoadExecutable (IN LPSTR path, IN PVOID base = 0), это C++, в котором с типизацией и кастами все строго. Непонятно, для чего это сделано.
>>874509https://vxheaven.org/0x48k/etc/peloader.cppЗабыл ссылку.
>>874509В коде происходит какая-то хуйня. Динамическая память с PE-имиджем освобождается и затем она используется. Сейчас бы найти журнал ксакеп за октябрь 2012, там на диске должен был быть PE-лоадер.
>>874462G_LIST_LEN посмотри в glibДа и вообще погляди там макросы для коллекций. Там много чего интересного реализовано
>>869911 (OP)Вот функция:int main(){ int a[N],i,count; srand(time(NULL)); Init(a,N); Print(a,N); for(i=count=0;i<N;i++) if(a>0&&Sum(a)>10) count++; printf("count=%d\n",count); return 0;}Вот ошибка:error: 'N' undeclared (first use in this function) Что не так?Научите массив задавать
>>874538пошёл нахуй.
>>874542Окей
Зацените PE-лоадер. Какие у него подводные камни? Подойдет ли для написания криптора, который дешифрует PE-файл в памяти и делает run pe?http://pastebin.com/DRMG7R31
>>874547Алсо, для правильной работы ширусов в памяти надо патчить PEB. Будут ли проблемы из-за использования такого лоадера?
>>874542Двачую
>>874468Сейчас все-таки еще немного посидел с этим макросом, теперь работает и так:int ⁎a = ARRAY(int, 1, 2, 3, 4, 5);и даже так:unsigned short x = 99;struct xy ⁎b = ARRAY(struct xy, (1, 2), (3, 4), (5, x));В макросе круглые скобки автоматически заменяются на кривые где нужно.Но ты был прав насчет лютого дрочева, у меня сейчас такое чувство, будто бы я на брейнфаке написал что-то. Оказывается сишный препроцессор – вполне себе эзотерический язык.
>>874659Покажешь макрос?
Анон, у меня печет. Есть такой код: http://pastebin.com/AGQVz7P4В следующих строках ошибка://CopyMemory(&pStub[text->PointerToRawData + text->Misc.VirtualSize], pImage, dwImageSize); memcpy(&pStub[text->PointerToRawData], pImage, dwImageSize);>main.cpp(43): error C2036: 'LPVOID' : unknown sizeЧто я делаю не так? pStub указывает на PE-имидж загрузчика в памяти. Я хочу дописать в конец секции кода данные. Но с конструкцией &pStub[text->PointerToRawData + text->Misc.VirtualSize] что-то не так.
>>874708http://pastebin.com/jtdjX88MВсе права на спизженные идеи и куски макросов принадлежат их законным правообладателям.
>>874710Скажи, а pStub + 1 - это какой адрес, если учитывать, что pStub - указатель на void? Скасти к PBYTE или какому-нибудь другому указателю на char.
>>874719Понятно. Зря я, наверно, вообще начал использовать LPVOID. Хотя должно быть удобно ксорить сразу по 4 байта.
>>874716Я кончил. Алсо, вчера забыл тебе сказать, что ты зря с анонимными структурами возишься в len. Весь len можно сделать просто (((size_t *)(array))[-1]).
>>874723Я конечно не эксперт, но сделал так из предосторожности: ведь если мы присоединяем размер к массиву через структуру, то значит, что теоретически между переменной размера и массивом могут быть padding-байты, в зависимости от требований к алайменту элемента массива (например на моей системе у size_t алаймент 8, а у max_align_t – 16). Потому в текущей версии даже задействовал alignas из C11, чтобы между началом массива и его размером всегда было одинаковое количество байтов. Или это я зря заморачиваюсь?
>>874726Да, ты прав, а я снова туплю. Извини.
>>874732Просто сишка на самом деле довольно задротский язык. Вот я все время думаю, что вот я ее освоил и уже знаю кучу тонкостей и нюсансов, а потом оказывается, что где-то снова проебал что-то неочевидное.
Товарисчи, у кого-нибудь есть деление очень длинного на короткое? Или тыкните хотя-бы в псевдокод или паскаль.Везде только умножение.
>>874819В школе в столбик делил?
>>874819Алсо https://en.wikipedia.org/wiki/Division_algorithm#Large-integer_methods
Прошу прощения если надоел, но я продолжаю додумывать улучшенные массивы для сишечки.Если я сделаю такой макрос len, который (как я надеюсь) будет автоматически определять размер или по методу sizeof(a)/sizeof(a[0]) (в случае массива) или доставанием значения из size_t переменной в префиксе массива (в случае указателя), ждут ли меня какие-либо подводные камни? И если да, то какие?#define len(ARRAY) (((void ⁎)&ARRAY == (void ⁎)&ARRAY[0]) ? LENGTH(ARRAY) : length(ARRAY))
синьоры макакены, жутко нехочу создавать лишнюю переменную, насколько вставка функции в аргумент второй функции будет по шариату?типа: a(b(i), j);
>>875497Тебя пидорнёт, передавай в a() указатель на функцию b() внутри тела a() вызывай b().
>>875503Охуительные истории.
>>875497Алсо, по-моему ни в одном ЯП нельзя встроить вызов функции в параметр другой.
>>875503>>875505Вот я даун, извиняйте, нигде такой хуйни не видел, чтобы работала.
>>875503наркоман штоле?>>875506и ты тоже
Господа, сдаю я курсач преподу дальше можно не читать, вот код. http://pastebin.com/EEE3FJQ2Так он сказал, что нужно конечными автоматами, помогите со структурной моделью, я в этом вообще не шарю, пожалуйста, пишите свои идеи. Алсо, суть - вытащить из текстового документа названия функций, просто названия, без типа и аргументов, как у меня.
>>869971вызовет warning, т.к. НИЧЕГО НЕ ВОЗВРАЩАЕТ
>>875596Для main() есть специальное исключение: если поток выполнения доходит до закрывающей фигурной скобки, main() возвращает 0.
>>875612Начиная с C99 или C11
>>875528Какой пиздец.
В проекте VS2010 включена оптимизация по размеру. Если код, который выделяет четыре байта в куче, пишет туда дворд и освобождает эту память полмиллиона раз, находится в WinMain, компилятор его не выкидывает. Но если я выделяю этот код в функцию, компилятор ее оптимизирует, и она не попадает в бинарник. Как заставить компилятор сохранить ее?
>>875738Возможно, __declspec(noinline)? Возможно, стоит эту функцию поэкспортировать, чтобы на нее были ссылки?
>>875738volatile на указатель.
Рубрика зодай вопрос анону.Ув. Анон! Вот есть fgetc(). Так ведь? Если у нас есть цикл, где этот фгетц читает по символму из файла, как он знает что нуно перескочить на следующий символ в файле, это внутри самой функции указатель некий? Или же это древние темные механики скрытые от простых смертных?
>>875859воспринимает файл как поток.
>>875859Зависит от реализации. Обычно за внутри структуры, на которую указывает FILE, хранится системозависимый дескриптор или хэндл для "родного" для системы API доступа к файлам.Если это "обычный" файл, т.е. с произвольным доступом, с этим дескриптором в ядре ОС ассоциировано смещение в файле. По этому смещению и происходит чтение. И функции чтения автоматически увеличивают смещение на прочитанное число байт.Плюс ещё, на стороне программы, может быть буффер. Он тоже связан с FILE. Ну и читается какой-то заметный кусок из файла в буффер. И, соответственно, есть указатель на текущий символ в буффере, который fgetc() увеличивает.Я тут упрощённо описал как это примерно выглядит на чём-нибудь вроде windows или *nix.
Аноны, начал изучать Си по наставлению нашего товарища и возник с рядом проблем. Изучаю по книге Кёрнигана и вижу для себя море незнакомых формулировок, слов и т.п. Из-за этого думаю, что Кёрнигана лучше оставить на потом, а пока что начать читать что-то более простое. Непосредственно вопрос: может подскажете что-нибудь попроще, или все-таки грызть тот самый материал, который я не понимаю? Не понимаю из-за того, что не могу можно сказать самые первые упражнения сделать сам. К слову, в /pr полный ноль, максимум, что могу сделать из этой среды - прописать shutdown -s -t 180 в командной строке, когда выхожу из домапамагити
>>875988Прату читай, очевидно же
>>875989т.е. стоит все-таки изучать С++, а не С?
>>875991Нет, он и по Си писал книгиhttps://www.ozon.ru/context/detail/id/31649671/
>>875995> спасибо огромное анон, еще вопрос:стоит после поверхностного изучения данного языка зубрить его то состояния белиссимо, или же параллельно знакомиться с чем-то новым?
>>875988>>875988Палю годноту, пройди гарвардский курс cs50 Я тебе гарантирую, не разочаруешься.
>>875997Дай бог здоровья, буду учиться :з
>>875988>начал изучать Сис какой целью?есть ресурсы чтобы прожить следующие десять лет до того как сможешь заработать кодом на си?
>>875865зачем объяснять уебкам то что они могут погуглить?
>>876011с целью начать изучать хоть что-то, ибо сестра к себе хочет взять на стажировку в iba спросил у анонов тут пару дней назад, что лучше изучать - сказали Си, я потихоньку пытаюсь
>>875528самое забавное, что эти хуесосы и в продакшон такой код высирают (если это не исходники уровня chrome где уже кодерам нада от 150к в год платить, а в закрытых кодовых базах помельче именно такой пиздец за частую и есть)
>>874738чтобы написать крепкую рабочую прогу знание языка это только 10%а вы уебки и его не знаетепффв печь всех, как евреев в 42
>>876016>а вы уебки и его не знаетеСколько (минимально) чтений по указателям a и b сгенерирует следующий код? Если знаешь язык, то тебе понадобится не больше пары секунд чтобы правильно ответить и объяснить почему.int ololo(int a, int b){int x = 0;int y = 10;x = a + b;x = 10;y += b;x += y;b += x;y = dosmth(a);return y + a + *b;}
>>876045звездочки сьедены?
>>876045вы обосрались.
>>876048>>876049Всем, кто знает язык, не составит никакого труда восстановить съеденные звезочки :3
>>876050Больше скажу. всем кто знает язык даже и твой код не нужен, они и так знают о чем ты.
>>876053>>876045Короче, рядом с a и b звезочки стоят везде, кроме dosmth(a).Алсо, если кому-то не лень, ответьте, потому что я и сам хочу проверить, правильно ли я думаю.
>>876011Взял расстроил.
>>8760562 и 2
>>876061Как насчитал? Алсо, вместо x = 10 должно было быть умножение. Но без него получилось бы 1 и 2 по-моему.http://pastebin.com/XG4jtv4r
>>876069ну как-бы после вызова функции сложно знать, изменилось ли значение по указателю b, тоже.
>>876071Это да. Я правда сперва сам не совсем правильно посчитал, а так там 2+2, все правильно.Алсо, я когда-то не знал про это все, и тогда мне казалось, что не нужно кешировать значения по указателям в локальных переменных (тип лишние переменные будут занимать место, лол), а потом я почитал про restrict, а потом выяснилось, что если вызывать внутри функции другие функции, то и restrict'а будет мало… Но отчего-то мне кажется, что я еще дохуя всего не знаю.
>>8760712остальные бесполезные действия бдут в кэше проца\регистрах
>>876012больше не буду
>>876012Ну и действительно, зачем
>>876135тонко стелишь, так сказать, без скобочек у &.
>>876045Правильный ответ "сколько угодно", вплоть до выбрасывания всей функции нахуй. Подобные разговоры мало того, что в принципе бессмысленны, так еще и могут идти только о полной, нормально компилирующейся программе.
>>876143ну как тут без твоих выебонов. поняли все? вы дурачки, не берите в голову, открывайте и берите в рот, как господин у которого компилятор раскрывает функции.
>>876150По делу есть что возразить?
>>876157Если функция не объявлена статик, с чего бы компилятору ее выкидывать?
>>876185Например, с того, что она не вызывается. Или у нее явно нет сайд-эффектов (и у dosmth тоже), а возвращаемое значение не используется. Или она вызывается один раз, и аргументы известны, поэтому компилятор может решить весь вызов свернуть в одну константу.
>>876190Но откуда компилятору знать, к чему ты собрался прилинковать результирующий файл, и, соответственно, будет ли кто-то вызывать эту функцию?
>>876197не будет он её удалять.
Что лучше первым учить С или С++? Для программирования встраиваемых систем.
>>876243C
>>876197Под компилятором я понимаю весь тулсет (препроцессор, транслятор, ассемблер, линкер). Функцию выкинет линкер, если умеет в LTO.>>876199> не будет он её удалять.Пикрелейтед. Функцию спиздили, чтений по указателям ноль.
>>876248почему?
>>876272Так логичнее.Сначала Си был, потом его допилили до С++. Более логичная последовательность.Да и просто Си проще и примитивнее, а в С++ больше сложных вещей и абстракций.
>>876268> не будет он её удалять.> показывает раскрытие функции.
>>876282Так а функция-то где? Где моя функция?
>>876243>программирования встраиваемых системТам в основном Си. С++ практически не используется.
>>876287а я и не спорил. ты какой-то странный.
>>876243Си конечно.Печально что б-во вкатыльщиков не знает что С++ никогда не был популярней и востребованней Си и не будет.Просто вакансии на помойках всяких в основном ориентированы на всякий скам.
>>869911 (OP)Какой тип данных имеет результат логических выражений в С?
>>876368int (0 или 1).
>>876365Изучил основы Си, изучаю алгоритмы, решаю олимпиадные задачки. Куда копать дальше, какие перспективы?
>>876376На гитхаб, решать реальные задачи. Олимпиадники не нужны.
>>876376дальше только отсос для натуралов.
>>876376>изучаю алгоритмы, решаю олимпиадные задачкипреподавателем в ПТУ
Из академического интереса хочу написать полиморфный код на си. Я слышал, что на фасме можно закриптовать код даже на этапе компиляции, но как сделать это на си, я не знаю.В общем, критическая часть программы выглядит примерно так:void CriticalFunc(void){}void EndFunc(){}В рантайме происходит расшифрование от начала функции до метки EndFunc().Но как ее сначала зашифровать? Инбифо: ксором в HIEWЕсли собирать с оптимизацией по размеру, компилятор может выкинуть метку EndFunc. Проблема решается объявлением указателя на нее volatile? Может ли линкер разместить EndFunc не после критической функции?
>>876780Самый простой способ - написать кастомный кодогенератор для tcc. Можно экспериментировать с LLVM. Можно просто сваять простейший парсер PE/ELF и криптовать секцию кода целиком. Алсо, можно сделать свой линкер - минимальный линкер под сишечку написать несложно, если есть опыт байтоебли.> Если собирать с оптимизациейЕсли творить такую хуйню, фиксированные параметры компиляции и минимальная оптимизация - это мастхэв.> Может ли линкер разместитьКлассический линкер не может менять порядок функций в объектнике, и выкинуть функции он тоже не может, но есть всякие фичи типа "separate functions for linker" (в терминах MS) и прочие LTO >>876268, поэтому опять же нужно подобрать такие параметры сборки, когда линкер не будет мешать твоим планам.
Хочу вертеть байтики в линуксе туда-сюда как это делает юниксовая dd. Какой ман читнуть?
>>877015Даже сишного fopen() вполне хватит для начала.
Вопрос нубский и вероятно платиновыйпишу калькулятор матричных операцийанон, подскажи пожалуйста как читать с stdin пока не закончаться знаки операцийто есть matrix+matrix*matrixя понимаю что вроде пока op не EOFно что-то никак
>>877059Читай fgets() в буфер, если во время чтения строки юзер тыкнет Ctrl+Z (Ctrl+D в Linux), fgets() вернет NULL, и ты закончишь. Дополнительно ты можешь проверять первый символ буфера. Если он \0 или \n - юзер ввел пустую строку, можешь по этому признаку тоже завершать ввод. А дальше ты можешь либо разбирать буфер вручную через strtok(), strtoSMTH() или делать sscanf().
Как на WinAPI создать текстовое поле без ограничения на длину вводимых данных?
>>877552Rich Edit Controls. Форматирование отключается.
>>877552>>877575Разобрался, надо было включить автоскролл.Как можно изменить цвет рамки эдита при получении фокуса?
>>877595пиздец. всё. нахуй идите со своим тредом.
>>877608Почему ты пригорел?
Какое же ебаное говно этот Pelles C. Несколько часов пердолил в нем код, а после падения IDE весь исходник оказался забит нулями.
>>877680Как ты умудрился его уронить? Он и несколько лет назад был вполне стабилен. Ну кроме дебаггера. Антивирусы/малварь в системе есть?
>>877714>малварь в системе есть?Обижаешь, конечно есть!
>>869911 (OP)Онан, поясни за GUI на pure-C. Какие фреймворки используешь? Сколько весит hello-world на таких? Можно ли static-версию делать? (цель Windows 2000-10, Ubuntu 14-...)Пишу для микроконтроллеров, но иногда надо делать управляющие программы. Пока что делал на delphi 7, лол. Пробовал на Qt, но по 70 мегабайт библиотек таскать, это пиздец.
>>877723>GUI на pure-CWinAPI, под линуксом через вайн запускаешь
>>877723> Какие фреймворки используешь?А выбор и небольшой, лол. Либо используешь кресты + wxWidgets либо прикручиваешь Gtk3 и не выёбуешься.
Переделываю неубиваемое консольное приложение в приложение с гуём. http://pastebin.com/qjCPVNM4Когда компилирую в Pelles C и запускаю, появляется два процесса, которые спавнят друг друга. Но если компилирую в MSVS 2015, второй процесс не запускается, и приложение закрывается после нажатия на крестик. Почему?
>>877723Качай ребол/пюревасик или даже блитзмакс и делай на них. Кроссплатфоренно, просто, а в последнем с/крестокод можно прямо к нему линковать не переписывая.
>>877767Разные методы запуска. Студия через жопу запускает - отобрази командную строку студии, и увидишь.
>>877897Запущенный не в среде студии экзешник (из папки) тоже не работает как надо.
>>877898Хуй знает, навскидку код вроде норм. Обработку ошибок и диагностику добавь.
>>877898>>877904Попробуй открывать процесс с SYNCHRONIZE, а не с полным доступом.
>>877906Не помогло. Попробую посмотреть, что передается в командной строке.
>>877911Странно, вот здесь вместо пути выводится форматная строка.http://pastebin.com/taKpQnJr
Почему-то GetModuleFileName(GetModuleHandle(NULL), szExePath, MAX_PATH); вместо пути записывает в буфер символ С.
>>877918В настройках проекта юникод, а на предупреждения ты не смотришь?
>>877932Ух спасибо, почти весь день убил на поиск проблемы. Надо мне читать Рихтера про юникод и переходить на него.
ананасы, подскажите, можно ли как нибудь способом узнать указывает ли указатель void * на какое либо место в памяти
>>877952Да, можно.Погугли функции с названиями вроде check memory page existence и т.п.
>>877962большое спасибо
>>877952Добавлю, что необходимость в таких функциях чаще всего следствие того, что ты делаешь что-то не так либо что-то близкое к системному софту.
>>877723Можешь попробовать это https://github.com/vurtun/nuklear
Вечер в хату, мужики и стремящиеся. Хочу сделать полупрозрачный гуй, чтобы главное окно и контролы были полупрозрачные, но рамки были яркие. Примерно как на пикрелейтед. Как это можно сделать? Перекопал сегодня много сайтов, но нашел мало полезного. Вот, например:https://www.experts-exchange.com/articles/1783/Win32-Semi-Transparent-Window.html
>>878087>Вечер в хату, мужики и стремящиесянахуй пошел, зек ебаный
>>878087>Вечер в хату, мужики и стремящиесяиди на хуй
>>878097>>878098Да ты же РОЛИДОВЫЙ.
Уже перечитал несколько про циклический алгоритм во многих источниках, но так и не могу ничего сделать, может кто нибудь дать совет по конкретному примеру? Хотя бы основу самого цикла, а то я возился около 4ех часов и ничего не получил, а лабу сдавать в понедельник
>>878163Я понимаю, как задать сам цикл, но не понимаю как заставить считать значение n-ого слагаемого
>>878164Вроде про цикл в задании ничего. Рекурсивно оно проще для понимания. Погугли "recursive cosine taylor series in c". Ну или можешь циклом считать, да. Минусы и плюсы - это 1 в степени n, степени в числителе - 2n, числа в знаменателе - факториал 2n. Значения, требуемые для вычисления числителя и знаменателя можно запоминать с предыдущего шага.> не понимаю как заставить считать значение n-ого слагаемого В смысле, не умеешь возводить число в степень с помощью pow() и делить его потом?
>>878167> 1 в степени n-1 конечно же.
>>878167Как посчитать то я знаю, я от том, что мы вводим любое n и программа должна посчитать этот n-ый элемент выражения, как это записывать?
>>878172Ну тебе все равно всю сумму считать. У тебя будет цикл от 1 (или 0) по n, в цикле ты вычисляешь очередное слагаемое, заканчиваешь n-ным. В чем проблема вывести его после выхода из цикла?
>>878173Точно, спасибо анон, погуглил про рекурсию вроде наглядно понял
Хочу вкатиться в си по пикрилу. Какие подводные?
>>878465Никаких. Читай, делай упражнения, приходи с вопросами, если возникнут. Успехов.
>>878470Как по пути не обосраться с мотивацией продолжать?
>>878472Пиши малварь. Поделай что-нибудь в реестр, напиши примитивный троян, который копируется в пользовательские папки, сканирует снапшот процессов и закрывает диспетчер задач. Посмотри, как мейлру параша прописывается в системе и самовосстанавливается. Сделай так же. Подъеби кого-нибудь этим трояном, главное, не попади в чью-нибудь статью о том, как лох пытался впарить троян, но соснул.
>>878524Во-первых, до малвари нужно язык выучить, чтобы не быть, как тот анон из ньюфаг-треда, который функцию переменной присваивает, да и не только язык - по-хорошему, желательно прочитать хотя бы Рихтера, а потом заполировать Inside Windows. Во-вторых, я очень надеюсь, что тебя поймают и пояснят по хардкору, почему распространять малварь плохо.
Пойти что ли на рефактор.ио вбросить. Алсо, эх, как плохо без тяночки. Вокруг компьютера они не водятся.http://ideone.com/wm2fM6
отцы помогите тотал нюфагу вкатитсяможет что-нибудь получитсяв поставке clang++ из коробки я так понял нет стандартных библиотек, а в GCC:g++ есть.можно их как-нить с консолидировать чтоб и clang все появилось
>>878576В папке со шлангом создай i686-w64-mingw32, туда скопируй include, lib, libexec из гцц. А еще лучше создай симлинки.
>>878578> шиндошс> симлинки
>>878578чтот ничего(
>>878584Да, в NTFS есть симлинки и хардлинки, доброе утро. Но вообще, я имел в виду junction points.>>878589Уверен, что правильно скопировал? Что пишет? Покажи скриншот clang -v file.c (кресты я компилить не пробовал, если что).
>>878589только щас заметил что не в тот тред написал
>>878604>>878605Попробовал кресты, хелловорлд компилится.
>>878604
>>878609Я не знаю, почему у тебя таргет по умолчанию msvc. Возможно, стоит убрать переменные окружения INCLUDE и LIB. А насчет хедеров - я сейчас поэкспериментировал, та папка не нужна, оно (по крайней мере у меня) находит директорию с MinGW, если она есть в PATH и автоматически использует инклуды оттуда. Но у меня в винде только clang 3.7 и gcc 4.8. Может, с тех пор что-то сломали. Возможно -target mingw32 решит проблему.
>>878618все директории сеть в переменных средахвсё ставил с сайта, таргетинг не понимает(
>>878622clang -v -target i686-w64-mingw32 foo.cНу пользуйся гцц, пока кто-нибудь умный не придет и не подскажет скорее всего, вместо решения проблемы предложат поставить линупс.
>>878604> доброе утро.> 00:45:55> NTFS есть симлинки и хардлинкиТо-то я смотрю, в Cygwin до сих пор пользуются магическими файлами, а в Msys ln -s равнозначно cp. Наверное, они не знают об этих фичах файловой системы.
>>878624> скорее всего, вместо решения проблемы предложат поставить линупс.Ну, это как спрашивать у мылачей, почему последняя студия под вайном не работает и как это исправить.
>>878626> в Cygwin до сих пор пользуются магическими файлами, а в Msys ln -s равнозначно cpКомпатибилити же. Настоящие симлинки (которые поддерживаются для файлов тоже) появились в Висте. Junction points не помню, но вроде в XP. И это не работает на FAT32. И там есть тонкости. Вот и не делают.https://en.wikipedia.org/wiki/NTFS_symbolic_linkhttps://en.wikipedia.org/wiki/NTFS_junction_point>>878627Ты уж определись, либо компилятор кроссплатформенный, либо только под линупсы. В студии кроссплатформенность никто не обещал. Шланг и гцц нормально работают в винде, но могут возникать мелкие проблемы, в основном из-за LFSтрадиции хардкодить пути.
>>878629> LFSЛол, FHS.слоуфикс
>>878624помогло))компилит с опцией -target x86_64-w64-mingw32без нее не хочет
>>878634Теперь, наверное, стоит посмотреть на твой PATH.
>>878635вроде все правильно
>>878638Да, все правильно. Больше идей нет. Сделай батник clang-mingw с содержимым типа @clang -target x86_64-w64-mingw32 %*
>>878629То-то и оно, что тонкостей больше, чем приемлимо для ежедневного использования. Невозможность создавать эти самые симлинки от обычного юзера в дефолтных настройках безопасности, как пример.А потом говорят, что в линуксе пердолинг.
>>878643Я junctions и хардлинки очень давно использую. Нестандартные права для них не нужны, проблем особых с середины 2000х не припомню кроме мелочей типа антивируса, впадавшего в бесконечный цикл при сканировании или инсталляторов, которые до сих пор! проверяют свободное место на томе, где расположена junction point, а не там, куда она указывает.
Наткнулся на следующий синтаксис:return (pointer);К чему тут скобки?
>>878668Не влияют ни на что. Кому-то нравится визуально, и они втыкают скобки всегда. Некоторые ставят, когда возвращается выражение.
>>877971ебашу интерпретатор джавы на сишке, при алокации структур заношу указатели в буффер, чтобы при любой ошибке сразу вычистить всю память и не было leakов. Проблема лишь в том, что по ходу работы интерпретатора я все равно освобождаю память и в результате при очистке памяти у меня может программа попытаться вычистить уже пустой указатель, поэтому надо как то проверять их. Не покидает ощущение того, что организовываю все это ебано, возможно есть лучший варик как это сделать
Изучаю использование юникода в винапи по книге Рихтера. Как вызвать ошибку компиляции в этом коде? http://ideone.com/jEG29dРихтер пишет, что компилятор по умолчанию рассмаривает строки как ANSI, поэтому код компилируется нормально. Но если определить _UNICODE, то возникнет ошибка. Однако ошибка не возникает ни при определении этого макроса с подчеркиванием, ни без подчеркивания. Почему так?Компилирую из командно строки (пикрелейтед).
>>878850Хендлы.
>>878850> Не покидает ощущение того, что организовываю все это ебано, возможно есть лучший варик как это сделатьДа. GC.
>>878860> WinAPI> UTF-16 вместо кодировкиЗря ты за это взялся.
Окей, реализовать обычный стек для обычных числел, ноу проблемс.Допустим stack[n] или вообще (int )malloc(ij*sizeof(int))Не могу придумать, как в стэк пихать 2D массивы?Гугл молчит, либо я слепошарый.
>>878903Какая кодировка сейчас в тренде? Что актуальные пацаны хайпают?
>>878909utf8 же
>>878909ascii
>>878860Ты представляешь, как препроцессор работает? Ты определяешь UNICODE после включения windows.h, и в результате в windows.h (точнее, в одном из включенных из него хедеров) TCHAR дефайнится как CHAR. Очевидно, чтобы возникла ошибка, надо сделать -DUNICODE в командной строке или дефайн до инклуда.>>878910> UTF-8 в WindowsИ кодировать туда-сюда на каждый вызов API. Охуенный совет. Не говоря уже о проблемах самой UTF-8, удобной лишь для передачи текста, а не для обработки.>>878907Указатели пихай или поясни, зачем ты собрался пихать в стек массивы по значению.
>>879097>И кодировать туда-сюда на каждый вызов API.Всю жизнь собрался сидеть в WinAPI и дальше локалхоста не вылазеть?> Не говоря уже о проблемах самой UTF-8, удобной лишь для передачи текста, а не для обработки.Ахахаххаахахахахаха! Вангую бред про "доступ к символу по индексу".utf8 прекрасна для всего!
>>879109> utf8 прекрасна для всего!То-то гугл глупый и андроендах использует UTF-32.
>>879112> андроендах использует UTF-32.В каком конкретно месте?
>>879112>То-то гугл глупый и андроендах использует UTF-32.
>>879113sizeof(wchar_t) в NDK, очевидно же. Да, доступ по индексу. Да, необходимость бранчей или таблиц для вычисления длины строки. А еще инвалидный UTF-8, приводящий к уязвимостям. А еще невозможность порезать строку нормально.
>>879118>sizeof(wchar_t) в NDKПхе-хе-хе, при чём тут android, это libc, старающаяся быть совместимой с glic.> Да, доступ по индексу.ffl — вот 3 буквы. Получи по индексу доступ ко второй.> Да, необходимость бранчей или таблиц для вычисления длины строки.define "длина строки". Для меня и strlen "длина строки".> А еще инвалидный UTF-8, приводящий к уязвимостям.Проблема уязвимых библиотек.> А еще невозможность порезать строку нормально.Раскрой мысль.
>>879123> вот 3 буквыЯ про буквы не говорил. Про то, как юникод устроен, я знаю, и про combining characters тоже, и про лигатуры. Но я вполне могу юникод нормализовать, хранить его нормализованным в UTF-32 и потом что-то в таком виде с символами сделать (например, проверить класс по табличке). И делать это проще, когда у тебя codepoint - одна сущность, а не когда тебе ее нужно сначала из байтиков собрать, да еще не забыть на валидность проверить.> Для меня и strlen "длина строки".> Проблема уязвимых библиотек.Нет, вопрос сложнее. Например, я закодировал \0 в виде двух байтов. У либц (strlen, в частности), твоего кода и библиотечного кода могут быть совершенно разные взгляды на этот символ (и это правильно, потому что подход зависит от цели обработки, а та же либц про твои цели нихуя не знает). Кто-то это выбросит, кто-то заменит, кто-то ошибку вернет, а кто-то пропустит.> А еще невозможность порезать строку нормально.snprintf() и случай, когда строка не влезла в буфер. Возникают веселые спецэффекты.
>>879147> проверить класс по табличке). И делать это проще, когда у тебя codepoint - одна сущность, а не когда тебе ее нужно сначала из байтиков собрать, да еще не забыть на валидность проверить.Нет, ну если у тебя единственная задача — проверять класс codepoint-а по табличке, то для тебя UTF-32 — лучший выбор.> я закодировал \0 в виде двух байтов.Искусственный пример. Если ввод должен прилетать откуда-то извне, он должен проверяться на валидность. К кодировке это отношения не имеет.> snprintf() и случай, когда строка не влезла в буфер. Возникают веселые спецэффекты.Чем же нам тут UTF-32 поможет?
>>879118>sizeof(wchar_t)Не подскажешь аналог fopen, принимающий wchar_t?
>>879153> Чем же нам тут UTF-32 поможет?> К кодировке это отношения не имеет.Тем, что строка останется валидной. А вот если ты порежешь UTF-8 посередине codepoint, у тебя из проверенного, валидного юникода возникнет невалидный, но ПРОВЕРЕННЫЙ, со всеми вытекающими.>>879156> fopen()Это вопрос про недостатки сишной либы, и к тому, какие имена файлов и в какой кодировке принимает ОС. Она может принимать исключительно 7-битный ASCII, если это ембеддед, может принимать исключительно CP866, а может вообще указатель на 16-байтовый бинарный GUID последнее - трустори, если что.
>>879163>Тем, что строка останется валидной.Ой-ой-ой. Манявалидной, ты хотел сказать.Никому нафиг не нужна валидная последовательность байт, люди на буквы смотрят =)Думаешь, обрезание только по четырёхбайтовым границам спасёт тебя от кривых строк? Ха-ха-ха. До первого клиента, которому ты отрежешь accent-ы от буквы. Желаю успехов в объяснении ему что это валидно.Кстати, сколько букв в следующей строке "ch"?
>>879163>Это вопрос про недостатки сишной либыЭто про преимущество. Хоть куда-то этот блядский wchar_t не пролез. Его вообще не должно существовать!> какие имена файлов и в какой кодировке принимает ОСНу, кхе-кхе, кхе-кхе, тут может быть проблема. Но если ты принимаешь имена через аргументы командной строки, то должно, в идеале, работать везде.
>>879169> люди на буквы смотрятТак проблема-то в том, что компьютеры смотрят на байты. Например, если это логин или имя файла.> отрежешь accent-ы от буквыЧто лучше: оставить висеть акценты, пролететь мимо \0 в буфере или много позже вернуть из какой-то функции ошибку, когда ее никто не ожидает?> Кстати, сколько букв в следующей строке "ch"?Букв две.В общем, я тебя понял, ты меня понял, друг друга мы не переубедим. У тебя идеальный мир, ограничивающийся линупсами и, подозреваю, прочитанный когда-то манифест про утф8 эвривер, а у нас на работе только пару лет назад ANSI-шные билды дропнули. Алсо, в последнем проекте у меня у самого UTF-8 основной кодировкой, кроме встроенного редактора и абстракций над файловой системой. Время покажет, что из этого выйдет.
>>879180> Что лучше: оставить висеть акценты, пролететь мимо \0 в буфере или много позже вернуть из какой-то функции ошибку, когда ее никто не ожидает?Ничего не лучше. И UTF32 никак не поможет.>Букв две.Не всегда =)
Можно ли и вправду научиться кодить, читая только мануалы?
>>876376Реальные задачи попробуй решать.
>>877723Какие в жопу фреймворки???У Си только один вменямый инструмент для окон - GTK.
>>879097>зачем Мне на вход подается ебаная куча матриц, и операторов между ними. Я должен всё это подсчитать, естественно умножение приоритетная операция. Ну я и подумал собирать матрицы и операторы в стек и постфиксной ротацией всё это вычислять.
>>879360Ну и сделай структурки (либо, если у тебя скаляры тоже есть - union сверху еще), и стек этих структурок.
Анон, что здесь определяется и для чего?typedef LONG (WINAPI * NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID BaseAddress);Ниже по коду такая строчка:NtUnmapViewOfSection xNtUnmapViewOfSection;
>>879659Указатель на функцию.
>>879664Нафиг он нужен, если можно вызвать саму функцию?
>>879669А если неизвестно какую?
>>879669для шимминга, для реализации ООП (методы структуры), для реализации функторов, или для передачи функции в функцию
>>879669Эта функция была недокументированной на момент написания кода, и чтобы не кусать локти, если Microsoft вдруг ее уберет не уберет, к ней не стали линковаться статически.
Как сделать что бы программа выполнялась пока не нажать определенною кнопку?
>>879787while (!knopkah_is_on){...}
>>879787ОС какая? И подробнее расскажи, чего тебе надо. Может, ты трояна пишешь, хз.
Как мне выровнять ассемблерную ставку на дворд? http://ideone.com/kAflFCИз-за того, что мои нопы не выровнены, поиск этой метки при помощи указателя на дворд пропускает их.
>>880515Если это Microsoft, то просто align 4.
>>880519Не понял. Покажи на примере. Такой код работает не так, как задумано.http://ideone.com/PGOhV4
Посоны, я вам свеженького баттхерта принес.https://www.linux.org.ru/forum/development/13019524
>>880544>2016>быдло бугуртит от WinAPIО времена! А раньше каждый школьник с компьютером был исследователем реестра винды.
https://github.com/coruws/malware/tree/master/beetle2Вин.
>>880521Хуй знает, что у тебя там задумано, но у меня все выравнивается, мессаджбокс выдает адреса, по которым начинаются твои нопы. Зачем ты ксоришь код и потом вызываешь полученный мусор?
>>880551Раньше и трава была зеленее, и девки чаще давали.>>880553Очередной студент младших курсов.
>>880557Делаю протектор. В шеллкоде код между этими метками будет заксорен. Потом он расшифровывается, выполняется и снова зашифровывается.
http://pastebin.com/vERrVKVZза что сатана предал меня ?
>>880946struct one { char a; char b;};struct two { struct one c; struct one d;};void firstfunction(void source, void dest, int size){ memcpy(dest,source,size)}void secondfunction(struct two onedata){ struct two twodata; firstfunction((void )onedata->c,(void )&twodata.c,2);}void main(){ struct two onedata; secondfunction(&onedata);}gcc -g -O2 struct.c -o structstruct.c: In function ‘secondfunction’:struct.c:19:2: error: cannot convert to a pointer type firstfunction((void )onedata->c,(void )&twodata.c,2); ^~~~~~~~~~~~~<builtin>: recipe for target 'struct' failedmake: [struct] Error 1
>>880946>>880947Всё верно.
>>880956нихуя не верно. надо такfirstfunction(&onedata->c, &twodata.c,2);и без приведений в данном случае если функция сразу укзатели на войды принимает
>>880961>нихуя не верноЯ имел ввиду, что gcc и сотона правы, предав тебя.
В рекомендациях книжка Кернигана и Ритчи, в первой же главе - while(getchar() != EOF)Как передать ЕОF , если я предаю значение из командной строки в винде? В одном месте советуют ctrl+z, но нифига. Не работает.CodeBlocks, Win7, TCC
>>881119ctrl+z работает если ничего не было введено после нажатия на enter
>>869911 (OP)Перепощу из треда ньфагов, тут вроде уместней?Подскажите, почему запоминается последняя цифра, если цикл до 15, а цифр в числе 16?Если я сделаю цикл до 16 значений, то а[16] запишется как 0.Можете объяснить?#include<stdio.h>int main(void){long long h;do{printf("Card number:\n");h = get_long_long();} while(h<=0 || h>=9999999999999999 || h<1000000000000);if (h<1000000000000000){while (h<999999999999999)h=h*10;}int a[16];int b[16];int i;for(i=1; i<=15;i++){printf("%i\n",i);printf("%lli\n",h);a[ i ] = (int)(h%10);h = h/10;printf("%i\n\n",a[ i ]);}for(i=1; i<=16;i++){b[ i ] = a[17-i];printf("%i ", b[ i ]);}}Ну и ещё, подскажите, если знаете, как проще задать это ограничение на получаемое с клавиатуры число: положительное, от 13 до 16 знаков.
>>881132Потому что индексы массивов считают от нуля.
Нужно создать функцию, которая может принимать в себя любую другую функцию это вроде callback называется. Немного погуглил и наткнулся лишь на примеры с заранее определённым типом и аргументами принимаемой, а мне надо чтобы функция могла принимать ваще любую функцию. Как запилить?
>>881409void set_voobshe_lyuboy_callback(void *pointer_na_voobshe_chto_ugodno);
>>881432А если у функции больше одного аргумента?
>>881436> pointer_na_voobshe_chto_ugodno> voobshe_chto_ugodnoАлсо, объясни, что ты будешь с этим колбэком делать, тогда тебе, может быть, и посоветуют.
>>881459Пока у меня только теория. По идеи просто выполнять функцию при определённых условиях. Что с ним ещё можно сделать?
>>881432Попробовал на практике, когда я вызываю указатель на вообще что угодно мне говорят что "pointer_na_voobshe_chto_ugodno is not a function or function pointer".
>>881488ALLOНет, серьёзно, я спатьки хочу.Анончик-анончик, ответь мне.
>>881488> 1488Указатель, чтобы его вызвать, надо сначала скастовать к тому же самому типу, каким была объявлена функция (иначе undefined behavior). Вот тебе пример. Сначала объявляешь типы своих колбэков (решетку везде заменяй на звездочку):typedef int (#GovnoPtr)(int arg1);typedef void (#MochaPtr)(int arg1, char #arg2);Потом делаешь enum с перечислением своих типов:enum CallbackType {CALLBACK_GOVNO, CALLBACK_MOCHA};В свою йоба-функцию-обработчик ты скармливаешь не только указатель на колбэк, но и его тип:void zaloopa(void #callback_ptr, enum CallbackType type) {if (type == CALLBACK_GOVNO) {int result = ((GovnoPtr) callback_ptr)(1488);} else {((MochaPtr) callback_ptr)(359, "MYTISCHI UNITY HARDCORE");}}Как-то так.
>>881488> вызываю указательPSSSHHHH UKAZATEL ETO TY?
>>881641FREE 5 FREE 5 ХОРОНИ ПАМЯТЬ, ХОРОНИ ГОВОРЮ
>>881617сук пиздез, блеванул от этой хуйни
>>881755Предложи свой вариант.
>>881617Бляяяя, пиздец.Я либу пишу, в либе есть функция, которая должна принимать функцию из внешней программы, которая пользуется этой либой. Так вот, мне нужно юзерфрендли! Чтобы просто всё было. А тут... Бляяя, пиздец. Бляяя, пиздец!
>>881785> принимать функцию из внешней программыНельзя вызвать функцию, не зная ее тип.> мне надо чтобы функция могла принимать ваще любую функциюПоясни, зачем. Скорее всего, ты хочешь void (∗ callback)(void ∗user_data) - это нормальная практика, максимум юзер-френдли. Ну или в крайнем случае проебать типы и void (∗ callback)(int paramspec, ...), но для этого варианта нужны серьезные основания.
>>881786Да, уже дошло, сделал так void (*callback)(void).
>>881786Анон, ещё один небольшой вопрос. Вот передал я функцию callback в функцию, а как мне в этой функции записать принятый callback в указатель?
Ты уже принимаешь указатель на фунцию. Хочешь его куда-то записать - объяви другой указатель на функцию и используй = для присваивания. Или покажи код.
Есть тут кто нибудь?Один вопрос по си
>>881798Никого нету. Но ты все равно спрашивай.
>>881799Окей, например ...char A[5]; char B[] = "hello3"Из строки B переписать в А только цифры.Да, вопрос глупый, но я хзВ интернете ничего не нашел
>>881797Спасибо.Я, идиот, делал ptr = callback(); а надо было ptr = callback;
>>881800Помогите пожалуйстаа
>>881800Ну объявляешь указатели на оба массива. В цикле читаешь символы по указателю на B, если прочитал '\0' - выходишь из цикла, если прочитал что-то, для чего isdigit() вернул ненулевое значение - пишешь символ по указателю на буфер A. После выхода из цикла пишешь '\0' по указателю на буфер A. Про инкременты указателей не забудь. Алсо, можешь сделать то же с индексами, а не с указателями.
>>881807 (OP)>>881807 (OP)>>881807 (OP)>>881807 (OP)>>881807 (OP)
>>881803Делаю с индексами, она почему то ругается
>>881809Ты не можешь присвоить массив, прочитай в правой части от = нужный тебе символ.
>>881812Только не А катое
>>881812Забыл k инициализировать. Ну да похуй, пикрелейтед.
>>881812Так правильнее?
>>881815Ахахахах, пиздецДа мне кажется мой препод тут ничего кроме while не поймет Бтв, все равно ругается
>>881817Ну оно же тебе на чистейшем русском языке говорит, что у тебя не так.
>>881819Да, спасибоДоделал, все работает правда пришлось новые слова учить, но это даже хорошо Спасибо большое, анон