Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь https://ideone.com/ или http://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит звездочки.Что читать:- Классика от Отцов: 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Прошлые треды:- №16: https://arhivach.org/thread/235327/- №17: https://arhivach.org/thread/237852/- №18: https://arhivach.org/thread/243867/- №19: https://arhivach.org/thread/248880/- №20: https://arhivach.org/thread/254158/Шапка: http://piratepad.net/bJ1SdmkZyu
Чем компилировать:- Очевидный GCC.- clang: оче годно, батя рекомендует.- Intel C++ Compiler: оптимизации, тысячи их.- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
>>973300>intel>visal studiomalware вместо компилятора это сейчас top-tier? Чтобы сразу с зондами?
>>973300>threads.hЭто вообще каким боком к компилятору? Это отсетственность C библиотеки.
https://2ch.hk/pr/res/959643.html#973256Спасибо, няша, учту комментарии. Язык не первый, вебмакакой работаю, задолбало
>>973331>Это отсетственность C библиотекиСука, какой же ты тупой уёбок.
Здравствуйте, друзья. Я пишу себе прогу на C для генерации статус-бара в dwm. Всё было хорошо, пока я не захотел сделать отображение названия трека, который в данный момент играет в плеере. Название может содержать UTF-8 символы и, естественно, когда я хочу обрезать слишком длинное название или просто получить его длину в символах, всё идёт по пизде. В общем, подкиньте годных гайдов про то, как завести UTF-8 на C. Спасибо.
>>973827> просто получить его длину в символахmbstowcs() из стандартной библиотеки. Но на самом деле тебе нужна длина в глифах (ты ведь не хочешь считать, что a - это a´), и вот тут все не так просто. Чем рисуешь текст?
>>973832Да я лично ничем не рисую. Я просто передаю буфер иксовой функции XStoreName() и вызываю XSync(). Спасибо за наводку, буду дальше шерстить мануалы.
>>973346Иди нахуй педрила.В musl есть threads.h
>>973846>2017>X11Откуда лезете?
>>973827>В общем, подкиньте годных гайдов про то, как завести UTF-8 на C.https://julialang.org/utf8proc/Сам не пробывал, просто нагуглил.
>>973874а я думал всем похуй на треды в лялихе. с другой стороны, кто будет отказываться от glibc.
>>973875>C>выёбываться на X11тебе в другой тред.
>>973890X11 устарело и нигде не используется. При чем тут С? сишке альтернативы нет.
>>973889ембеддеды в которых С нет альтернативы, хотя и glibc в среднеэмбеддеде живет нормально.
>>973892> X11 устарело и нигде не используется.покажи где не используется. он(X) всегда и везде будет, потому что стандарт дефакто. может виндованам ещё не пользоваться windows.h? ну так, кстати.
>>973892>X11 устарело и нигде не используется.ебать фантазёр
Правлю либу стима для VR поддержки для андроида, может помочь кто-нибудь собрать clang + Visual Studio? http://rgho.st/8V6HtkNCX
>>9739035 лет назад ты еще мог бы так сказать. Сейчас Wayland - стандарт де-факто, используется всеми основными DE - GNOME, KDE, Enlightenment, и тайловыми оконными менеджерами. Все драйвера перешли на wayland и в ближающем будующем не будут работать с ксоргом.>>973917
>>974125>clang + Visual StudioЧто за гремучая смесь?
>>974150Фронт-енд clang-а с майкрософтовским бекендом.
>>974149>используется всеми основными тайловыми оконными менеджерами
>>974167Там нету velox, orbment, way cooler, ну и вейланд это дефолт для GTK3+ QT5+ SDL2+ EFL, CLUTTER, GLFW, FreeGLUT, OpenGL, Vulkan.
>>974125Я точно не уверен, может clang и не нужен. Может Visual Studio даже соберет, помогите плз у кого есть возможность, собираться будет максимум минуту.
>>974255>основные тайловые оконные менеджеры>называет какие-то ноунеймы, о которых никто не знаетты, видимо, живёшь в какой-то другой вселенной
>>974279Ксорго-парашка загибается уже.
Два вопроса:1. Как начать учить нейросети и все, что с ними связано? (на крестах)2. Где брать практические задачи/упражнения/хадания для практики C#? (типа создания блокнота или приложения с каким-то webapi)
Народ, как реализовать оператор goto в компиляторе? Гугл, как всегда, молчит.
>>974390гугли двухпроходная схема трансляцииЕсли за один проход, то backpatching книга дракона в помощь
>>974381Нахуй сходиВ соседний тред
>>974149>Все драйвера перешли на waylandВ голос>>974351Ага, как и флеш. Хоронили флеш - порвали два баяна.
>>974527Хотите обсуждать неймфага и его особое понимание реальности - идите вместе с ним обратно в /s/.
>>974528>идите вместе с ним обратно в опеннет.
команды mingw пожалуйста тутор проебал
ебучий аваст сука ,какого хуя ,хелол ворлд блокировать
>>975161Добавь в исключения для сканирования папку для хеллоуворлдов, ок?
>>974125посоны, ну соберите плз, я не смог настроить clang и mingw, в dev c++ не собирается
>>975165> не смог настроитьОхуительные истории. Ну на: http://dropmefiles.com/Qtzic (только это студия 2017).> в dev c++ не собираетсяОшибку показывай.>>975161Зачем тебе на девелоперской машине "ебучий аваст"?> какого хуя хелол ворлд блокировать Потому что этот бинарник ему раньше не встречался, он существует только у тебя, наверняка это закриптованный троян.
>>975204о спасибо анон, на последнем qt собирается без проблем да? по умолчанию или нужно еще что-то сделать в настройках там или еще как? собирал под виндой?
>>975207ой в глаза ебусь, спасибо, точнее в студии прям сразу собирается?
>>975207Какой qt? Сказал же, студия. Visual Studio 2017. Собирается без проблем (сменил тулсет на XP-шный, мало ли, ну и M_PI по умолчанию нету в math.h, воткнул дефайном прямо в исходник).
>>975211это, в проекте поучаствовать в этом не хочешь? совместном, можешь оставить какие-нибудь контакты, мб телеграмм?
>>975213Охуел что ли, нахуй иди.
>>975229Мне только сборка нужна и все. Ладно, в любом случае спасибо за сборку.
>>975213Предыдущий с сажей был не я, но я тоже не хочу. Особенно если вы два файла скомпилировать не в состоянии.
>>975233я не мог скомпилить, но смог подправить, добавить нужные функции, поправить код, а скомпилировать не мог, потому пробовал компилить в clang + mingw, а не визуалке.
>>975239Берешь MinGW, ставишь, прописываешь в PATH все bin, которые найдешь (или оно само пропишет, не помню). Идешь в папку с исходниками и говоришь c++ -D_USE_MATH_DEFINES -shared -std=c++11 *.cpp -o yoba.dll Еще проще, чем в студии. Можешь под линуксом абсолютно так же собирать, поставив MinGW туда. Только компилятор будет называться не просто с++, а как-нибудь вроде i686-w64-mingw32-c++.
>>975204#include <stdio.h>Main(){Printf("good");return 0;}Такой то троянКомпилю командой g++
>>974125>VR поддержки для андроиданахуя?
>>975285Я не говорю, что у тебя троян. Я объяснил "логику" аваста. Например, когда мы выкладываем новую версию своей утилиты, аваст абсолютно так же ругается, пока ее не скачает достаточно пользователей. Самый простой способ это починить - не использовать аваст.
>>975229лучший пост за последние треда 3.
>>973297 (OP)Сап, есть символы, указываем любое кол-во столбцов, кол-во строк фиксировано, значения не имеет, двумерный массив заполняется соответственно первый символ [0][0], второй [1][0], третий [2][0] и тд. Как я понял, сообщение в обычный массив и номера его элементов в двумерный, не могу в код именно с переводом в двумерный, помогите.И не будет ли ебли с пробелом? Проще ли будет использовать "_"?
Как победить multiple definition error?Есть файл displayline.h[code]#ifndef APPLICATION_USER_DISPLAYLINE_H_#define APPLICATION_USER_DISPLAYLINE_H_void displayLine(uint16_t pos, const char inpline);#endif / APPLICATION_USER_DISPLAYLINE_H_ /[/code]есть файл displayline.с:[code]#include "displayline.h"void displayLine(uint16_t pos, const char inpline){ char buffer[60]; sprintf(buffer, inpline); BSP_LCD_DisplayStringAtLine(pos, (uint8_t *) buffer);}[/code]Подключаю к двум другим с файлам. Получаю такую ошибку:displayline.h:21: multiple definition of `displayLine'Application\User\displayline.o: Src/displayline.c:3: first defined here
>>975541Лол. Помог clean build.
>>973297 (OP)Ананасы, есть вот такой код: https://pastebin.com/0MQsjgdp Существует ли риск, что конпилятор соптимизирует код функции func1 до видаvoid func1(void){ //do something else}
>>975561думаю нет, он же не знает сколько тредов будет. хотя хз.
Сап, деды.Есть один проект, и есть анон-я, слабо шарящий в языке-батьке.Проект, насколько я знаю, не использует даже C99, как его включить - без понятия, ибо структура проекта сложная, по крайней мере, для понимания меня.Вопрос - какого чёрта так происходит?Для не умеющих читать: Создаётся переменная unsigned int i со значением 0, ей же в for цикле ещё раз присваивается ноль, но какого-то чёрта ей присваивается значение 7055204. Какого хрена так происходит?Может ли это быть из-за того, что я собираю проект, который в принципе заточен под сборку на 32-битной системе, на 64-битной?
>>975561>Существует ли рискНикакого риска не существует, если ты пишешь по стандарту. Что именно делает компилятор - тебя интересовать не должно никак.Если у тебя написано, что цикл зависит от flag, он и будет зависеть от flag.
>>975575>заточен Задрочен. На строчке 265 переменная ещё не инициализирована. Перейди на 266.
>>975575>Проект, насколько я знаю, не использует даже C99, как его включить - без понятия, ибо структура проекта сложная, по крайней мере, для понимания меня.ещё раз, помедленней.
>>975577Переходил, и на 266, и на 267, и до 273 доходил, значение её не меняется в принципе.
>>975578Когда попытался поместить создание переменной в цикл for, он пожаловался, что так можно только в c99 и c11. Попытка добавить ключ -std=C99 к makefile в корне проекта сломала всё к чертям, лазить по папкам, выискивать там makefile'ы и в каждом разбираться и что-то править у меня вообще желания нет.
>>975579Debug build? Printf-ом выводил?
>>975584да, судя по всему debug build.Выводил как и на скрине - через print в gdb.(В моём случае это cgdb, но разницы не должно быть)
>>975588число меняется?
>>975527Бамп
>>975593>>975579Нет, не меняется вообще.
>>975596может там где-то u определён. без префикса тоже самое?
>>975599u же литерал, нет?Я специально его добавил, потому что на каком-то помешанном на стандартах форуме вычитал, что без литерала присваивание может улететь в трубу, но без него было тоже самое.
>>975576>Что именно делает компилятор - тебя интересовать не должно никак.В идеальном манямирке в программе laba2.prj может быть и да, но вот в реальности - хуй тебе.Для https://pastebin.com/YZeW24gu выхлоп ассемблера: https://pastebin.com/3SnBwQCBА теперь для того же кода, но в 8 строке flag = 1; : https://pastebin.com/bMZxJPCZ
>>975601давай код функции.
>>975609В гугле забанили? https://github.com/dzavalishin/phantomuserland/blob/8ff7306b84a52547fd66e02252621a5de5b08bbf/oldtree/kernel/phantom/multiboot.c#L265
>>975575Может QEMU неверный адрес передаёт или что-нибудь в таком духе.
>>975575Оптимизации конпелятора выключил?
>>975575В сях не шарю, но м.б. там создается новый скоуп?
>>975702>В сях не шарюА зачем лезешь?
>>975588Вставь printf в код. Ещё можешь вызвать printf в gdb.
>>975561Где volatile?
>>975561>>975602И чем void func1(){flag = false;while(flag) {...}// do something else}отличается от void func1(void){//do something else}???
>>975824Вообще я примерно подозреваю, что мне сейчас ответят, но не буду писать, что я подозреваю.
>>975824>flag = false;>while(flag) {...}Дебил бля.
Алёрт! Код, написанный конченным дебилом, только начавшим изучать программирование вообще! (Уж если и собираетесь послать, то хотя бы туда, где мне дадут ответ)Крч, есть цель: найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2/3/4/5/6/7/8/9. (Самое мелкое такое число-18, для примера)Долго пыхтев, я таки выдал это: https://pastebin.com/wzaDvk2qПонимаю, что код крайне омерзителен по своей структуре, его можно сократить раза в два, если не больше, но на данном этапе я могу сделать лишь это, а брать готовое решение из инетов-считай, зарыть свои навыки глубоко в землю. Запускал через Code Blocks, ничего не выдаёт. При компиляции ошибок не обнаруживает, наверное, ошибка логическая. Анон, ты можешь сказать, что я сделал не так? inb4: в программирование решил вкатываться
>>975883Код через обфускатор прогонял?Так или иначе, тебе в прикреплённый тред.
>>975891>Код через обфускатор прогонял?Загуглил, что есть обфускация. Не понял, зачем мне и без того трудночитаемый код делать ещё более трудночитаемым.>Так или иначе, тебе в прикреплённый тред.Благодарю за направление, туда и отправлюсь
>>975824Второй прототип не имеет аргументов, первый - произвольный набор
>>975941Подловил, молодец.Но очевидно что я про тело функции.
>>975828В теории и чего собственно ожидают неподготовленные люди тут должен быть рейс кондишн и рандомное выполнение или невыполнение того, что в цикле, а не тупое оптимизирование всего нахуй.
>>975945Ну в общем ты спалил то, чего я жду. Что придёт какой-нибудь довен и напишет, что другой тред может присвоить флагу значение true после присвоения false и до проверки while(flag).
>>975945На практике же нужно делать мьютексы, объявлять переменнную как volatileлибо что-то еще перед вызовом цикла и помнить, что си не знает, что такое потоки.
>>975947Хули ты выебуешься, пидор, поясни тогда, почему я не прав и ответишь заодно этому >>975561 хую
>>975948> си не знает, что такое потокиУже шесть лет, как в си есть собственные потоки.
>>975948>На практике же нужно делать мьютексы, объявлять переменнную как volatileНа практике нужно сделать flag атомиком.> си не знает, что такое потокиБгг. Стандарт открой.>>975950Потоки там опциональные, а модель памяти с учётом наличия потоков — нет.
>>975947Без volatile компилятору посрать, что существуют другие треды, и он может смело выкидывать while.
>>975949Пидор, я думал ты понимаешь, в чём там дело.Компилятор вправе полагать, что в программе нет UB (к которому относится race condition) и он справедливо считает, что while(false) можно выкинуть.>>975952Спасибо, капитан К.О.
>>975952С volatile, кстати, тоже посрать на другие треды. Он не выкидывает volatile по другой причине.И одновременный доступ к volatile-переменной тоже race condition. Так что только атомики.
>>975951>На практике нужно сделать flag атомиком.>Бгг. Стандарт открой.Ты у нас стильный, модный, молодежный и уже перевел все проджекты на С11?
>>975960Лично тебе выдаю разрешение использовать pthread_mutex
>>975959Нет там UB. UB только при одновременной модификации (т.е., когда есть сайд-эффекты).
>>975955>Пидор, я думал ты понимаешь, в чём там дело.Да понимаю я, что там такое, но ты заебал со своей тупорылой манерой общения. Так и представляю сидящего за компом инфантильного гордого говноеда-синьера, который на работе мучает довольно неочивидными сишными заебами попавших под руки непуганных ньюфагов.
>>975963Ок, поправлюсь: написать там volatile flag не избавит от data race.> UB только при одновременной модификации Модификация одним при чтении другим тоже data race.
>>975966>довольно неочивиднымиБгг. Тебе не очевидно, что while (false) можно выкинуть и это не повлияет на наблюдаемое поведение?
>>975955>Компилятор вправе полагать, что в программе нет UB (к которому относится race condition)Почему никто не поправил, довены? race condition не UB, UB это data race.
>>975959>С volatile, кстати, тоже посрать на другие треды. Он не выкидывает volatile по другой причине.Но в целом volatile значит вырубить нахуй все оптимизации, чего достаточно для того, чтобы небыло неожиданных проблем при работе в многопоточных приложениях (либо с прерываниями).
>>975968Ну ок, поглядел стандарт. В теории ты прав. На практике я могу притвориться, что у меня C99 и ебать в жопу новый стандарт, пользуясь своими знаниями о том, как работают процессоры и кэши на всех распространенных реализациях (c выровненным bool у меня проблем не будет). С атомиками проще, да.
>>975974С практической точки зрения ты, конечно, прав. Но всё-таки.
>>975950А теперь посмотри, когда в том же gcc эти самые потоки появились и сколько людей знает об этих потоках больше, чем то, что они существуют. Сосачерских выебщиков не учитывать
выебонов полон тред.
>>975691и чего тогда там комментарии есть с //. и объявление i не в начале блока, по после вызова функции e(). это и так должен быть c99.
>>976060Я не автор вопроса, не доёбуйся до меня плес.
поясните за ConEmu
Аноны, помогите. Ядро компилю для андроида c поддержкой kvm. Что нужно в сырцах менять? В s не ответили.Лог тут - https://paste.fedoraproject.org/paste/kiPgyHv9k6DWmEMhEw65P15M1UNdIGYhyRLivL9gydE=Сорцы - https://github.com/adrenogamer/android_kernel_asus_msm8916
>>976530Как ты его коныигурировал мань?На чем собирал мм?Почему дефолтный конфиг распбиан не подошел?
>>975960А что там сложного? Кроме того что glibc не имеет threads.h
>>976604Как быдло через menuconfig. В сорцах есть дефконфиг - ze500kl-nhkernel_defconfigНа ляликсе, гугловский тулчейн aarch64-linux-android-4.9. Потому что у мен6я ведро, и конфиг от распберри не подойдет.
>>976610К слову - добавил эти конфиги:CONFIG_HAVE_KVM_IRQCHIP=yCONFIG_KVM_MMIO=yCONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=yCONFIG_KVM=yCONFIG_KVM_ARM_HOST=yCONFIG_KVM_ARM_MAX_VCPUS=4CONFIG_KVM_ARM_VGIC=yCONFIG_KVM_ARM_TIMER=y
Как объявить переменную, которая будет доступна в нескольких точках программы, как в main, так и в других подпрограммах? (типа суперглобальной).Есть такая идея:1. В файле globaldef.c записать:#include "globaldef.h"charзвездочка global_line;int global_line_sz;2. В файле globaldef.h:#ifndef globaldef_h#define globaldef_hextern charзвездочка global_line;extern int global_line_sz;#endif3. И применение: В файле othcode.h где-нибудь в программе написать:#include "globaldef.h"void kek(void) {strcpy(global_line, "KEK");global_line_sz = 3;}Всё правильно понял? Так можно?
>>976806Зачем тебе файл реализации globaldef.c? Достаточно .h ведь ты не осуществляешь реализацию алгоритмов
>>976813>>976806И вообще глобальные переменные использовать не рекомендуется
аноны. Реально вкатится в Си самому на достаточном уровне? Знания не нулевые, базовый курс Питона.
>>976806Все правильно, но не забывай об include guard>>976813Затем, чтобы застраховаться от проблем с повторным определением переменной.
>>976814Ага, вперед объявлять периферийные регистры микроконтроллера локально.
>>976806Неправильно только использование, потому что в твоем примере global_line не инициализирована, и копировать в нее строку нельзя. Нужен или malloc, или объявляй ее как массив.(>>977049 - анон)
>>977054Ну очевидно же, что рекомендация не касается экстремальных случаев. По большей части, когда хочется что-то глобальное, на самом деле достаточно file-scope.
>>974525в какой из них? тут как минимум два треда нужны
Для чего точку входа в сишный шеллкод, расположенную в самом начале ШК-да, понадобилось делать невстраиваемой?https://pastebin.com/5FfBvp95
Платиновый вопрос от сомневающегосяЕсть такой вот код:void nishtyakProcessing(void) {char hugeArray[512*3];//тут ништяки}Нужно в конце выполнения как-то освободить память, которая была выделена под hugeArray?
>>977266У меня прост всего 300 кб памяти
>>977266Нет. Очищать память нужно только при динамическом выделении памяти.
>>977266Переменные, объявленные внутри функции, называются автоматическими (есть даже ключевое слово auto для подтверждения этого факта, но его никто не указывает, потому что такие переменные auto по умолчанию). Задумайся, почему они называются именно так.
Посоветуйте, что почитать или посмотреть после того, как более-менее освоил for beginners.
>>977469Переходить к другим языкам.
>>977539Дебич.>>977469На С можно писать все кроме веб-серверов, пиши. Освой GTK3/4 если гуи хочешь пилить.Очень легкий и быстрый тулкий, хелловорды 11кб весят, кютям такое и не снилось.
>>977598Точнее все кроме веб сайтов, и то их можно на сишке шлепать.
> все кроме веб-серверовИгорю не говори - расстроится.
>>977598>GTK3/4 если гуи хочешь пилить.>Очень легкий и быстрый тулкий, хелловорды 11кб весят>критческие баги висят в трекере по 5-10 лет>Нова версия жрет ресурсов как не в себя, имеет новые баги, и не фиксит ни одного старого.>QT говно ясокзал кьютелалкисоснули.
>>977602Еще скажи что в Qt баги висят меньше маня.Еще скажи что Qt не жрет еще больше.
>>977611>маняПрошу, избавь меня от сленга опущенных.Займись домашкой.
>>977469>что почитать или посмотреть после того, как более-менее освоил for beginners. ядро линуксовое
Кто-нибудь, посоветуйте GUI для SDL2и как его прилепить
Начал изучать Xlib для линукс и что-то офигел с того что мне это http://dfe.petrsu.ru/koi/posob/X/index.html руководство предлагает. Мне надо рисовать пиксели, а они мне предлагают создать графические контексты, для каждого выделить цвет фона и цвет переднего плана и рисовать ими. Но это же совсем не удобно. Как мне сделать так чтобы я мог просто создать буфер, где хранятся все пиксельные данные и чтобы я просто напрямую записывал их туда и отрисовывал их? Там было что-то про пиксельные карты, но я не знаю как прямо в них писать данные. Там разве что с помощью функций. Но это же медленно! Да и я не понял как разными цветами рисовать, мне что для каждого цвета теперь выделять структуру, в которую каждый раз записывать данные о цвете?Может сразу перейти на SDL? Не будет ли слишком медленно? Я хочу написать свой собственный графический редактор, по удобности как MS Paint, но со всякими свистелками-перделками и редактором видео.
Какой же сложный и непонятный этот си. По моему единственный действительно понятный язык программирования это язык ассемблера. Можно просто думать как процессор и всё будет понятно, если не пропустил что-то где-то. Но он очень неудобен. Приходится использовать си.
>>977965qt и gtk рисуют в память и гоняют битмапы. На локальной машине даже не гоняют, а держат в шареной с x-сервером памяти.Это в общем, деталей не знаю.
>>977965>Xlib Оно устарело безнадежно.Если опенгл знаешь то пиши на Opengl+Wayland, еще FreeGlut в него может, и SDL тоже может.Так что зависит от того насколько все высокоуровнево тебе надо, если SDL анонсировали поддержку вулкана то пиши на SDL однозначно.>>977967Просто процессоры слишком низкоуровневые, не хватает инструкций и ASIC модулей там.
>>978027x сервера нет на десктопах.
>>978031Щито?
Немного оффтоп, но думаю тут есть люди, которые могут ответить. Вопрос в контексте windows, хотя за информацию по unix/линупс тоже буду благодарен.Вот допустим, я написал .dll, функции из которого локальные и статические переменные точно свои для каждого процесса я хочу использовать в нескольких работающих одновременно процессах (допустим, их очень много). В таком случае, если несколько процессов, использующих эту .dll работают одновременно, то для каждого процесса в его виртуальную память (далее ВП) загружается своя копия .dll, и при создании каждого процесса из исполняемого файла загрузчик вписывает адреса вызова функций в секцию с таблицей импорта? Или загрузчик достаточно умён, чтобы использовать единожды загруженную .dll между несколькими процессами? Или такое верно только для системных .dll, а для пользовательских - только MMF в отдельном гигабайте ВП?
>>978040Да, загрузчик достаточно умен и в Windows, и в Linux. Код и константы общие (плюс/минус релоки для 32-битных либ), секции данных у всех свои, если не указано иное.
>>978040>>978039http://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries/http://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/http://eli.thegreenplace.net/2011/11/11/position-independent-code-pic-in-shared-libraries-on-x64
>>978059>если не указано иное.Как указать иное? Значение characteristics в заголовке секции поставить на какой нибудь %shared%? И как в теории выглядит предоставление другим процессам функций из .dll, загруженный в первый процесс, через MMF?
>>978063Да, ты можешь указать IMAGE_SCN_MEM_SHARED в заголовке секции (или линкеру сказать /SECTION:имя,S). Это достаточно древний механизм, у него есть ограничения, поэтому удобнее использовать MMF, если хочется делиться данными.> как в теории выглядит предоставление другим процессам функцийНу несколько процессов используют одну и ту же страницу физической памяти. Страницы copy-on-write, если какую-то поменять, она станет частной. Примерно как в MMF, да.
>>978030Не политика, это просто пиктограмма пустыни>Opengl+Wayland, еще FreeGlutЯ так и не смог научиться программировать на вейланде и фриглуте, так что решил использовать опенгл+Xlib. Но вообще я так изначально планировал. Но дело в том что когда я использовал виндовс простите я и там программировал на видновс. И вот я делал программу, которая открывает картинки моего собственного формата, который я придумал. Ну вот написал в хекс эдиторе 25-байтную картинку, открыл, а там были лишние 4 жёлтых пикселя. Я подумал что это из-за того что опенгл это среда для 3D и поэтому оно мне так нарисовало. Какое решение этой проблемы?
>>975883f-a*e; - это что за хуйня?
>>978034не обращай внимание на поехавшего.
Посоны, Вы меня часто выручали, помогитеСейчас - сравнивается слово (массив) со словом из словаря (построчно). Могу ли я изменить код так, чтобы показывались слова не один в один, а похожие? Например, в словаре есть слово "хрен", "хрень" и "хреновый". Сейчас на выводе показывает только "хрен", а надо чтоб все вывел. Можно ограничить совпадение всего по 4 буквам https://ideone.com/8UQP9l
>>973297 (OP)Аноны, помогите долбоящеру (мне). https://pastebin.com/6ydZqPifНе обращайте внимание на стены кода. Проблема в том что у меня есть 2 глобальные переменные — u32 holst_x и u32 holst_y эквивалентно unsigned int holst_x и unsigned int holst_y, в функции main им присваиваются значения по 400. И вот в этой же функции в консоль выводит 400 400. Но вот в другой функции в консоль выводится 0 0. Какого фига? Как такое может быть, это же глобальные переменные и значения им присваиваются с самого начала.
>>978262та больной. ты их создал-продублировал локально.
>>978264огромный фейспалм мнеа тебе спасибо.
как в Xlib получить указатель на пиксельную карту или на какой-нибудь буфер кадра окна, чтобы я мог напрямую туда записывать пиксели?
>>978303Никак, икслибы больше нет в линуксах и бздях.
>>978374>Никак, икслибы больше нет в линуксах и бздях. А что там заместо?
>>978398радуга.
>>978398Ничего. У нас тут есть поехавший, который живет в альтернативной реальности. Раньше он был неймфагом, а теперь иногда шифруется.Что касается вопроса - создай контекст опенгл, натяни текстуру на квад, рисуй в текстуру.
>>978405Я так и делал, но потом до меня дошло что есть функция для записи сразу в буфер кадра. Я так и сделал. Я, вообще, пытаюсь сделать графический редактор. Но дело в том что и через текстуру и через запись в буфер кадра А каждый раз перезаписываются все пиксели это очень медленно. Я, конечно, сделал так чтобы картинка перерисовывалась только когда я рисую там мышкой. Но это всё-равно медленно. Я мог бы попробовать натянуть текстуру не на один квадрат, а на много и обновлять только те текстуры, на которых что-то рисуется, но это же не рационально. Я искал опенгловскую функцию для записи одного пикселя в буфер кадра и не нашёл. Сейчас у меня появилась идея попробовать замерять системное время и обновлять буфер кадра каждые 0.05 секунды.
>>978256бамп
>>978487Юзай strncmp
>>973297 (OP)Подскажите учебник, где описывается как сделать или как устроен простой графический редактор типа Pinta, Krita хотя они не такие уж и простые и надо именно для линукс.
>>978233>Я так и не смог научиться программировать на вейландеЗабей, никто не научился, кроме гномуразрабов
>>978442> опенгловскую функцию для записи одного пикселя в буфер кадраНерационально гонять в видюху данные по пикселам. Это максимальные тормоза, которые только можно придумать. Есть glTexSubImage2D для частичного изменения.И вообще, ты уверен, что у тебя отрисовка тормозит, а не обработка событий, например?> Подскажите учебник, где описывается как сделать или как устроен Очевидно, что можно пойти на гитхаб, открыть исходники и посмотреть. Заодно можно сходить на блендер посмотреть (если не страшно).> надо именно для линуксЯ бы первым делом написал прослойку, чтобы мой редактор не зависел от ОС (сейчас это как никогда актуально) и от графического API.
>>978031линуксоиды уровня /pr/
>>978493Напиши за меня
>>978683Нет
>>978627>Нерационально гонять в видюху данные по пикселамТак я как раз и гоняю по целым частям. Но это же гораздо медленнее. Приходится каждую иттерацию цикла заново отрисовывать картинку. Но когда я сделал так, чтобы отрисовывалось раз в 4 иттерации всё стало летать. Хотя всё равно есть проблемы.>пойти на гитхабЯ так и делал, но ничего не понял. Даже сами исходники не нашёл. Да и вообще я находил несколько десятков разных файлов, непонятно где код находится.>Я бы первым делом написал прослойку, чтобы мой редактор не зависел от ОСНо зачем если я в ближайшие десятки лет собираюсь использовать линукс? Если буду переходить на другую ОС, то это мне сначала надо создать процессор с моей собственной архитектурой, а на это мне понадабятся десятки лет. И только потом я буду писать свою собственную ОС для неё. А потом ещё пару десятков лет улучшать процессор, чтобы, например тактовая частота была хотя бы 1 GHz. И это, конечно же, в лучше случае. А так как это всё займёт лет 50 то надо бы найти способ как омолаживать себя, а на это нужны хуевы тучи денег, власти, человеческого ресурса, пойти против законов страны и так далее.
>>978684Ну, пожалуйста
>>978694Нет
>>978695Ну, пожалуйста
>>978698Нет
>>978700Ну, пожалуйста
>>978919Пожалуйста, соси хуй, быдло.
>>975883https://pastebin.com/VvNZuCeS
>>978932Пожалуйста, ты
>>978932Ебать спасибо тебе, я осилил.Пожалуйста, оставайся человеком.
Как в файле заменить 1 байт, сохранив все остальное содержимое?#include <stdio.h>#define ADDR 3#define VALUE 0xABvoid main(){ FILE* file; file = fopen("data.bin", "ab+"); if (file) { fseek(file, ADDR, SEEK_SET); fputc(VALUE, file); fclose(file); }}Хуйня какая-то выходит, fseek сука ебаная не работает, и байт записывается в конец файла. А если вместо "ab+" задать "wb+", то весь старый файл стирается.
>>979272rb+. Да, режимы файлов у fopen - наследие давних темных времен, и максимально непонятны для нормальных людей.
>>979272заебали дегенераты. тебе сложно man fopen сделать? идите, короче, все нахуй. хуй я сюда больше зайду.
>>979303Сделал тебе за щеку, проверяй.
>>979288>максимально непонятныТы настолько туп, что не понимаешь, что a это append?
>>979288> максимально непонятны для нормальных людей>нормальных людейТы сейчас про каких нормальных людей? Которые пивасик в подъездах хлещут или головой привыкли думать?
>>979375> Ты сейчас про каких нормальных людей?Которые не застали машины, на которых размер файла в фс не хранился, сами файлы писались "записями" и тому подобные веселые вещи, под которые, собственно и дизайнили fopen.
>>979386>не застали машины, на которых размер файла в фс не хранился, сами файлы писались "записями" и тому подобные веселые вещи, под которые, собственно и дизайнили fopenТы про рубистов? В мк правила не особо меняются
>>979400В мк часто обрезанная или самопальная либц, поэтому для работы с фс пишутся собственные велосипеды. И это очень часто не сишные стримы. Или пародия на них. Или поддерживаются только r, w и r+.
>>979386Где в дизайне fopen торчит то, что он не знает размера файла?
>>979413"a"
>>979416Нет.
>>979417Да. Сходи посмотри на досовый апи для работы с файлами, который с FCB (или на GET/PUT в бейсике, да и на OPEN тоже). Вот из тез времен у нас появился "a" и различие между "a" и "a+".
>>979421fopen дизайнили не для DOS, а для UNIX, ты обосрался.
>>979421Как "a" способно писать в конец файла при незнании размера файла?
>>979421>досовый апи>fopenУпитанно как-то
>>979425А где я говорил, что fopen дизайнили для дос? Я привел пример старого интерфейса, заточенного под работу с записями фиксированного размера вместо потока байтов. Раньше все дрочили на записи.> Как "a" способно писать в конец файла при незнании размера файла? "a" могла не работать и просто начинать запись с начала файла; "ab" могла начать писать с нового блока, оставляя мусор между реальным концом файла и позицией записи. Так давно никто не делает, но все это говно до сих пор в стандарте.
>>979482Т.е. ты кагбэ намекаешь, если бы не DOS, то вместо "a" можно было бы использовать seek в конец + запись?
>>979495> вместо "a" можно было бы использовать seek в конец + записьЯ тебе какбэ намекну, что в 75 году, когда в предке libc появился copen, в котором появился 'a', при попытке записи как раз тот самый seek и делался.А про DOS я тебе пояснил уже, заебал. DOS сам по себе тут ни при чем, его еще в проекте не было в те времена, гейтс развлекался написанием бейсиков.
>>979507>при попытке записи как раз тот самый seek и делался.Куда делался seek?
>>979527Туда же, куда и магнитные ленты, деда!
"Если у вас ничего не получается спрограммировать, то не надо расстраиваться, может вы просто используете библиотеки, написанные шизофрениками для других шизофреников" © some хороший человек
>>973297 (OP)не могу понять в чем ошибкаhttps://pastebin.com/BRF7ntaL
>>979821>if-elseполуёбок
Всем привет! А есть люди пишущие photonовские приложения (под qnx)? Если таковы имеются подскажите пожалуйста с помощью какого виджета выводить текст. Пробовал через multitext, но ему нужно передавать готовые строки, а мне нужно формированные. Кроме как сначала сформировать массив через sptintf ничего не могу придумать. Спасибо.
Какой компилятор поддерживает интеловский синтаксис ассемблера?
>>973297 (OP)Подскажите нормальную библиотеку для линукса, чтобы я мог пиксельные данные прямиком в память записывать.Я сейчас использую OpenGL + Xlib, икслиб выглядит как бред шизофреника, а опенгл неудобный, ведь у него координаты с плавающей точкой, как раз для 3D графики и мне приходится использовать функцию glDrawPixels(), которая перерисовывает всё окно, а это медленно. В икслибе я мог бы писать в пиксмап, но как это сделать если мне не даётся указатель на него, а лишь дескриптор?
>>979876Все. Если у тебя проблема с GCC, то -masm=intel.
>>979896> пиксельные данные прямиком в памятьВ какую память? Кто тебе мешает писать в память? Ты хочешь zero-copy? Не надейся даже.
>>979914В фреймбуфер я думаю.В опегл разве нет режима чтобы пиксели выводить?>>979896> библиотеку для линукса, чтобы я мог пиксельные данные прямиком в память записывать.Давн а чего ты на иксах вообще сидишь? Wayland + pixman.
>>973297 (OP)Сап. Лабодаун на связи. Вот задание: Вычислить значения всех переменных в заданном фрагменте программы при выполнении каждой строки. Для указателей следует указывать номер указуемого элементамассива и значение этого элемента. В цикле значения переменных и указателей следуетуказывать для каждой итерации цикла.Вот, собсна, в чем вопрос. Что делает 2 строчка, а именно цикл? С остальным вроде понятно.
>>980425upd: С циклом понятно. Что значит последняя строчка?
>>979972>Давн а чего ты на иксах вообще сидишьПотому что нашёл уроки по нему, это единственные либы, где я умею создавать окно и рисовать там опенглом. Пробовал SDL, но не понравилось. Очень странная библиотека. По вейланду уроков не нашёл.>pixmanспасибо, попробую.
>>980525Я тебе закину по вейланду книжку, не колхозься с иксами только
>>980527> по вейланду книжкуБесполезная трата времени. Сдох mir, сдохнет и вейланд за ним. А иксы как жили, так и будут.
Привет аноны, начал изучать Си и тут такая ошибка.
>>980541Ой иди нахуй, диванный кукаретик.>>980525https://jan.newmarch.name/Wayland/index.htmlВот держи.Если надо выводить окна с простой графикой пробуй FreeGLUT версию с гитхаба, она может в вейланд, все просто.А если пихать именно пиксели то pixman должен быть сильно быстрее как я понял.
>>980549> my funcНо это нихуя не you func, подумай.
>>980551my func это строка, почему printf ее не печатает
>>980549main - главная функция где работает код, суй тот принтф в main.
>>980552void main(void){printf("dash");}
>>980553а разве функции можно объявлять внутри main ?
вот опять
>>980550>Ой иди нахуй, диванный кукаретик.Это ты тот долбоёб, который писал, что не осталось ни одного тайлового менеджера с поддержкой иксов, все на вяленый переписали?
>>980549>>980556Просто иди нахуй с этого треда.
>>980556>>980549Это такой троллинг тупостью? Если нет, то твой текстовый файл должен содержать всякие декларации и 1 функцию, в которой идет работа. Ты можешь выполнять другие функции только внутри функции main(), а декларировать их и давать им дефиниции ты можешь в любом месте этого или соседних файлов
>>980570>Это такой троллинг тупостью?Да.
>>980570спасибо
Тупой вопросКакие ограничения есть для динамических массивов в Си?Типа ограничения только от ОС и компилятора? И какие они? Объясните суть
>>980574Вообще никаких.
>>980577Окей, тогда помоги ответить на вопросКак можно оценить максимальное количество элементов, которые могут быть созданы в динамическом массиве?это к Си относится
>>980579Чуть меньше нуля, очевидно же.
>>980580Что именно меньше нуля? Можно чуть более развернуто ответить?
>>980582Ну тогда точно меньше нуля.
>>980584Что меньше нуля-то?
>>980585Ой, всё.
>>973297 (OP)Есть массив :uint8_t buf[512];Можно с него как-то прочитать значение в переменную uint32_t?
>>980595memcpy
>>980579Чуть меньше, чем объем ОЗУ/sizeof(элемента).
>>980596Креативная идея, анон. Спасибоно у меня всё равно байты в порядке little endian, так что придется городить огород из сдвигов и побитовых ИЛИ
>>980577Кстати, а почему GCC поддерживает объявления типаScanf("%d", &x);Int A[x];А компилер майкрософта нет?
>>980602
>>980598А накладывается ли ограничение от компилятора?
>>980598Играет ли при этом роль подкачка?
>>980555Можно
>>980560Не он, но грубо говоря так и есть, иксы подыхают.
>>980541Двачую этого. Мало того, Vulkan тоже не жилец.
>>980601>Креативная идеяmemcpy — стандартный способ type punning-а; без нарушения strict aliasing.
>>980643Я был настолько толстым что уже просто вытекал из треда
>>980602> Scanf("%d", &x);> Int A[x];Потому что с дефолтовым компилятором майкрософта студия из Си поддерживает только то, что требуется для C++11/14 (то есть, почти все, но вот VLA в крестах нет). Зато с clang/c2 она отлично компилирует и твой код тоже.
>>973297 (OP)Какие же ебанутые числа с плавающей запятой! Неужели так сложно было сделать их нормальными, чёткими? Почему вообще им в конец добавляются сверхмаленькие дроби?
>>981593>Почему вообще им в конец добавляются сверхмаленькие дроби? Гугли стандарт IEEE754.>Неужели так сложно было сделать их нормальными, чёткими?Да, есть такие, это тип FIXED.
>>973297 (OP)Подскажите функции чтобы я мог перевести массив байтов с пиксельными данными RGB в джпеги, пнг всякие и всё такое.Загуглить не получилось.
>>981959magickwand
>>973297 (OP)Так, подскажите ньюфагу где я обосрался (на пике педовикия - сортировка выборкой) или это хуйня с 17 вижуал?
>>982046Ща мы всё бросим и побежим в говнокоде ньюфага копаться.
>>982078>в говнокоде ньюфага копаться. ловите ньюфага
>>981959libjpeg/libpng.
>>982095Не ловите, пусть себе съёбывает отсюда.
>>982046У тебя обмен элементов не в том блоке. Продолжай писать выражения с if в строчку и страдать.
>>982111Т.е. если if написать в 2 строчки, заработает?
>>982114Нет, но будет гораздо проще увидеть, что ты ошибся блоком, когда бездумно переписывал алгоритм из вики. А еще можно всегда ставить фигурные скобки, тогда еще проще читаться будет.
>>982115>НетА к чему ты написал> Продолжай писать выражения с if в строчку и страдать.?
>>982116Очевидно, что если написать всю программу в одну строчку, то структура станет гораздо менее наглядной, и заметить, что выражение попало во внутренний цикл, а не во внешний, будет еще сложнее. Заебал.
>>982117Что обмен попал не в тот блок заметно независимо от того, во сколько строк написан if. Ещё раз, к чему ты написал про if?
>>982115>>982117>>982118Ньюфаг репортинг, оно однохуйствено неработает, я чекал
>>982134Продолжай юзать ксор для обмена элементов :-D. Он ведь так замечательно меняет их местами, если i == min.
>>982139>Продолжай юзать ксор для обмена элементовНо ведь это так по-ксакепски. Все одноклассники обзавидуются.
>>982141По ксакепски менять в инкременте for. А в теле цикла только ламеры код пишут.
>>982139какой ты траль и молодец, чсв уже поднялось до небес?
>>973297 (OP)Аноны, посоветуйте опен сорс проекты на С. Нравится мне этот язык, хочу со временем перекатиться манямечты, но пока нашел подработку на пхп, жрать что-то надо. В свободное время попробую продолжать вкатываться в С.
>>982729https://whatcanidoformozilla.org/#!/progornoprog/proglang
>>982749Спасибо анон!
https://pastebin.com/ZtGztJqBНе получается сделать функцию для сохранения картинки зтп с помощью png.hGCC пишет что поинтер инкомпатибловый, но я непонимаю какой надо поставить. Не получается.gcc Grafinaize.c -o Grafinaize -lX11 -lGL -lpngGrafinaize.c: In function ‘save_img’:Grafinaize.c:151:15: попередження: passing argument 1 of ‘png_set_rows’ from incompatible pointer type [-Wincompatible-pointer-types]png_set_rows(si,sipi,rows);^~In file included from /usr/include/png.h:370:0,from Grafinaize.c:8:/usr/include/png.h:1907:1: зауваження: expected ‘png_const_structrp {або const struct png_struct_def restrict}’ but argument is of type ‘FILE {або struct _IO_FILE }’PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr,^Grafinaize.c:152:16: попередження: passing argument 1 of ‘png_write_png’ from incompatible pointer type [-Wincompatible-pointer-types]png_write_png(si,sipi,PNG_TRANSFORM_IDENTITY,NULL);^~In file included from /usr/include/png.h:370:0,from Grafinaize.c:8:/usr/include/png.h:2368:1: зауваження: expected ‘png_structrp {або struct png_struct_def restrict}’ but argument is of type ‘FILE {або struct _IO_FILE }’PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr,^Grafinaize.c:153:16: попередження: passing argument 1 of ‘png_write_end’ from incompatible pointer type [-Wincompatible-pointer-types]png_write_end(si,sipi);^~In file included from /usr/include/png.h:370:0,from Grafinaize.c:8:/usr/include/png.h:1456:1: зауваження: expected ‘png_structrp {або struct png_struct_def restrict}’ but argument is of type ‘FILE {або struct _IO_FILE }’PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr,^Grafinaize.c:154:27: попередження: passing argument 1 of ‘png_destroy_write_struct’ from incompatible pointer type [-Wincompatible-pointer-types]png_destroy_write_struct(&si,NULL);^In file included from /usr/include/png.h:370:0,from Grafinaize.c:8:/usr/include/png.h:1473:1: зауваження: expected ‘png_structpp {або struct png_struct_def }’ but argument is of type ‘FILE {або struct _IO_FILE *}’PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr,^
>>982889Это уже ни в какие ворота не лезет. man libpng. И называй переменные по-человечески.> но я непонимаю какой надо поставитьТебе компилятор чистейшим украино-английским языком пишет, что он там expected.
>>982783Вообще там сложные штуки клепают. Попробуй в гитхабе посмотреть раздел /trending/, там язык можно выбрать.
>>982889Героям слава.
>>973297 (OP)Анонасы здарова, дайте книгу или пособие или блять что-то что вмещает в себя все аспекты языка ну или хотя-бы что-то кроме основ и "воды" (низкоуровневый си, сетевое программирование)
>>984155>>984156>или блять что-то что вмещает в себя все аспектыBoku no Piko.
>>984157ты натурал?
>>984168А ты - нет.
>>984169сам
>>984170>этот школопидорЯсно.
Сап, прогач. Пояни, почему j+1 в %c формате выводится как / ?
>>984227Потому как 92 символ это слэш.
>>984228Блядь, вот я долбаеб, спасибо!
Сап, программач. Есть один говнокод, который я пилю, и по которому есть несколько вопросов:fscanf_s(fin, "%d"); - юзаю эту хню, чтобы пропустить при считывании одну цифру, которую я считывал заранее. Я этой хней таки проебал 2 бита в стеке, и вообще есть с нее утечка?Алсо, есть у кого простая и годная литература по WinAPI, чтобы даже такой аутист как я понял?
C# NEThttps://pastebin.com/dxESjpyV1>------ Сборка начата: проект: B, Конфигурация: Release Any CPU ------B.vb(38,9): error BC36595: Метод не может одновременно содержать оператор "On Error Resume Next" и определение переменной, которая используется в лямбда-выражении или выражении запроса.========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========Что делать, аноны?
>>984244утечка стека? что-то новое
>>982889ахвахпхвазхвзпвхазвзпвазпхgcc на украинскомАЗПХВАЗВПЗВЗАПВЗАВЗПЗВПА
>>984251> C#> On Error Resume NextЧего только не встретишь в треде по Си.
>>984251>тред по С>С# NET>фаил из-под шконки вижуал бейсика>полное описание ошибкиЗаписаться к офтальмологу
>>984363Т.е. ничего не утечет? Збс, буду дальше юзать эту функцию таким образом.Я эту штуку юзаю, чтобы открыть файл, считать шапку файла, в которой информация о необходимом размере массива, затем я файл закрываю, объявляю malloc-ом массив, снова открываю файл, пропускаю шапку, считываю игровую карту, отрисовываю.А все потому что загрузку я выделил в отдельную функцию, и я понятия не имею, как мне объявить нужного размера массив, не открывая файл 2 раза.
>>984413Карта у меня - массив чисел, инфа о размере массива есть в файле.
>>984413> Т.е. ничего не утечет?Там в формате звездочка, запрещающая присваивание? Тогда все норм. Нет звездочки - UB. А вот юзать _s - зашквар, скажи майкрософту -D_CRT_SECURE_NO_WARNINGS и живи спокойно, используя нормальные функции из стандартной библиотеки, а не эту ссанину.> годная литература по WinAPIРихтер, Фень Юань, потом Руссинович.> не открывая файл 2 разаПокажи пример. А вообще, fseek(fp, SEEK_SET, 0), а еще лучше rewind.
Ребята, что есть из IDE для ньюфагов?
>>985546Студия, Pelles C, Code::Blocks и всякие джаваподелия (CLion, Eclipse CDT)
>>985546Geany, потом можешь на Code::Blocks пересесть
>>985546Code::Blocks. Удобный, небольшой, GCC из коробки.
Семен в треде! Ладно, шучу.>>985638>GeanyЭт ж текстовый редактор вообще.Я сначала сильва поставил, но он от меня что-то постоянно требует и не хочет компилить.Поставлю тогда кодоблоки, спасибо.
>>973297 (OP)Я же надеюсь что gcc, когда переменная умножается или делится на 2, 4, 8, etc ставит в ассемблерных командах битовый сдвиг, а не mul. Это так?
>>985546gcc и командная строка.
>>985674Привет. Ты к нам из восьмидесятых? Да, гцц умеет оптимизировать код. Если интересно, можешь сходить на https://godbolt.org/ и посмотреть выхлоп.
>>985664> Эт ж текстовый редактор вообще.Ебал тя. На опенсурсе хорошо спасает. Умеет компилить.
>>985674Поиграйся с флагами оптимизации. gcc еще и не такое умеет.
>>973297 (OP)Можно ли из одной написанной программы вызвать другую или, например, ввести втроку в эмулятор терминала? И как?
>>986411> Можно ли из одной написанной программы вызвать другуюsystem() и прочие popen().
>>985546Visual Studio
>>986564+1
>>980541>>984251>>982889>>978031Обосрался с этого треда
>>985664>C>IDEОхуеваю с нынешних макак.
>>986594Не писал ничего крупнее хелловорлда - проходи мимо, используй ed и cc.
>>986617>Не писал ничего крупнее хелловорлда - проходи мимо, используй Micro-emacsПофиксил
>>986594Зачем насиловать себя вимами и емаксами, когда есть божественная Visual Studio с Clang/C2
Ананасы, поясните, когда линупсы перекатятся на Wayland, SDL 1 отрисовку делать уже не сможет? Он же через Х11 работает, я правильно понимаю?
>>985546Anjuta бери. Самый незамороченный и не кривой интерфейс.
>>986737>SDL 1 отрисовку делать уже не сможет?Ага, но во второй версии уже есть экспериментальная поддержка.
>>986737Поясняю: иксы совершенно никуда не денутся еще лет 20 минимум. В том очень маловероятном случае, если вэйланд взлетит, ты можешь продолжать пользоваться иксовым апи xwayland.
>>986742>если вэйланд взлетитФедору уже на вейланд вытащили так-то. А значит скоро гном и убунта тоже на него переедет.
>>986702>>986617Я, другой анон, пишу сейчас графический редактор и непонимаю о чём вы говорите. Уже более 400 строк говнокода, научил свою программу рисовать разными цветами и разными инструментами и изменять масштаб. Это считается хелловорлдом?Я gdb так и не научился пользоваться и незнаю зачем он нужен, что ещё за вимы и емаксы, о которых вы говорите тоже непонимаю. Использую gedit, gcc и эмулятор терминала, нафиг мне ваши непонятные IDE.
>>986749зачем юзать эти сорта говна?
>>986763> непонимаю о чём вы говорите> Уже более 400 строкВот будет 400 тысяч - поймешь. Пока ты сигнатуры функций своих помнишь и рефакторить можешь руками, и знаешь, в каком файле что определено, и не абузишь макросы - тебе вполне достаточно любого текстового редактора.
>>986782>будет 400 тысяч — поймешьЭто в каких же проектах столько строк? Приведи примеры. Я врядли когда нибудь дойду до такого, ведь я не собираюсь работать программистом.Даже если я буду писать собственную ОС, то уверен что у меня будет в несколько десятков раз меньше строк. Что там вообще нужно, не считая свистеловк-перделок? Пара десятков системных вызовов и обеспечение многозадачности с приоритетами.
>>986801http://www.informationisbeautiful.net/visualizations/million-lines-of-code/А я, конечно же, преувеличивал, остальную часть поста прочитай.
>>986857Щито? 2 миллиона строк кода для программы, которая выводит видосы в высоком качестве на XserverBox? 43 миллиона строк для кучки офисных программ?50 миллионов строк для IDE и 61 миллион строк для социальной сети?
>>986913Говнокодеры, сэр
>>986914Может они писали на ассебмлере и не использовали add, sub и dec?
>>986857А чего тут так много кода? Они в курсе что html, css и javascript это не языки программирования?
>>986932У мплеера 300+ тысяч строк. Это плеер без интерфейса, написан в основном на сишечке. Напиши это на крестах в более энтерпрайзном стиле, добавь столько же на интерфейс, которого в мплеере нет - вот тебе и 2 миллиона.
ПАМАГИТИ((99Есть строка (массив char), в котором написано словосочестание с разделителем "_" (потому что пробел в консоли почему-то проебывается и программа начинает жить своей жизнью, добра тому, кто пояснит за эту хуйню). Итак есть "Привет_мир" записанное в yobamasiiv[]Как мне разбить этот массив на два массива? С условием, что начало может быть разным:"Привет_мир_блять""Привет_мир_блять_есьжи""Соси_писос" "Двощер" (не надо разделять)можно ли давать этим новым массивам имена с автоматическим инкрементом, типа"massiv1[] = "Соси_писос" "massiv2[] = "Сам_соси"... "massiv99[] = "Нет_ты" Помогите, молю
>>987102Проебался с примером. Так правильнее:"massiv1[] = "Соси" "massiv2[] = "соси"... "massiv99[] = "писос" Короче мне нужно разделить массив на слова не зависимо от их количества слов
Как разделить массив с разделителем "_" на слова не зависимо от количества слов? Разделить - значит создать много новых массивов. Много - это количество слов.
Посоны, меня засмеял препод за язык СИ и поставил его наравне с паскалем. Ржал над древностью. Рили все так плохо или препод даун?
>>987104Делаешь массив указателей, делаешь strtok() в цикле. "Автоматической нумерации" массивов, конечно же, нету, но ты можешь использовать многомерные массивы, если тебе почему-то жизненно необходимо копировать подстроки или ты не можешь в указатели: char words[MAX_WORDS][MAX_WORD_LENGTH];>>987105Препод даун. Овердохуя кода на его компе написано на си.
>>987105Следующую лабу сдавай на хаскеле, параллельно пиши донос для начала в деканат о профнепригодности преподавателя.Упомяни что написал в центральные СМИ.Удачи!
char abc[1024] = "ХУЙ"char def[1024];как def приравнять к abc?
>>987117man strcpy
Двощ как записать в файл текст и сохранить БЕЗ ЗАКРЫТИЯ? он у меня во второй раз открываться не хочет, но суть не в этом, отвечай на сабж
>>987131fwrite(), fflush(). Закрывать вообще не обязательно - программа завершится, либц сделает fflush(), а ОС сама закроет файловый дескриптор, если что.
>>987131fsync
>>987133>>987132Не помогло, или я неправильно использовал.У меня есть файл, которым активно пользуется программа.Программа открывает файл, записывает в него, и закрывает (ИСКЛЮЧИТЕЛЬНО РАДИ СОХРАНЕНИЯ ТОГО, ЧТО ЗАПИСАЛА). Повторно открываться не хочет (fopen, fprintfm, fclose - все это у меня в цикле). Так надо.Есть для меня решение или вешаться нахуй, устал уже.
>>987145> закрывает (ИСКЛЮЧИТЕЛЬНО РАДИ СОХРАНЕНИЯ ТОГО, ЧТО ЗАПИСАЛАВвод-вывод в C - это тебе не программа Блокнот в винде, файл специально "сохранять" не нужно. Данные пишутся на диск, когда заполняется буфер, или когда ты буфер явно сбрасываешь fflush(). fclose() тоже делает fflush(). Алсо можно сделать setvbuf(fp, NULL, 0, _IONBF), отключив буферизацию, и тогда каждый сраный fputc() будет сразу писать на диск. А ты чего-то не понимаешь и что-то делаешь не так, или у тебя какие-то конфликты с другой программой, ради которой ты этот файл пишешь.
>>987131ебаць ббггее. дажи страшна представить шо ты за мокакий и шо за гавнакод на выдаеш на гора ббггее. и дажи дело ни в том, что атвет илиминтарен (хатя вапрос паставлен крива), а в том что ты рукажопый счастливчик абартария ббге
>>987061Двк, на крестах короче получится, тем более с наследованием, шаблонами и прочим.Как интерфейс для соснольки, у которого 3 кнопки и 2 индикатора можно уместить в оставшиесь полтора ляма строк — вот уж точно кек.
>>987250> на крестах короче получитсяТы просто не осилил современный ооп. Я раньше думал, что это болезнь джавы, но в последнее время все чаще на крестах подобное вижу. https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition> Как интерфейс для соснольки, у которого 3 кнопки и 2 индикатораНу иди посчитай кнопочки и индикаторы в SMPlayer, например.На самом деле я сам не знаю, как они в той диаграмме считали метрики, потому что проекты нихуя не опенсорсные. Может, они тесты/документацию тоже посчитали, хуй знает.
киньте задачник по c Пчтобы можно паралельно читать кериган и ритчи
Задачние
>>987251Может им сами компании сказали скоьлко у них строк?
Скиньте подскажите задачник по cЧтобы можно было паралельно читать кериган и ритчи
>>987163Я записываю с буфера массив строк в файл.Потом оперирую этим файлом.Массивов у меня много. и Каждый я должен записывать в файл затирая предыдущее его содержание.Как мне иначе поступить если не открывать-закрывать файл?
Хорошо, анон, как мне тогда завести вот такой код? В результате выполнения всей программы в файле должно быть 9 или 10for (i=0; i < 10; i++){FILE mytext = fopen("1.txt", "w"); //открыл файлfclose (mytext) // потер содержимое файлаFILE mytext = fopen("1.txt", "w"); //снова открыл файлfprintf(mytext,"%s", i); // записал свой текст fclose (mytext) // закрыл файл с сохраненным текстом}
>>987281Так при открытии через w файл сразу стирается, нет?
>>987285А я могу два раза открыть файл?
>>987322А почему нет?
>>987327Не закрывая после первого раза?И у меня файл затрется?
А можно fopen'ить два файла сразу?
>>987388Вернее, fopen'ить по очереди, но работать с двумя указателями на открытые файлы.>>987281> fclose> потёрТы когда открыл с "w" - тогда только потёр
>>987388А почему нельзя по твоему?
Есть кто?
>>987353Тебе ОС создаёт новый дескриптор. Собственно файлы и stdio это обертка над файловыми дескрипторами, можешь исходники поглядеть. Все зависит от флага, который передаешь. Я уже не помню их точное поведение.
>>987437Нахуй иди.
Сорян за глупый вопрос, но чет рили туплюКакой спецификатор типа нужно юзать в printf, что бы он выводил '_' и 'o' кусок из кода:https://pastebin.com/1VmuaNhe
>>987506а, все, нашел %ссорян ребят
Ребят, помогите пожалуйста. Нужно задать позицию игры в шашки, уже часов 5-6 сижу, в гугле все перебрал, нихуя нет как и идей, пробовал даже такоеhttps://pastebin.com/8BYtyua5Вроде бы спокойно задается черезint desk[8][8] Но хз, правильно ли я написал https://pastebin.com/veaj1bucКто знает как это делать, подскажите плс
>>987598Со второй ссылкой обосрался немног>https://pastebin.com/veaj1buchttps://pastebin.com/KDsryV5i должно быть так
>>987598>правильно ли я написалПока у тебя код уровня laba2 не еби мозги себе
>>987693Могут преподы доебаться, мол сделал не так, как показывали. Хотя, блджад, твой вариант и проще.
Поясните, пожалуйста, разницу между memcmp и strcmp, я как-то не вкуриваю.
>>987818memcmp сравнивает последовательности фиксированной длины, strcmp сравнивает до \0, strncmp сравнивает до \0 или лимита (в зависимости от того, что встретися раньше). memcmp быстрее всех, отлично оптимизируется по скорости, но не всегда применима.
>>987818>Поясните, пожалуйста, разницу между memcmp и strcmpБлять, скажи что ты толстишь
>>987819Благодарю.>>987820Просто хочу спать, а Laba_1.c сама себя не доделает.
Подскажите пожалуйста книгу по языку C (не С++) для начинающих программистов. Т. е. этакий самоучитель для нубов.Сколько не искал, а находил только те пособия, где ты уже должен иметь какой-либо опыт в программировании.
>>987962У нас временные проблемы с шапкой: http://piratepad.net/bJ1SdmkZyu вот тут полная версия. Можешь харвей какой-нибудь выбрать. Хотя K&R вполне для начинающих подойдет, ничего в нем сложного нет. Ну разве что Петцольда можно навернуть, если биты от байтов не отличаешь.
Господа, C нужен для вебмакакинга? И зачем он вообще нужен?
>>988825Для вебмакакинга не нужен.
>>988825Вообще не нужен.
Хэллоуворлдщик итт - хочу написать программу следующего толка:Вводится пара - три смвола и значение (например KLB 2), программа проверяет, сохранена ли там эта последовательности символов. Если нет, то она их записывает, и рядом пишет введенное число, если же символ с каким-то числом уже введен, то программа просто прибавляет введенное число к тому, что у неё в базе. На выходе должна получиться таблица типаXXX 24GSG 194...JFK 9 Вот не знаю, как такое провернуть, прошу помощи
>>989246Зависит от уровня твоих знаний.Если совсем дно, заводишь параллельные массивы: имен char seq[1000][4] и значений int values[1000]. При вводе значения в цикле идешь по массиву имен. Если не нашел значение - добавляешь в конец. Индекс используешь, чтобы что-то там со значением сделать.Если менее дно, можешь сделать массив структур вместо двух параллельных массивов.Если что-то знаешь про алгоритмы, сделай какую-нибудь сортированную структуру данных: словарик с хэшами или дерево, например.Если хочешь очень простое частное решение, и все символы - буквы в верхнем регистре, можешь просто считать эти символы цифрами позиционной системы счисления с базой 26 и использовать их как индекс в массиве (получается 263 = 17576 элементов, это не так уж много).
Анчоусы, есть некое подобие такой функции https://ideone.com/0KOl0sдля получения указателя на переменную по имени.В теории всё работает хорошо, но на практике используется BigEndian порядок байтов, и в итоге intChar нихуя значение не присваивается (точнее присваивается, но старший байт, а не младший). Как сделать так, чтобы работало?atoi не предлагать, ибо функция, вызывающая getPtr не должна ничего знать о типе переменной
>>989312> функция, вызывающая getPtr не должна ничего знать о типе переменнойНе знает - значит и писать она в нее не может.Ну можешь возвращать указатель на структуру, где кроме указателя на переменную есть еще и геттер с сеттером.Алсо, где ты нашел машину с big-endian?
>>989320>Алсо, где ты нашел машину с big-endian?Да есть тут MIPSовый проц. Инициализировать под big-endian не я его придумал.
>>989259Благодарствую
Подскажите компилятор си для ARM микроконтроллеров, или если gcc так может, то какие опции нужны?
>>989389http://gnutoolchains.com
>>989389Студия, гцц от linaro, сам собери кросскомпилятор из гцц, pelles c (старые версии) умел, clang опять же из коробки умеет, SDCC.
Привет, сишники. Есть статический массив строк messages, а есть макрос, который принимает целое число, и, используя его в качестве индекса, возвращает из messages определенную строку. Тут очевидно я задумал "инкапсулировать" массив строк, чтоб был доступ из других модулей только по макросу (макрос объявлен в том же хедере, где и массив messages).Проблема: собираю с помощью gcc с флагом -Wall. Так вот гцц ругается, что в других модулях, где инклудится этот хедер:warning: ‘error_messages’ defined but not used [-Wunused-variable] static char *error_messages[] = {Вопрос: что я делаю не так и как заставить гцц не ругаться? Может мальца переделать структуру проекта? Если кто не понял, в чем проблема, пишите, постараюсь еще раз объяснить.
>>989661>массив строк messageserror_messages
>>989661Если это внешняя переменная, то она будет торчать наружу, как ни выебывайся. Если это внутренняя (static) переменная, то она будет дублироваться в каждом модуле, куда ты подключишь свой хедер. Не страдай хуйней - создай отдельный файл, какой-нибдуь error.c, положи туда массив, а в хедере оставь extern const char ptr ptr error_messages, и похуй, что его видно отовсюду.
Как легко и быстро проверить, не является ли элемент одним из данных элементов? Проще, чем в цикле с массивом данных элементов. Мало ли, вдруг язык как-то по-другому может.У меня есть скобочки трёх типов, открывающиеся и закрывающиеся, не хочется для каждой отдельно && c!='}' писать.Упоролся для этого enum'ом, но что-то он не может в такое, или я плохо им упарывался
>>990030Нихуя не понял. Если тебе просто проверить, что скобочка, сделать strspn(str, "()[]{}"), оно скажет, что строка начинается с одной или нескольких скобочек. Вернет 0 - не скобочка.
>>990031Не, проверка не для строки, а для каждого отдельного символа строки.
>>990032Все равно нихуя не понял. Покажи пример.
>>990033Иди нахуй, дебил.
>>990033[{(52^2+1)7+2}^2+79]Считываю строку.Каждый символ чекаю на то, есть ли там скобачка*
в конечном счете разве все строковые функции поиска не сделаны через циклы?
>>990044Ыыы, т.е. мне написать функцию isbracket типа, и там проверять всё?
>>990045Настоящий программист не доверяет высокоуровневым оберткам которые непонятно как реализованы внутри и пишет все сам!
>>990050Золотые слова
>>990050...и пишет свою, кривую и медленную версию. Ишь удумали, библиотечные функции вручную на асме писать!
>>987962Я читаю C Programming: A Modern Approach, 2nd EditionПараллельно смотрю https://www.youtube.com/playlist?list=PLBB9FE6D60E6DDAD0По выходным смотрю cs50 на edx и выполняю, задачки выполняю оттуда. Опыта в погроммировании — 0.0. Пока все понимаю, уже начал присматриваться к сёру gcc в консоли и кое-что понимать.
>>990064Нелюди
>>990308А теперь перепиши с лукап-таблицей, как отец заповедал. Делаешь флаги типа:#define CHR_BRACKET 0x01#define CHR_OP 0x02#define CHR_DIGIT 0x04И делаешь массив для каждого символа в ASCII-таблице: unsigned chr_flags[128] = { 0, ..., CHR_BRACKET, CHR_BRACKET | CHR_OP, ... CHR_DIGIT };И проверяешь (учитывая, что с >= 0 && c <= 128). if (chr_flags[c] & CHR_BRACKET) { скопка }; if (chr_flags[c] & CHR_DIGIT) { цыфра }.
>>990310с >= 0 && c < 128, конечно же.
>>990310Извините, я только на второй главе K&R, я так не умею.
>>990312А, ну ок.
>>990313Помнится, я пытался скопилять с моей isdigit, а он мне выдал, что это переобъявление функции.Но ctype я не подключал, вот и подумал, а не кладёт ли Pelles C некоторые либы стандартные туда без моего ведома?
>>990314ctype может подключаться другими стандартными хедерами, а твоя функций быть несовместимой по прототипу. Ну или показывай ошибку, у меня на этой машине pelles c нет.
>>990323Допустим, функция, как на пике >>990308int isdigit(int c)Подключаю только stdio и math.Могут ли быть ошибки типа "redaclaration..."
>>990327Не поленился, сходил посмотрел. Нет, ошибок быть не должно. Видимо, у тебя прототип твоей isdigit конфликтует с реализацией. Или прототипа нет, реализация ниже вызова, и поэтому неявное объявление конфликтует с фактическим. Зделой прототип.
>>973297 (OP)Как в gcc сделать так чтобы библиотека "вживилась" в исполняемый файл? Чтобы можно было потом запускать при отсутствии этой библиотеки.
>>990462>static linkingВживил тебе за щеку, проверяй.
Допустим надо узнать скобка ли перед нами, как функция будет работать быстрее?bool isbracket(char c){switch c {case '(':case ')':return 1;default:return 0;}}Илиbool isbracket(char c){return c==')'||c=='('}
Что лучше использовать, например, в данном случае вместо intuint64_t, size_t, ptrdiff_t или что нибудь ещё?Не троллю, просто интересноfor (int i = 0, j = 0; i < 8; i++) { if (x[j] == 1 && x[i+1][j+1] == 0 ) return 3; }
>>990514вебм рандом если чо, просто взял случайный из папки
>>990514int8_t
>>990532uint8_t
>>990533>>990533Ну да, все таки с u лучше, ибо тут энивэй только положительные числаА почему 8_t, а не 64_t?
>>990472То есть нельзя? Остаётся только с помощью сторонних программ?
>>990557Тебе же написали "static linking", гугли, это то что тебе нужно
>>990557Собирай со флагом -staticgcc -static -o hello hello.c
>>990549Потому что в процесоре есть 8 битные регистры, они быстрее.
>>990495Я зашёл на https://godbolt.org/ , там вписал твои функции. Они занимают одинаковое кол-во команд. Но я незнаю сколько какая команд требует тактов процессора, да и, насколько я знаю, в разных комбинациях команд кол-во тактов может быть разным. Но во второй функции целых 3 (!) условных перехода, а у первой всего лишь 2. Насколько я знаю, после условных переходов процессор очищает из себя команды, которые шли после перехода, ведь в процессоре есть стадии декодирования, исполнения и всё такое, из-за чего программа медленнее работает.Вывод: Я предполагаю что первая функция быстрее, так как в ней на 1 переход меньше, чем во второй функции.
>>990514size_t. Если почему-либо нельзя его использовать, то любой signed тип.>>990549> Ну да, все таки с u лучшеХуже. Вкратце: с signed у компилятора больше простора для оптимизации из-за наличия переполнения у signed int. Подробнее:https://youtu.be/yG1OZ69H_-o?t=2357 (39 минута и далее, но лучше целиком).>>990567> 8 битные регистры, они быстрееПолная чушь. Медленнее практически на всех архитектурах, кроме восьмибитных.
>>990590спс, но компилятор выбирает их, они должны быть быстрее
>>990590Спасибо за развернутый ответ. Я в итоге и оставил size_t везде.И ещё один последний вопросстоит ли писать такint main(int argc, char *argv[]) Если программу запускать с консоли в любом случае не будут?
>>990598>стоит ли А точнее, есть ли хоть какой нибудь профит с этого?
>>990599Ну есть же стандартный вариант int main(void) еще. Профита нет, стартап сишной библиотеки все равно стандартный компилится, аргументы он все равно подготавливать и парсить будет.
>>990603Спасибо
>>984244> есть у кого простая и годная литература по WinAPIWindows via C/C++, Джефри Рихтер
>>990495На современных процессорах совршенноо похуй что там и как выполняется ибо данные операции занимают такое пиздецки мало время выполнения, что изъябываться и смотреть насколько пикосекунд там что выполняется быстрее сущее долбоебство.
>>990687А заодно после Рихтера можно блог Марка Руссиновича почитатьhttps://blogs.technet.microsoft.com/mark_russinovich/
>>990832>кукарику, современные процессары!Уважаемый, джава-господа и говноеды в другом треде. Здесь си-холопы, которые ещё пишут под ымбыдед, где процессоры с частотами до 100 мгц - нормальное явление.
ЕОП уровня "лаба-1", выполняет простенькие арифметические операции с элементами массивов, посоветуйте, как сделать возврат в начало программы без goto, этажи плахой стиль.
>>991254do .. while
Помогите пожалуйста, немного туплю в деревьяхНужно посчитать количество вершин в бинарном дереве на N- уровне, считая корень вершиной 0-ого уровняВот мой код:https://pastebin.com/07CkdF7sНе знаю, как написать подпрограмму для подсчета вершин, на ум приходит только такое:https://pastebin.com/BJTzEfg3
>>991271Ну да, так и считай. Можешь без рекурсии - у тебя там вроде как очередь реализована.
Пытаюсь освоить переполнение буфераЯ должен заполнить массив char своими адресами возврата, чтобы программа прыгнула на нужное мне место (пик1).проблема в том, что эксплоит работает в виде пик2 (не обязательно именно так, но допустим программа с дырой работает через командные аргументы), и символ, нужный для верного адреса - \x00, что является терминальным символом.Насколько я знаю, не существует способа передачи этого символа через аргументы.Конечно же, я могу переписать код, чтобы передавать не массив char , а скажем, массив интов или чего-то подобного, но это будет уже не то. Интересно, как поступать в ситуации, в которой есть именно эта дыра, код программы - пик3.Автор книги, Эриксон, для демонстрации использует никс, а там адреса с 0xffffffff идут
>>991275В пике три достаточно перезаписать authflag. Алсо, у нас little endian, поэтому ты можешь просто подобрать длину строки так, чтобы \0 пришелся как раз на старший байт перезаписываемого адреса возврата. Алсо, есть системные либы по старшим адресам, в которых нет 0x00 в старшем байте. Во времена до ASLR можно было собирать ROP-chain из их кода. Алсо, давай-ка ты с этими вопросами к соседям >>960640 (OP), раз уж есть теперь такой тред.
>>991282Да, я примерно так и хотел, один раз такое пронесет.Ну, я имел ввиду более общий случай, к примеру, когда есть адрес как на пике.Пойду и там спрошу.
>>991286Значит ищи другой адрес. Нет серебряной пули, каждый эксплоит - искусство и требует особого подхода.
>>991273>очередь реализованаДаА как лучше задавать сам список в файле?
>>990573Спасибо, забываю вечно этот сайт. Ты может в глаза долбился, но в свитч-кейсе на пару строчек ассемблера больше. А с оптимизацией - одинаково.
Аноны, поясните, вот у меня есть буфер, скажем на 10 чар: char buf[10], пусть изначально забит символом '3'.Я считываю строку scanf("%s", buf), скажем "hello", потом в цикле просто вывожу все символы буфера(printf("%c", buf)), и получаю что-то вроде hello33333. Собственно вопрос: а где блять символ конца строки? Когда я пишу что-то вроде printf("%s", buf), то он выводи "hello", а не hello33333. Как так получается?
>>991547А как по-твоему printf должен отобразить символ конца строки?
Если я буду использовать имена, которые у меня есть в main и других функциях для аргументов новой + переменных внутри функции никаких, абсолютно никаких подводных камней тут не будет?простите за нюфажный и глупый вопрос, который можно было бы нагуглить очень легко, вероятно
>>991547Спецификатор %s в scanf читает до следующего пробельного символа (пробел, символ конца строки и т. п.). Этот символ в буфер не попадает, зато в конец буфера пишется \0.Спецификатор %с у printf выводит указанный символ. У тебя выводятся h, e, l, l, o, потом \0, которые эмулятор терминала обычно отображает как пробел, потом 3, 3, 3... Спецификатор %s выводит строку, строки в Си заканчиваются \0, поэтому выводятся символы h, e, l, l, o, потом идет \0, он не выводится, и на нем вывод заканчивается.Хочешь символ конца строки - выводи его, блять.>>991582Что такое области видимости тебе рассказали? Если в пределах области видимости переменной ее имя уникально - все ок, абсолютно никаких подводных камней. Если имя неуникально, может быть как ок, так и совсем не ок, но не существует ни единой причины писать код, в котором имена объектов перекрываются.
>>991547>и получаю что-то вроде hello33333.Нет, получается "hello3333". Вот как раз не отображённый десятый символ между hello и 3333 и есть твой NULL. Можешь сделать (printf("%i", buf)) и увидеть 0 на шестой позиции.
>>991616Мм, кстати, от сканфа, кажется, в stdin остается какой-то мусор. Если написать в коде scanf, а потом getchar(), программа не будет дожидаться выполнения последней команды, потому что в нее попадет остаток из стандартного ввода.
>>991692Молодец.Возьми с полки fflush().
>>991692> от сканфа, кажется, в stdin остается какой-то мусорОстается конец строки.>>991695Ты имел в виду "возьми с полки UB"?
Братишка, я тебе покодить принес:http://www.ethoberon.ethz.ch/oreport.htmlССЫЛКИ ДА С ТАКИМИ-ТО NULL'АМИ!
>>991861ВНИМАНИЕ! В ТРЕДЕ СЕКТАНТЫ! СОХРАНЯЙТЕ БДИТЕЛЬНОСТЬ! НЕ ПОДДАВАЙТЕСЬ НА ПРОВОКАЦИИ!
>>991861Писал на учебе на обероне. Приятный язык, но не удивлен что он не стал популярным - сложноват для макак.
>>991550Как пробел или 0>>991616>Хочешь символ конца строки - выводи его, блять.Алло, я же написал, что в цикле печатаю %c>>991626Спасибо, уже понял. Не внимательно пересчитал кол-во символов>>991695>Возьми с полки fflush().flush не работает для stdin. Единственный более-менее метод который я нашел, это while((c = getc()) != EOL && c != '\n'); Минус такого способа - если инпут уже пустой, то программа зависнет, пока что-нибудь не нажмешь.
Есть одна консольная утилита для линуха. Хочу прикрутить к ней интерфейс с парой полей для вода, кнопок и окном вывода инфы:Этот интерфейс должен уметь всего-то:1) Передавать утилите через соответствующие ключи значения, введенные в соответствующие поля.2) Передавать вывод утилиты в окошко. Вот и все, что мне нужно. Хочу сделать на QT, но я в ГУИ не силен. Может кто направит на гайд, где объяснено, как сделать подобную херь?
>>991979См. в сторону popen() для простейшего варианта взаимодействия с порождённым процессом.
>>991979В простейшем варианте код будет вращаться вокруг вызова вот этой функции:https://www.tutorialspoint.com/c_standard_library/c_function_system.htmНа сайте QT есть много примеров и пояснений написания кода
>>992004Дебил, ты читать умеешь?> 2) Передавать вывод утилиты в окошко.Твоя system() этого сделать не позволяет.
>>991979>Хочу сделать на QTА хуле ты делаешь в этом треде?
>>992033Можно писать основную часть на Си, а интерфейс на крестах. Мало того, это единственный выход, если хочется кроссплатформенности, учитывая, как уебищно выглядит и работает Gtk в винде.
>>991968> Как пробел или 0С чего это вдруг? Символ конца строки он на то и символ конца строки, ему не нужно отображаться, лол.
>>973297 (OP)Сап.Есть одна формула.Мой конечный вывод по ней, как пример:9 + 2х + 3хх - 4хххЕсть ли способ вывести в консоле не так, а так:9 + 2х + 3х^2 - 4*х^3
>>992084Ебучая разметка, между иксами знак умножения *
>>992085Если консоль поддерживают юникод (читай: у тебя линукс с xterm), я могу тебе отсыпать степеней: ⁰¹²³⁴⁵⁶⁷⁸⁹, можешь копировать прямо отсюда. Если не поддерживает - нет, ничего не сделать. Можешь в .png рендерить, лол.
>>992105Понял.Я погорячился с вывод. Как сделать, чтобы выводило с иксом, чему присвоить икс? Я пробовал такchar x = 'x'; Но ничего не меняетсяВот сам цикл с https://pastebin.com/dyAZE3j1
2ch, я что-то не могу понять, почему у меня выдаёт ошибку?char str[5] = {'ы'}; ошибка: сужающее преобразование «53643» из «int» в «char» внутри { } [-Wnarrowing] char str[5] = {'ы'};
>>992202Исхдник в UTF-8, русский символ в UTF-8 представлен двумя байтами. В результате у тебя символьная константа из двух байтов. В языке такого нет, но есть распространенное расширение стандарта, позволяющее считать такую символьную константу как (x << 8 | y). Результат не влезает в char, и как раз об этом тебе и пишут. Смени кодировку файла на Windows-1251, например, или смени подход целиком.
>>992205>Смени кодировку файла на Windows-1251Спермовор, плиз.utf-8 лучшее, что изобрело человечество, а он предлагает есть однобайтовое говно.
>>992202char str[5] = u8"ы";
Как читать строку неизвестной длины? Задача такая:скрипт на питоне будет запускать мою программу и посылать ей строки (много строк переменной и неизвестной длины). С помощью каких функций я могу оформить их чтение?
>>992256getchar+realloc, а ты как думал.
>>992259>realloc, а ты как думалЯ думал, что уже есть библиотека BoostQTCLRSTXXL v190.134beta, которая все это сделает за меня. Я не хочу в 2017 году писать реаллоки.
>>992263Какой в жопу буст, на название треда посмотри.Впрочем, в каком-нибудь glib наверняка есть что-нибудь.
>>992259ПРИШЛО ВРЕМЯ ОСВОБОДИТЬ ПАМЯТЬПАМЯТЬ САМА НЕ ОСВОБОДИТСЯОСВОБОДИ ЕЁ, ОСВОБОДИ ЕЁ ЕЩЕ РАЗ ЗАЧЕМ МНЕ НУЖЕН ХАЧКЕЛЬ, У МЕНЯ НЕТ ВРЕМЕНИ ЧТОБЫ ЕБАТЬСЯ С НИМЛУЧШЕ ЕЩЕ РАЗ ОСВОБОДИТЬ ПАМЯТЬЯ ОСВОБОЖДАЮ ПАМЯТЬ ПО 3 РАЗА В ДЕНЬКАЖДОЕ ОСВОБОЖДЕНИЕ ЗАНИМАЕТ ДВАДЦАТЬ НАНОСЕКУНДЯ ЖИВУ АКТИВНОЙ И ПОЛНОЦЕННОЙ ЖИЗНЬЮЯ УСПЕШЕН И ПОЭТОМУ ЦЕЛЫЙ ДЕНЬ ВЫДЕЛЯЮ ПАМЯТЬА ПОСЛЕ ЭТОГО ОСВОБОЖДАЮ ЕЁТУПЫЕ ХАЧКЕБЛЯДКИ ОДЕРЖИМЫ МОНАДАМИА Я СВОБОДНЫЙ ОТ ЗАДРОТСТВА ЧЕЛОВЕКTEMPLATE <CLASS BAZ> BAR FOO<BAZ>::DOWORK()int s=((12<<5)&(2^(21-(4|4)2)^1024))==0?1:0 ЛУЧШЕ Я ВЫДЕЛЮ ЕЩЕ РАЗ ПАМЯТЬИ ЗАБУДУ ОСВОБОДИТЬ ЕЁ, СТАБИЛЬНОСТЬ НЕ НУЖНАЯ НЕ ОСВОБОЖДАЛ ПАМЯТЬ НЕДЕЛЮПОЙДУ ОСВОБОЖУВ C++ ВСЕ ПРОСТО И ПОНЯТНОSEGMENTATION FAULT. ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬПРИШЛО ВРЕМЯ ОСВОБОДИТЬ ПАМЯТЬКОКОКОКОКОКОКОКВИКСОРТ КОНКАТЕНАЦИЯ ЗА O(1) INLINE ASSEMBLERКОКОКОКОКОКОКО
>>992263>Я не хочу в 2017 году писать реаллоки. А я хочу, могу и буду.
>>992256fgets() в цикле, чего тут думать-то. Если в буфер строка не влезла, дочитывать следующим fgets().
>>992256так сделай чтобы твой скрипт на питоне отправлял количество символов сперва
А имеется ли в Си какая-нибудь программная реализация стека, или мне пилить костыль?
Сап, Си, я залётный. Объясните мне, зачем вы кастуете результат всяких системных функций, если не присваиваете значение?
>>992312> программная реализация стекаДа ты охуел. Реализуй. Декремент и инкремент в наличии, больше ничего не нужно.
>>992315Каст к войду говорит компилятору, что ты намеренно не используешь возвращаемое значение функции. Иначе некоторые особо дотошные компиляторы ругаются.Я лично считаю, что предупреждение на этот случай нужно подавлять ключами компиляции целиком, потому что особого толку от него нет. А расставлять касты - долбоебизм.
>>992316Ну я хочу стек как в Форте, но реализация остановилась моей рукожопостью в области указателей.
>>992321> моей рукожопостью в области указателейНе знаю, что там в форте, но для реализации стандартного стека, аналогичного машинному, нужен массив и лишь один индекс.
Создаю char-указатель на область памяти, но пишу туда не char'ы, а wchar_t'ы. Теперь я хочу вывести в консоль эти символы. Как мне преобразовать указатель?
Есть ли хороший учебник для начинающего программировать, в которой используется C? Хочу дать именно C, чтобы байтоёбство и все прелести, которые помогут получше понять работу машины. Есть, конечно, ещё Страуструп со своими принципами и практиками, но там байтоёбство начинается гораздо позже, чем её уже пора дропать.
>>992345Нихуя не понял.char ∗chars = ...;((wchar_t ∗) chars)[0] = L'x';((wchar_t ∗) chars)[1] = L'\0';printf("%ls\n", (wchar_t ∗) chars);Это?>>992346Прата или K&R, чтобы узнать язык.
>>992347Точно, у Праты же и по Чистому™ есть. А если Отцов™, то что к ним в качестве пособия по программированию как таковому?
Кроме очевидного SICP'а, конечно.
>>992345http://www.cplusplus.com/reference/cwchar/wprintf/
>>992315>>992320это сообщение другим программерам, что мы намеренно игнорируем статус выполнения функции
>>992347>Это?Я уже решил методом копипасты со стаковерфлоу. Что у тебя написано я не понял, но уже и не важно.
>>992345> Создаю char-указатель на область памяти, но пишу туда не char'ы, а wchar_t'ы.Продолжай в том же духе. Ведь стрикт алиасинг это какая-то непонятная ненужная хуйня.
>>992381Да. Стрикт алиасинг - ненужная хуйня, делающая из сишечки какую-то сраную джаву. Не случайно все крупные проекты, которым нужна байтоебля, делают -fno-strict-aliasing.
>>992391Алсо, я бы предпочел, чтобы комитет одумался и оставил для алиасинга только opt-in в виде restrict. К сожалению, там сидят пидоры, которые хотят убить язык.
Ребят, спрошу по С++, только не бейте, ок?Какой самый вменяемый и короткий способ заставить switch-case работать с переменной string? Разбивать в массивы - нечитабельно. Присваивать через if численное значение какой-либо другой переменной и заставить switch-case оперировать с этим - долго. Неужели нельзя заставить работать напрямую? Читал, есть С++11, но где найти компилятор, который будет поддерживать этоо?За ссылку на с++ тред буду благодарен, как и на вменяемый ответ по теме, наверняка же итт не одни чистые сишники
Я вот не пойму, в С есть классы-объекты и все это говно, на нем пишут игори, но это не ООП. Поясните почему
>>992414g++ -std=c++11Иначе либо вязанка ифов, либо считай хеш.
>>992416что ты не поймешь?
>>992419Классы, объекты это же ООП, но С это не объектно-ориентированный ЯП. Почему?
>>992420Ты можешь программировать в ООП стиле на С, но для этого тебе нужно будет бороться с языком.
>>992422Тогда нахуй он вообще нужен?
>>992423Кто "он"?
>>992416>в С есть классы-объекты и все это говноНету. Если так нужно - берут glib
>>992632 (OP)>>992632 (OP)>>992632 (OP)>>992632 (OP)>>992632 (OP)