Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь https://ideone.com/#, https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.Что читать:- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf- man/Dash/zealdocsЧем компилировать:- Очевидный GCC.- clang: оче годно, батя рекомендует.- Intel C++ Compiler: оптимизации, тысячи их.- Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.Что еще почитать:http://c-faq.com/FAQ из comp.lang.c. Древний, но все еще актуален.Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.Ben Klemens "21st Century C: C Tips from the New School" (2012)Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdfЕще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_Chttps://github.com/kozross/awesome-cОнлайн-утилиты:- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.Прошлые треды:- №52: http://arhivach.ng/thread/529928/- №53: http://arhivach.ng/thread/529929/- №54: http://arhivach.ng/thread/535256/ >>1610764 (OP)
Вкатился, возможно с платиной. Собственно, сабж: https://godbolt.org/z/e8ZjvwГде я должен делать проверку? В foo или bar? Или в обеих? Вообще нужны ли эти проверки, если есть аннотации? Дискасс.
>>1634117> возможно с платинойДа. Проверяют возвращаемые значения, в данном случае - результат malloc(). Многие проверяют и при использовании, но по мне так для аргументов достаточно assert() вкатить (и то нахуй не нужно), если это не внешняя функция, которая реализует интерфейс модуля. Вот для внешней надо проверять все. Алсо, обработать ошибку выделения памяти правильно очень сложно, и в каком-нибудь консолеговне проще всего сделать обертку уровня if (!malloc()) exit() и не думоть.
>>1634198В книжках у тестеров что то такое попадалось.Функция получает что-то на вход и выдает выходНадо поделить все множество возможных входов на уникальные классы.Например, ты пишешь parseFloat(const char*). 3.0 и 4.0 будут в одном уникальном классе, 3.0, -3.0, 3e-1, Inf, zhopa - в разных.Значит надо проверять такие ситуации, как:null, пустая строка, строка с правильным числом, строка с неправильным числом. Решить к чему относится строка из двух чисел. Решить к чему относится строка, начинающаяся с числа, но заканчивающаяся мусором.Сами категории тоже надо подразделять.Правильные числа - проверять целые числа, вещественные числа, отрицательные числа, научную запись, NaN, Inf и т.д. Решить что будет если в начале два плюса, если после числа пробелы, если после плюса пробел и т.д.Неправильные числа - проверять что будет если подать очень длинное число, что будет если подать перед числом плюс и минус, или два минуса
>>1634624Забыл дописать - когда у тебя будут уникальные классы, надо проверять граничные случаи, например тебе не надо проверять все положительные, а только граничные - 0.0, 1.0, 1.175494e-38, 3.402823e+38...
>>1634624Это понятно, да, но как тесты оформлять? Писать программу, влючать в неё .с файл, который хотим проверить, и там вызывать функции с заранее определённым входом и ожидать от них определённого выхода?
>>1634728Может и есть, но мне хочется tests first approach опробовать, как в tdd. Просто на маленьких учебных задачках. Валгринд для этого разворачивать как-то несуразно.
>>1634725Можно просто почти как в питоне:#ifdef TESTint main(void) { ...}#endifИ потом cc -DTEST file.c Для либ очень даже норм.
>>1634777Мне не хотелось бы держать это в одном файле, если честно. На мой взгляд так будет некрасиво. Наверное, поступлю как написал выше. Сделаю отдельный .с, в который тупо инклудом буду брать программу, и проводить тесты.
>>1634732Не валгринд разворачивать, а использовать фреймворкиhttps://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#CНапример cmocka (выбрал от балды, сам выбирай)https://lwn.net/Articles/558106/Пишешь c- файл с тестами, и отдельно собираешь бинарник, в котором указаны твои нужные c-файлы, и файл с тестами.
Анон, хотел бы ты женщину-программиста со знанием языка Си?https://www.youtube.com/watch?v=T8Yqaol_A5YИли лучше С++?
>>1637424месяц, дальше забываешь про дроч языка и достигаешь просветления через прикладнуху (юниксовые проги с продвинутым функционалом, всякие байтоебские кодировщики пишешь), иногда "повышая квалификацю" годным чтивом про хорошие практики
>>1634080 (OP)У кого есть время, и нефиг делать - помогите зафиксить uTox для XP!https://github.com/username1565/uTox_winXPА то хуле он конпелируется, но не пашет? Понять не могу.Разрабы отказались от поддержки Windows XP,поэтому приходится извращаться со прекомпилированными бинарниками,заменяя ноды при помощи JavaScript: https://github.com/username1565/uTox_winXP/releasesМожно было бы декомпилировать эти бинарники и получить рабочий исходник,но я Си не знаю, просто форкнул проект, добавил либы,и описал процесс компиляции, под Windows XP, вот здесь: https://github.com/username1565/uTox_winXP/commit/cd23deef631183178d113cbac2dd1812f547fd85А теперь люди жалуются, что бинарник не пашет, а я в душЕ не ебу, чё он не пашет, блядь.
у меня переполняется значение, измнения типа данных на long, long long, unsigned long и т.д. не помогает почему-то. Что делать? Как сделать так чтобы он верный результат давал?
>>1634080 (OP)Анон, можно ли как-то хранить имена типов данных в переменной?К примеру, в функцию приходит void-указатель на какое-либо значение (может быть вещественное число, целое и т.д.).Для того, чтобы из void получить значение мне необходимо совершить приведение типов, в случае с целыми числами это (int )(void ptr)Вопрос: а можно ли хранить имя типа в переменной, для того, чтобы писать: (type_name )(void ptr)?
>>1639020Сейчас вот задумался, что это немного противоречит архитектуре языка программирования, хех. Ведь, по сути, речь идет о хранении ключевых слов в переменной.
>>1639020Воздержись от void* без крайней необходимости.Язык тебе дал перегрузки функций fun(int), fun(float)Еще можно передавать тип вторым параметромenum { INT_TYPE, FLOAT_TYPE }fun(void_ptr, INT_TYPE)В C++ можно было бы на шаблонах что то нагородить fun<int>(ptr), fun<float>(ptr)>>1639024Это нормально, в более высокоуровневых языках есть рефлексия, но она всегда требует большого оверхеда.
>>1639060Погуглил, в 2011 году добавили какую-то шляпу _GenericВозможно с ней можно что-то такое делать.https://stackoverflow.com/questions/479207/how-to-achieve-function-overloading-in-c
>>1638982>>1638867всё норм, но в консоле попрежнему результат некорректно отображается. помогите, молю.https://pastebin.com/94FcGuU5
>>1639126Ну она через return идёт, там вроде автоматические преобразование любых типов к обычному int со знаком идёт. Я конечно не про, но я бы просто в принт это сделал и всё.
>>1639178Двачуюhttps://en.wikipedia.org/wiki/Exit_statusWindows uses 32-bit unsigned integers as exit codes, although the command interpreter treats them as signedВ линуксе тоже вроде код возврата 32 битный, более того в некоторых частях системы он вообще 1 байтный.
>>1639321Есть msys+mingw32, а есть msys2, где много всякого, в том числе mingw-w64. Фактически msys - это окружение (и инсталлятор), компилятор вообще можно отдельно ставить, если ./configure не интересует.
Делаю учебную залачку из праты. Есть бинарное дерево, в каждой ноде лежит имя животного в массиве, и лист с их видами. Каждая ячейка листа тоже массив. Хочу вывест на экран содержимое ячейки. У листа есть опция перебора всех ячеек и применения функции к ним. Хочу вывести имя пета рядом с видом для этого пишу функцию, которая принимает содержимое ноды дерева, делает функцию для печати содержимого ячейки листа и перебирает лист. vscode на такое жалуется (пишет, что ожидал ;), а gcc спокойно компилирует и это работает. Я правильно понимаю, что это какое-то расширение от gcc и так делать не надо? И как делать тогда надо, чтобы нужное число строк печатать для любого списка в ячейке?
>>1639525А как тогда печатать для каждого вида животного его имя? Имя нам известно один раз, в ноде дерева, потом мы передаём управление листу, чтобы он сделал void showPetKind(ListItem kind) { printf("%s\n", kind.petkind); }над каждой ячейкой. Как передать ему ещё и и имя? Или менять функцию void TraverseList(const List plist, void (pfun)(ListItem item));чтобы она вместо void (pfun)(ListItem item) принимала void (pfun)(ListItem item, char *petname)?
Доброго времени суток. Что аноны могут посоветовать по англоязычной литературе, чтобы в кратчайшие сроки въехать в C, если уже имеется достаточный опыт работы с C++?Хотелось бы книгу, которая была бы ориентирована не на совсем зеленых, но и не была слишком техническим материалом (как The C Programming Language). Подумываю взять Дейтелов. Что скажете, нормально или слишком много базы?
>>1639541Тащемта можно объявить функцию внутри функции, но определять вложенную функцию нельзя. Это значит, что ты можешь написать прототип функции внутри другой функции, но определение обязан писать вне функций.
>>1640210>если уже имеется достаточный опыт работы с C++?По моему проще загуглить на stackoverflow разницу между c и c++
>>1640398Ну с какой целью? Ты же сидишь в СИ треде значит учишь его или уже владеешь им и пишешь на нём что-то.
>>1640399Не понимаю вопроса. У С должна быть какая-то особенная цель? Или ты сидишь в программаче и недоумеваешь, зачем люди программы пишут?
Освоил побитовые операции в си, ну понял как это работает устроено. Аноны, молю поясните мне ньюфане на пальцах ну где примерно это можно применять на практие? ну интересно пиздец. Душные мудаки которые будут нарочит односложно и неопределённо отвечать не пишите мне. Я знаю здесь анон был хороший который мне задачи помогал решать который мне алгоритм переполнения хороший показал. МОЛЮ ОТЗОВИСЬ
>>1640426>побитовые операции в сиПобитовые операции везде одинаковы и вообще это математика>где примерно это можно применять на практикеБитовые поля и матрицы используются в логике приложения ради перформансаКроме этого только в кодировке>Душные мудаки Ты сам душный долбаеб неосилятор плачущий на мылочах вместо чтения полторых статей
>>1640426Мигать светодиодами на чипах.Да везде блджад. В хэшах, в наборах которые сеты, в crc32, в проверках четности, в псевдорандоме, во всяких быстрых делениях, округлениях, извлечении корней.Вообще вопрос уровня где используется вычитание.
>>1640432Спасибо тебе тоже, анчоус за ответ, у тебя более разврнутый чем у предыдущего анона.Алсо >Мигать светодиодами на чипах.да когда-нибудь я научусь писать драйвера и программировать микроконтроллеры как же я буду отрываться и эксперементировать. спасибо, анчоус ещё раз.
>>1640432Мне очень понравилось в ручную это просчитывать если честно побитовые операции. Я даже себя проверил по всем пунктам. Это то чего я ожидал от программирования. Помню когда в веб 2 года назад вкатывался искренне охуевал и думал что это за гавно унылое. А тут прикольно люблю когда всё так разобрано до винтика прозрачно и понятно, низкуровневость это охуено, если помечтать уже то может быть когда-нибудь я вкачу своё ньюфажное ебало и в ассемблеры
>>1640434Есть крутая книжка Алгоритмические трюки лоя программистов. Конечно сейчас процессоры с набором инструкций поьогаче и компиляторы стали поумнее, поэтому она менее актуальна, но там про это.
>>1640328Понятно, что можно объявить, вопрос не в этом. Вопрос, как получить желаемое поведение без применения nested functions? Потому что с ними очень удобно в две строки это получилось >>1639510, так как гцц разрешает.
>>1640434>>1640426Это чтоли до сих пор тот вкатышь который здесь с января срёт своими идиотскими вопросами и просит проверить задачи из кернигана? Когда ты уже отсюда съебёшь то.
>>1640656Кастомизированные сорцы Quake 3 (причесали структуру, добавили +- современные GAPI) от создателей CPMA.На С.
>>1637594>достигаешь просветления через прикладнуху (юниксовые проги с продвинутым функционалом, всякие байтоебские кодировщики пишешь),Откуда всё это брать? Читал Дейтеллов последние главы типы данных (списки, стек), препроцессор. работа с памятью, goto - на всё это по несколько страничек и конец. Как детектив на самом интересном месте обрывается.
не получается извлечь данные#include<stdio.h>#include<json-c/json.h>int main(int argc, char argv) { FILE fp; char buffer[1024]; struct json_object parsed_json; struct json_object depth; struct json_object azimuth; struct json_object *inclination; fp = fopen("test2.json","r"); fread(buffer, 1024, 1, fp); fclose(fp); parsed_json = json_tokener_parse(buffer); json_object_object_get_ex(parsed_json, "depth", &depth); json_object_object_get_ex(parsed_json, "azimuth", &azimuth); json_object_object_get_ex(parsed_json, "inclination", &inclination); printf("depth: %10.19f\n", json_object_get_double(depth)); printf("azimuth: %10.19f\n", json_object_get_double(azimuth)); printf("inclination: %10.19f\n", json_object_get_double(inclination));}сам json файл:[ { "depth": 0.6095999999999999, "azimuth": 4.60560973674798, "inclination": 0 }]выводит:depth: 0.0000000000000000000azimuth: 0.0000000000000000000inclination: 0.0000000000000000000что делаю не так?
>>1640774Ну очевидно же, что у тебя массив объектов, а работаешь ты с ним как с одним объектом. Воткни после json_tokener_parse:parsed_json = json_object_array_get_idx(parsed_json, 0);
Анончик, который тут про побитовые спрашивает, задачками грузит, про эмбеддед мечтает и тому подобное. Я с тебя, конечно, люто проигрываю, но добра тебе, и не кринжуй сильно, когда вспомнишь свои высеры. Когда-нибудь ты обязательно станешь на голову выше уже трудоустроенных, но не рефлексирующих по труъшным наукам быдлокодеров. Главное, уважай математику и вообще все абстрактное, это сложнее и почетнее, чем может показаться. Не проебись. А asm и прочее - это да, с этим надо наебаться как минимум в молодости, даже если монетизацию байтоебства не осилишь в будущем. Без этого, как без велосипеда в детстве, будешь в некотором смысле несчастным человеком.мимо узнал про двач спустя год с небольшим после вката по K&R
>>1641674>пукЯ ж не говорю про классический матан по Зоричу. Взять того же Кнута Concrete mathematics, ахуэнно жи... Чувак, ни одна фундаментальная книга по алгоритмам (без которой ты нихуя серьезного сам не осилишь, как кодер) не доступна без математического бэкграунда, во многих таких книгах это даже прилагается первой главой или в дополнении, но там сумбурно, а в деле становления Кармаком вообще спешка ни к чему, и так заебаться успеешь раз семьдесят за годы просветления, стало быть, нехуй нагонять сумбур, а лучше взять книжулю отдельно, забыть про далекий конец пути, сбросить напряжение и получать удовольствие от процесса. Кто этого не понимает, тот проебанное поколения, и я не про возраст, а в принципе. Заебали ЧСВ мудаки, которые своим куриным мозгом пытаются оценить ценность того, что лишь осилив и заценишь. Это иной уровень существования, это как рассказывать червяку, в чем прикол виртуозной езды на мотоцикле. Обнял, анон.
>>1641700>книга по алгоритмамЭто говно только кукаретики и вкатыши читают. Потом бегуют со своим мохнатым О пока их нахуй от рабочего кода не пошлют.>классический матанСорта говн
>>1641700>Я ж не говорю про классический матан по ЗоричуИди на хуй со своей второй культурой, обрыган.
Пиздец, в ситреде пиздеть в сторону биго нотации это просто беспрецедентный пиздец. Спасибо школе 21 за это
В этом треде спрашивать про makefiles? Нашёл вот такой совет на стаке:использовать для простого создания директорий $(info $(shell mkdir -p $(DIRS)))вместо$(shell mkdir -p $(DIRS))https://stackoverflow.com/questions/1950926/create-directories-using-make-file#comment89152187_45048948потому что вывод mkdir, согласно постеру, вторая будет ошибки прямо в мейкфайл записывать. Проверил это, убрав -p, так что она всегда генерировала mkdir: cannot create directory : File exists. Так вот, большой разницы между $(info $(shell и $(shell я не обнаружил, info только пустую строку добавляет, а ошибка и так и так выводится в терминал. Сама info вроде рандомные строчки читать не предлагает (или в мейкфайлах своя инфо?). О чём он вообще?
Решил только что первую задачу из k&r с байтовыми операциями. Пол дня над ней бился хотя понимал как все эти операторы работают. Непонятно было просто как манипулировать ноликом и единичкой но таки я сделал и программа прошла все тесты. Шикарно, только сильнее убедился что си это то что мне нужно.
>>1642058all:$(shell echo hello:)....$(shell echo echo you)....$(shell echo echo are)....$(shell echo echo infected)corona: helloтам где точки - табы. как думаеш што делает?will be pasted into the Makefile, leading to syntax errors at best, означает что шелл без инфо это кодогенерация.
>>1642210И ещё вопрос, как заставить $(info ...) на пустой строке не печатать лайнбрейк? Тот же$(info $(shell mkdir -p $(DIRS)))делает пустую строку. Как и, судя по моим экспериментам, любой $(info )Это как-то чинится? Можно ли отправить вывод в /дев/нулл?
>>1642528бля, я ебанат. ладно.только теперь минусовые значения появились. че с ними делать?>>1642534~0.00003 на калькуляторе
>>1642538вот это:\sin\left(0.002094395102393333\right)на этом сайте:https://www.desmos.com/scientific
Не понимаю как происходит унарное отрицание.int x = 20;return ~x;даёт результат -21. Я не понимаю почему.20 в двоиной это 10100, я ожидаю результат 01011(11 в десятичной), а получаю -21 что в двоичной равно -10101. Со знаками то понятно, непонятно почему нули с единицами не меняются так как ожидается.Почему так?
>>1642880Ты не можешь просто не учитывать ведущие нули. Поэтому у тебя не 10100, а 000...010100.(с учетом размера int) И 11 в десятичной ты никак не получишь Ну а разница в 1 из за представления в дополнительном двоичном коде (two complement). -21 выглядит не так как ты написал. Проверь на 1 = b00000001, -1 = b11111110
>>1642881ну так напиши мне подробрно как выглядит 21 на самом деле и как происходят эти вычисления все.
>>1642882Ой мне лень сейчас уже, вот продли правую табличку вручную и все поймешь. Я и так в прошлом посте опечатался. Короче -(x) в двоичном будет (~x)+1. Алсо попробуй на беззнаковых.
Это что за ошибка такая? Что-то не так с либами? Первые два это Cmake и Make.Третий пик другим способом компиляция и она работает. Что за хуита?
>>1643032Посос будет разве только только при кешмиссе. И да, если уж бенчить асм-высер хуеты, то бенчить проход по массивам и прочим структурам данным
>>1642880короче смотри нужно не в двоичной системе считать, а в типе intв int 32 твоё число это00000000 00000000 00000000 00010100 теперь мы делаем отрицание11111111 11111111 11111111 11101011 и получаем такое число.Если у тебя тип unsigned без знака то это будет равно в десятичном 4294967275Если у тебя signed который по умолчанию со знаком то это надо высчитать вот так 4 294 967 275 - 2 147 483 647 = 2 147 483 628 2 147 483 648 - 2 147 483 628 + 1 = 21Ну и так как было отрицание то плюсовой бит меняем на минусово и получаем -21.На конце цифры выделил специально чтобы диапазоны понимал почему получилось 21 а не 20.Потому что 0 это положительное. а в отрицательном 0 нет, поэтому в отрицательном больше на 1, чем в положительном.А на 1 прибавляется потому что 0 в реверсе это будет -1, а 1 в реверсе это будет -2. ну ты короче надеюсь ты понел.
Анон, скомпилил C# .net standard либу через CoreRT, путь к либе указан как #define PathToLibrary "..\\NativeLibrary\\bin\\x64\\release\\netstandard2.0\\win-x64\\publish\\NativeLibrary.dll"DLL Export Viewer(пик1) видит функцию в либе без проблем.В main.C :https://pastebin.com/u41ytwDYLine1 - не выводится, т.е файл найденLine2 - После LoadLibrary в handle NULLLine3 - В ErrorCode 126Если не ошибаюсь Error Code 126 = Модуль не найден, хотя Line1 его находит.Как решить эту траблу, ебусь уже 25ый день.
>>1643258UPD: Либа Shareddotnet publish /p:NativeLib=Shared -r win-x64 -c releaseПример - тутhttps://github.com/dotnet/corert/tree/master/samples/NativeLibrary
>>1643255Ну да, ты правильно вот сказал метко и коротко, объяснил бы ему раз такой талант имеешь. Если старший бит 0 число положительное, если 1 то отрицательное.
>>1643015Тот же выхлоп будет, если и си взять.>>1643028Ну там есть lea и 4 разных регистра. В третьей функции же все в один регистр считается из памяти, плюс сдвиг по таблице он быстрее считается, так что хуй знает!
>>1642921Второй вариант. Будет работать на практике так же как и первый, просто потому что если развернуть код вызова этих функций и убрать фолдинг констант, который ты бенчмаркаешь, блядь от он будет ==.>>1643367> В третьей функции же все в один регистр считается из памяти, плюс сдвиг по таблице он быстрее считается, так что хуй знает!Зато ты можешь ирл огресть хуеву тонну индирекций (которых офк никогда не будет в твоём хэловорде на 1кб), и твой третий вариант будет сосать хуй. Нет, дети, если у вас кол-во оперативки > кэша то так делать не надо.
>>1643256Пшёл нахуй, порватка. Какая связь вообще между старшим битом и фошистами, ещё и ёбанными? Хуле смерти желаешь, сам фошист что-ли? Гугли старший бит, гугли, сука, вилкой бытраблять гугли: https://ru.wikipedia.org/wiki/Старший_бит
>>1643535>айтишникВыбрось нахуй это слово из своего вокабуляра, если хочешь чтобы тебя люди серьезно воспринимали.
>>1643553маня, успокойся. я сам айти пидор о чём очень сильно жалею, но увы уже много трудов въебал в этот чан с гавном под названием АЙТИ. и мне поздно переквалицифроваться. как же меня бесят мои коллеги душные мудаки, никакого юмора, всё сразу в штыки, слово не то его использовать низя, вот ты классикал айти выблядок. Сука, я мог бы работать с тётями сраками в офисе и слушать про их детей и мужей, да где угодно, хоть с гречневыми пидорахами, но только в этом чане с гавном под названием айти с заносчивыми и душными мудаками которые за нетакое слово уже ебут тебе мозг.
>>1643605>хоть с гречневыми пидорахамиТебе кто-то мешает релокейтнуться на Украину?>но только в этом чане с гавном под названием айти с заносчивыми и душными мудаками которые за нетакое слово уже ебут тебе мозгСпецифика байтойобов, на самом деле. Ещё подобным страдают бэкэндеры, попробуй потусоваться с челиками из других областей, ахуеешь от разнообразия айтишников в природе.
Читаю черные книги игровых движков, закончил часть про движок Вульфа. Понимаю, что никогда не смогу даже попытаться сделать свой аналог даже с современными возможностями.
Современные рендерные системы уже все за тебя делают, только нужные флаги врубить, каждый флаг минус 5 процентов гпу
>>1643678>Понимаю, что никогда не смогу даже попытаться сделать свой аналог даже с современными возможностями. Ну и лох.
>>1643678С современными возможностями как раз сложнее делать вещи типа вульфа, потому что видеокарты пошли другим путем и его методы слишком противоестественны. Это как писать самомодифицирующийся код на ассемблере сегодня, а лет 30 назад это было нормой.
>>1644476>С современными возможностями как раз сложнее делать вещи типа вульфа,А чё тебе мешает делать ручной софтверный рендеринг? В sdl2 можно тупо ебать байтики текстуры. Потом одной функцией копировать текстуру на экран, вуаля.
>>1644864Думоть надо. Рейкастинг писать. Как работает рендер на основе BSP - вообше не вкурил. И один хрен потребуется i7 девятого поколения и 1080, чтобы добиться 30 кадров.Мимо
>>1642055ЧаюДико корежит от этих школ с зумерками-программистами из пабликов вконтакте. Опошляют и поганят все и вся вокруг себя.
Есть ли смысл компилировать под всякие MMX и более новые процы, а не ставить i586 и не париться? Оптимизирует ли компилятор? Или все равно придется руками дрочить ассемблерные вставки? В игровых движках вроде как SSE вполне себе используется.
>>1645124Возьми gcc.godbolt.org и посмотри на примере каких-нибудь скалярных произведений. Если хочется что-то самому добавить то используй не вставки, а интринсики.
>>1645124В идеале надо определить черту, начиная с каких процов клиенты тебе не интересны. Ну или делать отдельно сборку для MMX и для i586, возможно вынеся нужные функции в либу.
Пацаны, видали?!Effective C: An Introduction to Professional C Programminghttps://nostarch.com/Effective_C Наконец свежак по чистому Си!Кстати, а Столярова тут рекомендуют?
>>1634080 (OP)Подскажите пожалуйста...Как можно обратимо, закодировать массив байт в масив 7-ми битных значений, и наоборот - декодировать в байты?
>>1645968>SevenBits = byte & 127; //даёт 7 последних бит.>FirstBit = byte >> 7; //даёт старший бит.А дальше, что хочешь там, то и делаешь с ними. Можешь выебать их шлангом, потому что CLang.
>>1645968Ты спрашиваешь, как можно закодировать 8 бит в 7, чтобы оно потом обратно в 8 бит раскодировалось?
>>1645978Не совсем так.Пусть есть массив байт:[10101010, 01010101, 00000000, 11111111]надо получить массив, вроде:[1010101, 0010101, 01000000, 0011111, 111] или типа того,а потом раскодировать обратно.Основная задача - представить байтовый массив в виде строки,состоящей исключительно из символов 7-ми битного ASCII,а для этого, надо получить массив этих 7-ми битных значений.Но сделать это надо так, чтобы потом из него, из этого массива,было возможным получить назад эти байты, ебучие.Причём в виде - первозданном, а не непохеренном всякими кракозбликами,наподобие https://ru.wikipedia.org/wiki/Заменяющий_символ
>>1645986Ну почему же? Каждый ASCII-символ можно представить 7-ю битами, согласно таблице ASCII:https://ru.wikipedia.org/wiki/ASCII#ASCII_Table>>1645988Вот, нашёл какой-то код на JavaScript, для разрезания байтового массива на произвольное количество бит.https://stackoverflow.com/a/8133543Но там биты в виде строк, а надо чтобы числа были.Может поможет как-то намалякать годноту, а то я уже заебался... Хз.
>>1645968boost::transform_widthОбычно используется для кодирования в base64, но и под случай пойдет https://stackoverflow.com/questions/7053538/how-do-i-encode-a-string-to-base64-using-only-boost
>>1646013https://ideone.com/gbo25FКотороче, так и не смог понять, как хорошо задать размер второму массиву. Реквестирую помощь анона в этом вопросе. В остальном работает, хоть и коряво.
>>1646026Слышь, пехотинец, ты так забегался со своими калашами на море,что аж немного рамсы попутал и затёр не по теме ваще, да ещё и не по масти.За такое, даже в пехоте пёрышком чикают, в ты чё ваще не курсах?Реквест изначальный же, был о том, как массивы байтовые передёрнуть,и этот вот >>1646015, вроде что-то знает.Только вот на JavaScript эту хреновину не пришпандорить -слишком сложный синтаксис, и пунктуация, да.
>>1646030Чиво? Был массив восьмибитных чаров, стал массив восьмибитных чаров, где первый бит ничего не значит и всегда 0. То есть значения семибитные.
>>1646013>Но там биты в виде строк, а надо чтобы числа были.Так быть не может. Числа все фиксированной длины, не меньше 8 бит, так что тебе придется вместе с числом хранить его настоящий размер в битах. Для строк такое не нужно, потому что строки могут быть любой длины и уже включают в себя размер.
>>1646040>Чиво? Был массив восьмибитных чаров, стал массив восьмибитных чаров,>где первый бит ничего не значит и всегда 0. То есть значения семибитные.Хм, ну я же просил массив с int, или byte, а не char'ы.Да, я вижу - семибитные коды у них, но как их оттуда вытащить в массив?И вообще, я же хочу на JavaScript этот алго,а у тебя там вот такое вот:>buffer |= *foo;>Есть мнение, что он не понимает, что такое разбиение.Слышь ты, умник?! Хуле тут понимать-то, а? Про понятия решил мне растереть, да?Берётся короче еблет и разбивается в мясо, по-бырому - вот и всё разбиение.
>>1646013Потому что у него нигде не сказано что на входе только ascii символыЕсли на входе только ascii символы то там вообще ничего делать не надоfor(int i =0; i<size; i++) out=inp&0x7f;А если резать по обычному то там может получиться такое11111110 00000011 11111111 -> 1111111 00000000 11111111... т.е. NULL-байт в поток
Аnyaны, а насколько через Си удобно работать с PostrgeSQL? Или лучше для этого выбрать скриптовый язык?
>>1646140Вообще-то, было сказано, что на входе - байты, это массив байт, со значениями от 0 до 255 (8 бит).На выходе же - должны бы быть тоже массив, тоже байты, но имеющие значение от 0 до 127.И их должно бы быть чутка побольше.Я не знаю как в Си, и это вопрос скорее по алгоритмам, вцелом,и я решил задать его в треде по Си,так как считаю, что вы больше разбираетесь в этих вот битовых операторах,и прочих низкоуровневых операциях.Тот факт, что массиве из байт - может быть нулевой байт,в JavaScript, вовсе не значит что это конец строки.Я вот, просто для прикола, открыл консоль браузера (клавиша F12),и вписал туда это:>console.log('NULL_BYTE1:\0NULL_BYTE2:\0NULL_BYTE3:\0);и вижу длинную строчку.Короче, надо бы как-то наварганить, обратимый алгоритм,получения именно байт причём произвольной, заданной битности.В данном случае - битность 7, значит массив содержит 7-ми битные значения, или 6-ти битные, 1 битные...Как в вон том JavaScript'e, только цифрами байты в массиве, и обратимо чтобы.
>>1646154А причем тут javascript если это тред по C?А вообще задача элементарная, вот накидал неоптимизированный вариант, для последнего байта проверку надо отдельно делать чтобы не вылезать за границу массива но мне лень.
>>1646098>Хм, ну я же просил массив с int, или byte, а не char'ы.char это и есть байт, потому что состоит из восьми бит.>Да, я вижу - семибитные коды у них, но как их оттуда вытащить в массив?Они уже в массиве ciphered. Я же даже напечатал его для тебя между раскодированными текстами.>И вообще, я же хочу на JavaScript этот алго,А он умеет работать с отдельными битами? >а у тебя там вот такое вот:>>buffer |= *foo;это и есть работа с битами. Или ты планируешь получить биты, не зная ничего бит? >вот и всё разбиениеНу ты и фантазёр, конечно.
>>1646140>А если резать по обычному то там может получиться такое>11111110 00000011 11111111 -> 1111111 00000000 11111111... т.е. NULL-байт в потокЭто ничего страшного, если работать с этим как с массивом, то ты знаешь его размер, а эти байты вполне нормально расшифровываются.
>>1646277>char это и есть байт, потому что состоит из восьми бит.Вывод верный, но объяснение неправильное. В стандарте нет гарнтии, что сhar состоит из восьми бит. В нём не менее восьми бит. Так же, гарантируется, что размер char-a - один байт, вернее, формально, что sizeof возращает 1 на char и всех его квалифицированных вариантах.
>>1646323>В стандарте нет гарнтии, что сhar состоит из восьми бит.Дело в том, что для того кода нет разницы, какой конкретно формат будет из восьми бит. Я просто ответил, что в том коде char — это байт фактически.
>>1646279Это нестрашно, если ты работаешь и с тем и с тем сам, но если это передается где-то по сети, оно может случайно пройти через какой нибудь прокси сервер, который посчитает что это 0-terminated строка. Маловероятно, конечно, но base64 именно для того и придумали.
Аноны. Помогите мне пожалуйста. Нужно сделать лабу по системному программированию под linux на Си.Вроде бы написал (хотя я пока только из одного текстового файла читаю, который щадаю в самом коде а не во время вызова исполняемого кода, но это я потом легко исправлю).Условие и код здесь по ссылке ideone.com/h3ed25Скорее всего я где-то облажался, но нк понимаю где, объясните как исправить, анончики. Надеюсь на вас.
>>1646367Делать за тебя я, конечно, не буду, хотя это быстрее, чем писать этот пост. Но код производит впечатление, что ты решаешь задачу методом тыка. После fork() у тебя запущены две одинаковые программы, но запущены не сначала, а с этого места. И каждая программа изнутри должна узнать, какая она из двух. Про это тебе должен был рассказать return форка, но тебе на него, почему-то, похуй. На самом деле, все просто, но иногда с концептуально новой идеей надо переспать. Именно поэтому весьма хуево запускать хвосты по учебе и компенсировать регулярность занятий интенсивностью за день до дедлайна. Документация в помощь, анон.
>>1634080 (OP)Это пони-тред? Расскажите, надо ли добавлять .git/ в .gitignore? Оно вроде так уже автомагически работает, но я нигде не могу найти, где это в документации написано.
>>1646367Ээээ блядь, да у тебя и char указатель, ну в пизду. Я вон вообще про двач узнал спустя год с небольшим, как в Сишку вкатился. Нехуй на форуме делать с такими элементарными вопросами.
»1646384Вот я тоже как раз подумал что дело в этом. Проблема в том что я не знаю как сделать так чтобы процессы занимались разными задачами в одной программе.»1646387>Но код производит впечатление, что ты решаешь задачу методом тыка.Именно это я в общем-то и делаю.>Именно поэтому весьма хуево запускать хвосты по учебе и компенсировать регулярность занятий интенсивностью за день до дедлайна.На лекциях лектор нам вообще ничего не объяснял про системные вызовы. >Документация в помощь, анон.Да читал я документацию по fork и все равно не понял как сделать так чтобы разные процессы решали разные задачи а не одну и ту же вместе.
>>1646402Разметку проебал>>1646384Вот я тоже как раз подумал что дело в этом. Проблема в том что я не знаю как сделать так чтобы процессы занимались разными задачами в одной программе.>>1646387>Но код производит впечатление, что ты решаешь задачу методом тыка.Именно это я в общем-то и делаю.>Именно поэтому весьма хуево запускать хвосты по учебе и компенсировать регулярность занятий интенсивностью за день до дедлайна.На лекциях лектор нам вообще ничего не объяснял про системные вызовы. >Документация в помощь, анон.Да читал я документацию по fork и все равно не понял как сделать так чтобы разные процессы решали разные задачи а не одну и ту же вместе.
>>1646403>Вот я тоже как раз подумал что дело в этом. Проблема в том что я не знаю как сделать так чтобы процессы занимались разными задачами в одной программе.Читай. Это довольно просто.
>>1646391Функция read вторым элементом принимает указатель, на буфер. В данром случае чтение побайтовое, поэтому я объявил указател на char, а не char. За жоементарные ошибки мне и самому неловко, но лаба горит.>>1646399Спасибо, анон.
>>1646414Спасибо. Осталось объяснить, куда он указывает, и почему ниже у тебя указатель на указатель.
реальнo ли не испoльзoвать двoетoчие в этoм выражении? мне прoстo не нужнo else, т.к. если услoвие не выпoлняется тo не нужнo ничегo делать.
>>1647377>(cond) ? s += 32 переписываем как (cond) ? s += 32 cond fix(cond) ? s += 32 переписываем как s += 32 (cond)
>>1647395сравнение это брэнч, его надо предсказывать всегда, а с умножением линейный код, на гпу в шедерах используется такая техника убирание брэнчей нопремер>>1647392блет надо было += а не *=
>>1647399>на гпу в шедерах используется такая техника Потому что умножение, это то, что гпу делает хорошо. Как на тракторе быстрее через поле грязи проехать, а на легковушке в объезд.
>>1647385А чтo рекoмендуешь в такoм случае испoльзoвать в качестве заглушки? прoстo задача из k&r требует именнo такoй метoд.
Нужна помощь не по к&р. Пытаюсь перехватить руками дескрипторы процесса. форкаюсь, забираю стдаут, экзеклю это, и раскрашиваю аутпут. Чайлл обрабатывается следующей функцией. Как видите принты до экзека никуда не приходят, а вот вывод эха нормально обрабатывается. НО!Если до вызова dup2() добавить ещё один принт, то он выведется (нераскрашенным, что естественно), и каким-то образом повлияет на остальные два принта, что их нормально перехватит и раскрасит.Я подумал, что дело во времени, что родитель не успевает создать буфер и всё это, но добавление в чайда sleep() ничего не меняет. Объясните, пожалуйста. https://ideone.com/OcqfBO
>>1647504Нет, в чайлда не помогло, ни в одну из этих позиций (в родителя тоже). А что не понятно? Это, я так понял, стандартный метод по перехвату дескрипторов, если я что-то странное написал, давай поясню.
>>1647506Чайлд пишет в стдаут, он буферизируется (не попадает в файловый дескриптор), ты запускаешь эхо, он пишет в файловый дескриптор. Тем временем ты читаешь из файлового дескриптора. Где нужно сбросить буфер, чтобы операции вывода в файловый дескриптор попали в правильном порядке? Правильно, перед тем, как ты будешь писать напрямую в дескриптор, т.е., прямо перед execv.
>>1647522Спасибо, анон, за помошь и объяснение. Я думал, что dup2() заменяет stdout и того уже нет, так что писать можно только в переданный пайп.
>>1647471дауны, вы. мне нужно такое выражение (условие) ? 1 вариант : 2 вариант. а не ваша хуита переделанная.
https://github.com/ilovetostudyit/de-library/blob/master/ft_memmove.cчто происходит в 27-й строчке, зачем это?
>>1647686> что происходит в 27-й строчкеUndefined behavior. Да, если следовать стандарту, на сишке нельзя написать стандартную либу для сишки. Живи с этим.
Простите за глупый вопрос, но сколько файловых дескрипторов должно быть у программы? Я вот сделал простейшую printf("%d\n", getpid()); sleep(40);и у неё зачем-то 60 файловых дескрипторов. Откуда?
>>1647724>Undefined behavior.С чего ты взял? Перечитай ещё раз стандарт. Для char'а есть куча исключений: любой валидный указатель кастится в валидный указатель на char. Более того, к области памяти можно обращатьcя не только по её эффективному типу, но и по указателю на char.
>>1647838Плюс, сравнение указателей гарантированно даёт предсказуемый результат, если это указатели на части одного массива.
>>1647724А в чём заключается неопределенность? Адресное пространство процесса же сквозное, так что сравнивать адреса можно.
>>1647838>>1647870https://stackoverflow.com/questions/4023320/how-to-implement-memmove-in-standard-c-without-an-intermediate-copy
анoны, пoясните за эту функцию из книжки мoлю. oна у меня oшибку бьёт, т.к. там индекс же вo время вычисления станoвится дрoбью десятичнoй.
>>1648112ошибка в v[mid] не извлекается элемент из списка поэтому и ошибка. а почему я не знаю. попробую разобраться
>>1648260Сколько в книге страниц и на какой странице ты сейчас? Я по k&r с 10-го января где-то учусь, в данный момент на 53 странице где-то.
>>1647810Могли бы и сказать, что среда запуска может накидать за щеку дескрипторов. Это электрон шрифты всякие навтыкал, и ручек к разделяемой памяти.
>>1645968>Как можно обратимо, закодировать массив байт в масив 7-ми битных значений, и наоборот - декодировать в байты?>>1645972>SevenBits = byte & 127; //даёт 7 последних бит.>FirstBit = byte >> 7; //даёт старший бит.>>1645974>Так а... С массивом-то как ёпты, бля? А если у него ещё и произвольная длина?>>1645978>Ты спрашиваешь, как можно закодировать 8 бит в 7, чтобы оно потом обратно в 8 бит раскодировалось?>>1645983>многабукафф>>1645986>Ложь, пиздёж и провокация.>>1646013>Вот этого, гляжу, не объебёшь.>>1646014>Дебажу расшифровку, не очкуй.>>1646015>Неведомая шняга, на JS не катит.>>1646035Да, твоя тема - нормас на си пахает.>>1646026Код, вроде рабочий, но из-за буфера с большим int и операции '|=' портировать на JS - не получилось.>>1646039Схулей размер ещё бит хранить, Ы?>>1646140Там на входе - байты.>>1646157Подобную последовательность битовых операций, примерно, я и реквестировал здесь.>>1646277Мне надо было семибитные числа в массиве, а не восьмибитные. Да, в JavaScript тоже есть bitwise operators.Только числа там ограниченное значение имеют, поэтому твой буфер не сработал.>>1646279Хотя JavaScript'у и пофиг на нулли, но всё-же да, спецсимволы лучше убрать нафиг.>>1646323Да, ведь байт от 0 до 127 - это тоже восьмибайтный байт, но зато - он может быть представлен одним ASCII-символом.В общем, смарите, как я рубасы запилил: >>1648469 → (архивач: https://arhivach.ng/thread/546415/#1648469 )Это совершенно новый, инновационный стандарт в IT-индустрии.Можете юзать, кароч, и гонять, ксорить и конвертить эти ваши - байты. Бесплатно и без СМС. Код открытый. Добра, всем.
>>1648476Рубасы! Рубасы! Да это же новый стандарт в сфере мультипарадигмального императивного метапрограммирования:Вот код: https://jsfiddle.net/bxLj7h61/1/
>>1648675Какой эталонный шизодебил, нафантазировал себе бреда и купается в нем. По любому пердоля линуксоидная, они как раз такие обычно, туппппые как баррраны и такие же упертые необучаемые.
>>1648476>0 до 127 - это тоже восьмибайтный байт, но зато - он может быть представлен одним ASCII-символом.Если не нужна кирилица.
>>1649132>Байтом он быть не перестаёт, а байт - это 8 бит.>>1649129>Если не нужна кирилица.Там RUBase128, кириллица используется чтобы сделать символы печатными, как в base64.Удивительным образом, вся кириллица с латинницей плюс цифры - впихивается в 128 символов.Таблица символов ASCII же, содержит в себе спецсимволы,которые не дают строке отображаться, из-за чего строка не может быть скопирована, после кодирования.Например, вот этот самый NULL-байт посреди строчки - дико выбешивает, так как означает конец строки.C RUBase128 всей этой хуйни нет, но там нужна конвертация из 8-ми битных байт в 7-ми битные,над чем пришлось ебать как подзаморочиться.А RUBase256 вообще кодирует все 256 байт, безо всяких выебонов,только вот длина данных чуть больше в самих этих байтах, просто по причине того,что символы берутся из Unicode, и кодируются более чем одним байтом, ну и пофиг.
>>1649543с++ разворачивается в довольно непредсказуемые портянки машинного кодаэто может быть черезчур для какого нибудь микроконтроллера
>>1649543>Зачем нужен с, если есть с++?Потому что не всем нравится feature creep язык программирования
>>1649543Современный C написан на С++ ради 10% производительности на максимально низких (для высокоуровневых языков) системных программ
>>1649543Во-первых, чтобы поддерживать проекты, которым уже по хуй знает сколько лет.Во-вторых, чтобы учить нюфагов. В плюсах куча высокоуровенных фич (ссылки, RAII, наследование, смартпоинтеры, стдлиб где уже есть все структуры данных и тд), которые скрывают происходящее под ними, а чтобы писать быстрый код нужно понимать, как там всё байтойобится прд капотом.
>>1650099Почему он так жрет память? В С скобочек больше и точка с запятой на каждой части команды. Наоборот же лишние знаки должны больше заполнить памяти.
>>1649706>Под микроконтролле пишут даже на питонеДля быстрого прототипирования, в основном. Серьезное никто ничего не пишет, потому, что все интерпретаторы скриптовой хуйни сильно урезанные и скорости проца нехватает. >крестах На микроконтроллерах свои особые кресты с костылями. Это не не совсем кресты, а скорее си с классами. Тк основные крестовые фичи либо не работают, либо нахуй не нужны из-за нехватки ресурсов. А байтоёбствовать удобнее на сишечке на которой написаны большинство библиотек.
>>1650099>>1650096Я не ебу вообще, я против питуна на МК, просто этот ебанутый >>1650026 пост помпезно имплаит, что Cortex-M3-grade-чипы не МК.
>>1650305Не парься братиш, тут половина треда не видела программируемые микрочи в жизни, не говоря уже о промышленном БМ. Так, детки из школы 21 в перерыве между перерывами попукивают свое важное мнение
>>1650338Начни с выражения своих мыслей. Простейшая практика, никаких наук учить не надо, но творит чудеса, сразу выявляя даунов, у которых мыслей нет, но думают что есть.
>>1634080 (OP)>Brian Kernighan, Dennis Ritchie "The C Programming Language"Откуда взять входной поток для заданий из первой главы?
>>1650703Никак. Continue переходит к следующей итерации ТЕКУЩЕГО цикла. Тебе нужен break и флаг. Во вложеном цикле выставляешь флаг, делаешь break, во внешнем цикле проверяешь флаг и делаешь continue, потом сбросить флаг не забудь.
>>1650203Не понимаю, то ли я гений (не может быть), то ли дебилов массово в пробирках штампуют. Си с классами это тоже кресты, потому что в сях классов нет. Как можно не понимать очевидного, при том что тут и других вариантов даже нет. И даже без классов кресты это кресты, потому что в любой момент если захочешь классы будут. В этом и достоинтсво, что много есть, но ничего не навязано, можно сделать как в примитивном си, так и сложные вещи, а можно что-то среднее, да как угодно. А убогая сишка в которой кроме ограничений нет ничего, это ненужный нигде мусор. Очевидно же, ведь ограничения это недостаток, а не достоинств ство.
>>1650961 Проблема в том, что семантику Сишечки можно объять разумом, а сематика Си++ - это блядь просто огромное море лютого пиздеца, там нету правил, там нету даже правил с исключениями, там исключения из исключений исключений из правил. На каждый чих, на каждую блядскую фичу создано по сематической сущности, абсолютно бессистемно, в постоянной погоне за модой. Поэтому, ты можешь комфортно работать только в небольшом подножестве языка. И не надо мне, блядь, говорить про то, что мол, кококо, нормальному чуваку норм. На руках тоже можно ходить повседневно, но не факт что это признак большого ума.
>>1651421И? Это плохо? Каждый работает в том подмножестве, которое ему по уму. Тупой работает в области си, поумнее работает с классами, еще умнее работает с шаблонными библиотеками и так далее. Или еще лучше, начинающий как вначале, но со временем умнеет , охватывая больше, но этот процесс неограничен, учиться можно всю жизнь, настолько язык глубок. Это же буквально рай для умного человека. Да и в целом, язык, охватывающий всё для всех и каждого, это же буквально бог, божественный язык.Так что ненравится? То, что ты не осиливаешь ВСЁ И СРАЗУ? Что нельзя написать "я знаю в совершенстве". Что от этого у тебя комплекс и боль от осознания собственного несовершенства? И поэтому ГОВНО НИГУЖНА УБЕРИТЕ ОТ МЕНЯ! Так? Так. Поздравляю, классический дебил. И даже если бы сбежишь от си плюс плюс, так что он перестанет тебе напоминать что дебил, тебе все равно об этом напомнят, я например, или другие люди. В мине все равно везде естб не дебилы и при виде такого тупого тебя они молчать не будут. От себя не убежишь.
>>1651457>поумнее работает с классамиИ получается ебаный пиздец с логикой и иерархиями.Мимо не любитель ООП
>>1650961> Не понимаю, то ли я гений>>1651457> И? Это плохо? Каждый работает в том подмножестве, которое ему по уму. Тупой работает в области си, поумнее работает с классами, еще умнее работает с шаблонными библиотеками и так далее. Или еще лучше, начинающий как вначале, но со временем умнеет , охватывая больше, но этот процесс неограничен, учиться можно всю жизнь, настолько язык глубок. Это же буквально рай для умного человека. Да и в целом, язык, охватывающий всё для всех и каждого, это же буквально бог, божественный язык.Вот это шизоид, вот это да! Для офигенных любителей языков и выразительности есть хаскель и теория типа tapl, но судя по твоей бредятине ты до такого не дорос. C++ постоянно накачивают разного качества фичами, тебе говорят, что для написания выразительного (и производительного) кода нужно себя сильно ограничивать в использовании языковых конструкций. И это не из-за какого-то там "ума", большинство хороших кодерков смогут прикрутить к проекту любую фичу из языка.И учить всю жизнь можно cs, а не какой-то отдельный язык.
>>1651473>C++ постоянно накачивают разного качества фичами, тебе говорят, что для Классическая безмозглая модная шлюха блондтнка.1) Гонится за последней модой2) Главное для ней - чужое мнениеМань, куда ты лезешь, программирование не для такого сброда. Язык это инструмент, его используют как нужно конкретному мастеру для его задач. Не существует никакой моды и что там другие говорят себе в зеркало тоже их личное дело. Мастер использует то, что ему удобно для его дела. Своя голова, самостоятельное мышление. Тупым шлюхам не понять.
>>1651485>Мастер использует то, что ему удобно для его дела. Своя голова, самостоятельное мышление. Тупым шлюхам не понять.Покажи свой гит?
Как следить за очисткой ресурсов на си (без эксепшенов) ? Goto? Do-while цикл? Проще конечно разделить функцию на подпрограммы, но не всегда есть возможность.
>>1651457> Тупой работает в области си, поумнее работает с классами, еще умнее работает с шаблонными библиотеками и так далее.Толстота. мимо сеньор
>>1651485Ты только что выдрал отдельный тезис из моего поста и зачем-то попытался подкрепить его продолжение своими убогими аналогиями. Зачем я только отвечал тебе...Вот, цитируя полностью:>> для написания выразительного (и производительного) кода нужно себя сильно ограничивать в использовании языковых конструкций.У тебя видимо вообще никакого опыта разработки нет.
>>1651485>Тупым шлюхам не понять.А теперь я доведу до тебя небольшое противоречие, выходящее из твоих прошлых постов, которые отлично проглядываются в треде. Комитет так же остановил эволюцию стандарта С, как и твой ебнутый "мастер", не пользующийся какой-то "модой". Плюсовые фичи в С не пролезли. Для реализации ООП, шаблонов, исключений можно использовать макросы (которые иногда и в кресты приходится тащить, хотя страуструп очень сильно старался), программистам в отрасли этого хватает. Тогда, собственно, не совсем понятны твои претензии к С как к языку.
Помогите пожалуйста написать код правильно или пофиксить готовый. Спасибо.Задание:написать программу, которая считывает английский текст из файла и выводит его на экран, заменив прописной каждую первую букву слов, начинающихся с гласной буквы.using System;using System.IO;class Program{static void Main(){string path = @"D:\text.txt";try{using (StreamReader sr = new StreamReader(path)){string str = sr.ReadToEnd();string alf = "aeiou";string[] split = str.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);for (int i = 0; i < split.Length; i++)for (int j = 0; j < alf.Length; j++)if (split.StartsWith(alf[j].ToString(), StringComparison.InvariantCultureIgnoreCase)){Console.WriteLine(split);break;}}}catch (Exception e){Console.WriteLine("The file could not be read:");Console.WriteLine(e.Message);Console.ReadKey();}Console.ReadKey();}}
>>1651742а пoнял. спасибo. а этo пременимo тoлькo к алфавиту или ещё и цифры нужнo сделать? или тoлькo алфавит?
>>1651695Можно не нести шизобред, если нужно ООП, шаблоны, исключения, берешь и используешь их, а если не нужны не используешь. С++ позволяет всё, делай что хочешь как хочешь без ограничений.С же это поледка для компашки шизиков разработчиков ядра линукс. Примерно как Git, только гит оказался полезным и за пределами шизокружка, а си нет, ведь уже есть то же самое, но с плюсами.
Пиздец, мне одному в последний год стало мерзко даже читать хуйню что тут пишут, но я все равно сюда захожу и ахуеваю с того что у этих студентишек в головах?
>>1649543>Зачем нужен сЧтобы были уязвимости с переполнением буффера, очевидно, это выгодно мировой закулисе.
>>1651746спасибo пoнял.>>1651761я здесь с 10-гo января где-тo. захoтел научиться писать на с++. сперва выучил oбщие oснoвы пoгрoмирoвания на базе питoн. пoтoм пришёл сюда и начал k&r книгу делать. щас на 56-й странице в данный мoмент. терпи, книгу прoйду и уйду из треда в с++ страуструпа делать
>>1651770Чё? Я не про ньюфагов которые задают шизовопросы уровня анон почему це це или что такое баит, а про шидерьмо вроде поста через один наверх от того на который ты ответил
>>1651753>>1651757Скажи мне, гений, что произойдет/ты будешь делать если у тебя в обработчике сигнала внутри многопоточного сетевого софта развалится, например, тобою обожаемый оператор new?
>>1651841Ты не увиливай, а четко мне укажи каким инструментом языка ты эту ситуацию "локализуешь" и в какой подпрограмме/функции какого процесса.А еще я не знаю про какие дефайны ты там говорил, попробуй примерно указать конструкцию, которую они оборачивают в коде.
>>1651859>А еще я не знаю про какие дефайны ты там говорил,>Для реализации ООП, шаблонов, исключений можно использовать макросы>не увиливайЯсно.
как бoлее лучше эти скoбки ставить-тoint main(void) {return 0;}или int main(void){return 0;}в книге k&r первый вариант демoнстрируют пoстoяннo
>>1651862Оператор new не справился с задачей и выдал std::bad_alloc. В обработчике обработать ошибочную ситуацию невозможно (как всегда, хехе).Дефайны мне тут никакие не приплетай, они здесь не нужны. Про аллокаторы можешь меня тоже не спрашивать, я тебе могу хоть mmap в оператор завернуть, это не имеет разницы.
>>1651874>Дефайны мне тут никакие не приплетай>сам приплетает>Для реализации ООП, шаблонов, исключений можно использовать макросыПонятно.
>>1651885Еще раз, товарищ зеленый, здесь нет никаких ооп и шаблонов, никаких дефайнов и языка Си. Я поставил вам вопрос:>>в обработчике сигнала внутри многопоточного сетевого софта присутствовал оператор new, он выдал std::bad_allocВопрос стоит только в рамках языка C++. Мне очень, очень интересно, как бы вы средствами языка локализовали и обработали эту ошибку.
>>1651814>здесь нет языка СиЗачем тогда срешь в треде си. Срут не от большого ума, катись обратно откуда вылез, даун.
>>1652014Ты не мне такой вопрос задавай, а шизику, который решил здесь устроить очень содержательное сравнение крестов и сей. Условие я дописал к посту чтобы он окончательно обосрался и больше ничего сюда не писал. И, как ожидалось, его уже давно не видно.Завершение процесса или передача управления из обрабочика сигнала - вопрос общий для двух языков. Просто реализация исключений (в т.ч. в виде C-макросов или C++) не позволяет им выбрасываться из обработчика сигнала.
>>1651894>товарищ зеленыйТут только ты>здесь нет никаких ооп и шаблонов, никаких дефайновВот же >>1651695>Для реализации ООП, шаблонов, исключений можно использовать макросы>Вопрос стоит только в рамках языка C++Ты ошибся тредом.>Мне очень, очень интересно, как бы вы средствами языка локализовалиНикто тебе не писал что "только средствами языка". Просто когда я уже найду место, где программа упала, ты все еще будешь разматывать макросы и пытаться понять в какой же строчке это произошло.>И, как ожидалось, его уже давно не видно.Потому что у меня есть чем развлечься вечером и без твоей тупости.
>>1652034>>никто не писал "только средствами языка"Я тебе прямо такой вопрос задал дважды. Ты ничего не можешь ответить.
>>1652279>А как обработать возврат NULL malloc'ом? И так и так падаем.Самое простое - крашнуть прогу. Если не крашнуть самому - могут начаться злодейства.Если чуть поумнее, то можно созранить состояние проги, не используя дополнительного выделения памяти (и опять же крашнуться после). Если у тебя какой-то хитрый алгоритм, который адаптивно жрёт дохуя памяти, можешь это просто использовать как сигнал пойти по пути меньшего пожирания этой самой памяти.Не обрабатывать ошибки выделения памяти (да и ошибки вообще) - признак долбоёба.
>>1652336Правильно, но я указывал что эта злодейская ошибка случилась с malloc (new) внутри обработчика сигнала.>>1652279Была бы данная ошибка внутри обычной процедуры - можно было бы откатить все действия процедуры назад и вернуться с кодом ошибки. Но она произошла не в процедуре, а в другом контексте. Из этого выходит что эксепшен нельзя выкинуть из обработчика, он не попадет ни в один catch и терминирует программу. Ну и получается нам нужно (в условиях текущего стандарта c++) эксепшен ловить на месте и лезть в древние posix_c siglongjmp/setcontext чтобы сменить контекст вручную. Или лезть в boost.asio, где уже разработали нужные оберточки, с тем же успехом прикручиваются нужные интерфейсы в виде библиотек к сям.И вот как-то так выходит, что еще надо на data layout обратить внимание, с сишным api поработать, какую-то часть стандартной библиотеки переписать, поработать с легаси. И так в некоторых проектах проектах мы просто приходим к си, где язык дополняют либы и container_of.
>>1634080 (OP)Подскажите, какая разница между языками D и C? Вот прям пример на одном, пример на другом. Везде одни словеса пространные, и я ничего не понимаю. Это если вообще найти возможно - назвали же ёпанавашу 1 буквой.
>>1652599https://rosettacode.org/wiki/Sorting_algorithms/Bubble_sort#Chttps://rosettacode.org/wiki/Sorting_algorithms/Bubble_sort#Dhttps://rosettacode.org/wiki/Sorting_algorithms/Bubble_sort#EНо D какбе мертвый язык.
лаб1Значение некорректно из-за преобразования char в float, но когда я пробую получать в float значение пишет что определенно слишком типов, как мне получить нужное значение в клавиатуры чтобы функция работала корректно?
>>1653266getchar() получает символы, при чём по одному. Число 546 — это 3 символа, например. Тебе, видимо, хочется функцию scanf().
>>1653281Я уже пытался ее прикрутить, но так и не понял как ее правильно прикрутить, покажи пожалуйста
>>1653293"&" я так понимаю это ссылка на участок в памяти где хранится переменная или что это? Почему без нее не работает и как это правильно использовать? В примере я ничего подобного не виделТаки работает, большое спасибо, если бы не ты, я бы долго пердолился
>>1653301>В примере я ничего подобного не виделПотому что char str1[20] означает, что str1>это ссылка на участок в памяти где хранитсямассив из 20 чаров.>как это правильно использовать?Пока просто запомни, что в сканфе нужно писать &. Почему и как потом разберёшься.
>>1653303>Пока просто запомни, что в сканфе нужно писать &. Почему и как потом разберёшься.Ок, так и сделаю
>>1653303>Пока просто запомни, что в сканфе нужно писать &. Почему и как потом разберёшься. Байтобляди in a nutshellА потом память течет и миллиарды хакерами воруются.Хорошо, что Rust и прочие языки ведут свое победное шествие и отправят вас на свалку истории
Я, конечно, дебил, но все же - откуда эти ворнинги? Что не так?Бля, Шарп слишком сложный, продолжаю прототипировать на Си
>>1653777Да кого вообще волнует название переменных в очередном мертворожденном прототипе проекта, который я никогда не доведу до конца, так как программист как из говна пуля?
>>1653812Ну это просто такой показатель знания тобой языка и твоего отношения к программированию. Нормальный человек так не напишет.
>>1653985Вроде нигде не заявлял, что знаю язык уровнем выше чем "читаю технический текст". В голове всплыло children вместо child - использую.
Почему чтобы скомпилировать программу под разные платформы нужно заниматься какой-то херней, а не нажать две кнопки?Допустим есть программа hello world SDL2. Сам SDL кроссплатформенный, есть костыль-компилятор mingw с прослойкой для запуска этого дела под шиндовс, но для его работы все равно нужен отдельный пакет специально заточенный под mingw. Разве там не те же исходные тексты что и под линупс? Почему он не может взять include просто из линукса?Отличие для меня лишь в том что в линуксе libSDL2 будет установлен в пакете, а в шиндовс эта DLL будет лежать в папке с программой, остальную совместимость должен обеспечить mingw. Не?В чем сложность?полный нубас
>>1655108> Разве там не те же исходные тексты что и под линупсБерешь те же тексты, mingw, configure, make, все дела, но это долго. А готовый пакет ты распаковал куда-нибудь, cc mygovnokod.c -Lmysdl2path -Imysdl2path -lSDL2 и все. Или даже без -L/I, если положишь в правильные директории.
>>1655108SDL это библиотека, библиотека это тоже программа, программы распространяются в бинарниках, а не исходном коде. Бинарники разные на разных системах, и не только windows, они и на каждом линуксе разные. В пакете находятся бинарники, поэтому пакеты везде разные, не только относящиеся к mingw.>совместимость должен обеспечить mingw. Не?Не. Разные системы разные, совместимости нет нигде, это прорагандистские бредни для идиотов. Точнее, есть только в windows обратная совместимость (старые программы работают на новых виндах), но не наоборот. На других системах кроме винды и такого нет, там вообще полное отсутствие совместимости.
>>1655214Я знаю что в линуксе все пакетами и я хочу в два клика собрать и под винду и под линукс из линукса. Под линукс он собирает естественно нормально, но для cygwin нужен какой-то свой пакет т.к. он не видит инклуды которые есть в системе.Короче я все понял. В пакетах специфичных для cygwin идут dll и *.a файлы.Я просто хотел чтобы как в python pip install все загружалось и подсасывалось само, а не я голову ебал как это слинковать:>i686-w64-mingw32-gcc -I"./SDL2-2.0.12/i686-w64-mingw32/include/" -w -Wl,-subsystem,windows concept.c -L"./SDL2-2.0.12/i686-w64-mingw32/lib/" -lmingw32 -lSDL2main -lSDL2
>>1655262>Я просто хотел чтобы как в python pipПитон и пхп это веб-скрипты, они не имеют платформы и вообще не программы, а скрипты. А на си пишутся программы, а программа это такая штука, которая под платформу написана. Отсюда натуральный вывод: мультиплатформенных программ не существует, что означает, любому хуесосу с кукареками про "мультиплатформенность" в треде языка си нужно пиздовать нахуй отсюда. Не туда зашел, петушок.
>>1655301>Питон и пхп это веб-скрипты, они не имеют платформы и вообще не программы, а скрипты.К чему имеет биндинги (qt, sdl2) оно подсасывает само.
>>1655303Твой набор слов не имеет смысла, бредятина. Не понимаешь разницу между программой и скриптом и мелешь чушь как результат. Иди нахуй, сначала обучись элементарной компьютерной грамотности, а потом приходи. Здесь тред си, а не обучения чайников основам компьютерной грамотности.
>>1655306>Твой набор слов не имеет смысла, бредятина.Это ты даун. В питон если сделать pip install мне не надо отдельно качать SDL чтобы pySDL2 заработал.До того как я начал разбираться речь шла о дистрибуции и инфраструктуре, а не чем отличается скрипты от программ. Не знаю почему ты сагрился и тяфкать начал.>а программа это такая штука, которая под платформу написана. Отсюда натуральный вывод: мультиплатформенных программ не существуетГоворилось очевидно про сам исходный код и ты это знаешь, токсик. Через какие костыли оно будет собираться мне не важно. Мне важно чтобы все пакеты нужные для этого были доступны в два клика, как это сделано в менеджере пакетов для cygwin например.Даже в арче есть костыли чтобы это не искать в отличии от debian'а. Я сетовал на то что даже в python с pip install есть такой функционал и он качает в том числе бинарники, не надо искать ничего, могли бы в рамках mingw реализовать подобное.
>>1655314Терминальный необучаемый дебил, как и ожидалось от веб-макаки. Нельзя лезть в алгебру не зная арифметики. В школе не зря учат последовательно, снизу вверх. Но как только кончается школа, дебилы радостно лезут сразу в дебри, не понимая элементарных основ, ведь больше нет няньки в лице государственной принудительной системы образования, а сами за себя сообразить своими куцыми мозгами не могут.
>>1655417А вот, например, надо в функцию передать строку или структуру. Можно конечно всю строку в стек запихнуть (нет), а можно просто указатель передать на начало строки.
Ананасы, сколько времени понадобится, что Си был заменен более современными системными языками программирования (как тот же Раст)? 10-20 лет?Я люблю Си, но мир же не будет вечно жрать говно от эксплоитов, которые существуют только благодаря тому, что Си еще не умер (ну и легаси код крестов без RAII). Ваши прогнозы?мимо разраб драйверов на богоподобный линукс
>>1655960А в чем проблема? Он быстрый как кресты, на нем уже ядро ОС написали и пишут дрова, включая дрова на уже существующие ОС. Если не системный, то какой? На нем легко можно байтоёбить.
[CODE]window_caption[150] = "";program_name = "Test";program_version = "0.0";FPS = 150;snprintf(window_caption, sizeof(window_caption), "%s v%s", program_name, program_version);snprintf(window_caption, sizeof(window_caption), "%s; FPS: %u", window_caption, fps_current);[/CODE]Хочу сложить строку caption = caption + "text"Почему во втором snprintf у меня не выводится %s, только FPS: %u? snprintf не работает сама в себя? (linux)
>>1655945Ага, Лайнус так и побежал побежал переписывать Линукс на раст.Боюсь что ждать минимум лет 50, скорее всего не на твоём веку.
>>1655988> Он быстрый как кресты, на нем уже ядро ОС написали и пишут дроваСлышал такое слово в слово про C#.> А в чем проблема?В реализации linked list на две страницы.>>1656131> snprintf не работает сама в себяНет. Первый аргумент объявлен как restrict, значит компилятор имеет полное право подразумевать, что других указателей на window_caption в функцию не передали, и применять соответствующие оптимизации.> Хочу сложить строку caption = caption + "text"strcat или n = sprintf(buffer, ...); n = snprintf(buffer + n, ...) (с проверкой ошибок и соответствующим уменьшением размера буфера, разумеется).
>>1656145> Слышал такое слово в слово про C#.Щас бы писать ОС и дрова на языке, который исполняется виртуальной машиной, ммм... (да-да, я знаю, что дотнет кор умеет компилиться в нативный код), но во времена появления сишарпа такого не было и такого ты слышать явно не мог, да и этого не происходило вовсе, а на Расте УЖЕ написана ОС и УЖЕ написано неплохое кол-во системных утилит, как для языка, которому лишь 5 лет. Через 15 лет он убьет Си точно, про кресты не могу сказать.> В реализации linked list на две страницы.И? Обернут в стандартную либу и все, кого это должно ебать, если у тебя программа в итоге защищена от целого класса атак, причем самых опасных.
>>1655988Твой раст нужен только на серверах, и то не нужен, ведь там уже есть питон. Мертворожденная поделка.
>>1656171Он никакой не мой. Но поясни почему, аргументы такие себе. Почему язык, превосходящий другие языки для таких же целей, только старые, не может в перспективе его убить?
>>1656169>дрова на языке, который исполняется виртуальной машиной, ммм..Какбэ... Виртуальные драйвера уже в виндовс95 выполнялись (потому что как ты ещё сделаешь многозадачность на одноядерном процессоре) и писали их думаю на сишке.мимокрестовик
>>1656176>превосходящий другие языкиНа словах пиздунов, а на деле мы имеем Firefox - самое тупое, тормозное, жирнющее говнище из миллиона процессов, которому чтобы отобразить текстовые веб-странички нужен кластер суперкомпьютеров чтобы не тормозить. Вдобавок текущее как шлюха из всех дыр водопадами, просирая бесконечное количество гигабайт памяти. Такая-то скорость, надежность и безопасность, хоть вот прямо щас весь софт на свете переписывай на этом говне, чтобы миру пизда настала.
>>1656192И тут ты такой показываешь тонкий, красивый, лёгкий, полнофункциональный браузер для современного веба.
>>1656145>Первый аргумент объявлен как restrict, значит компилятор имеет полное право подразумевать, что других указателей на window_caption в функцию не передалиСпасибо, добавил переменную buffer через которую теперь делаю.
>>1656236И тут я показал язык, на котором даже его создатели высирают парашу говна, хуже в мире не найти. Теперь подмойся и скройся, выродок.
>>1656344>Сталь — плохой сплав, вон какие грузовики гигантские и дорогие приходится из неё делать, чтобы руду возить. >Покажи лёгкий грузовик, который с такой же задачей справится>Риии, из стали говно тяжеленное делают и чинить сложно!
>>1656465Почему раст сосет, а Си топ? Ладно там кресты, это реально монстр, там реализованы все возможные парадигмы, можн окак байтоебить, так и писать абстракциями чуть ли не как на петоне (на поздних стандартах офк).Но Си? В нем же нет ничего. Да, быстрый, но по бенчмаркам раст == си по скорости, но при этом полностью безопасен в плане памяти. Почему никто не может конструктивно ответить. Нечего ответить по существу? Так так и скажите, что сливаетесь.
>>1656531Ладно братиш ты нас раскрыл, на самом деле мы все данво на расте а тут просто отыгрываем разговор студентов из молодости, давай в раст-тред, там пообщаемся на вопросы твои ответим
>>1656169> на Расте УЖЕ написана ОСНа C# УЖЕ написана ОС> во времена появления сишарпа такого не былоБыло. Те же самые разговоры были, что, мол, сейчас вот заживем. И программы без уязвимостей будут, и сишка уже умерла, и жабке пизда заодно.> И? Обернут в стандартную либу и всеИ все, останется только виртуальную машину добавить. А на сишке это две строки, которые даже в отдельную функцию часто не оборачивают.>>1656176> язык, превосходящий другие языкиСишке ты говоришь "зделой", и оно делает да, с UB, если ты не понимаешь, что ты делаешь, и почему. Расту нужно вылизать анус, чтобы он возможно согласился зделоть, и у тебя все равно будут те же самые проблемы, что и в сишке, потому что без ансейфа в расте можно только хелловорлды писать. В результате мы платим больше и за это имеем лишь больше проблем и потенциальные полпроцента прироста производительности из-за лучшего анализа алиасинга, но когда-нибудь потом.
>>1656531>Почему раст сосет, а Си топ?1. С Проще освоить.2. Есть на любой платформе. Качественный компилятор3. Язык стабильный. 4. Куча справочных материалов.5. Не нужны обертки чтобы использовать сишные либы.6. Куча тулзов для профилирования, статического анализа7. Можно работать за деньги
>>1656678> На C# УЖЕ написана ОССишарп изначально не позиционировался как системный язык, в отличие от раста.> И все, останется только виртуальную машину добавить. А на сишке это две строки, которые даже в отдельную функцию часто не оборачивают.Две строки? Развернуть структуру, написать функции удаления/добавления элемента в список, где опять же могут быть проблемы с памятью.> Сишке ты говоришь "зделой", и оно делает да, с UB, если ты не понимаешь, что ты делаешь, и почему. Расту нужно вылизать анус, чтобы он возможно согласился зделоть, и у тебя все равно будут те же самые проблемы, что и в сишке, потому что без ансейфа в расте можно только хелловорлды писать. В результате мы платим больше и за это имеем лишь больше проблем и потенциальные полпроцента прироста производительности из-за лучшего анализа алиасинга, но когда-нибудь потом.даже уязвимый код в ансейфе почти невозможно поиметь, у растовых бинарях мемори лэйаут абсолютно другой, там переполнения блять в ансейфе не работают, максимум могут быть траблы с указателями, и то в адовом говнокоде. При этом при аудите сорцов можно будет сфокусироваться именно на ансейфе, потому что другое просто неуявимо. И шанс проебать баг, тем более критический, сокращается в охуилярд раз
>>16566851. И проще прострелить себе ебало, ибо сегфолт и Си - братья навек2. Дело времени, причем недолгого3. Стабильный в крашах, мемори ликах, гуляющих указателях, переполнениях, UB? Безусловно4. И? У раста тоже есть книга и пиздатая документация, не аргумент5. Дело времени х2, язык молод, но растет как Алёша на астероидах6. Куда тулзов для статического анализа, а 80% кода на Си имеют дыры, лол7. Огромное количество компаний, которые занимаются блокчейном, уже перешли на раст, ибо там безопасность превыше всего.
>>1656724Угомонись, Раст исправляет какую то одну микроуязвимость, все остальные дыры будут в нем те же
>>1656727В мире нет ни одного зарегитрированного случая взлома растового бинаря. А попытки уже были. Его память неуязвима, там только специально можно что-то сделать
>>1656733Вот когда будет сравнимое количество софта на расте - будут и взломы не будет, он умрет раньше. А пока пишут только всякое говно, которое иначе написали бы даже не на си или крестах, а на питоне.
>>1656742Количество написанного софта в этом случае не повлияет - проблемы Си были известны с момента рождения этого языка. Если вдруг весь мир перейдет на раст - магическим образом не смогут взломать то, что не взламывается, только если нарочито не плодят бэкдоры
>>1656733Ой что это у нас тут, буффер оверфлоу в стандартной либе. А я тебе говорил не высовывайся, обосут
>>1656724Растошизики, успокойтесь. Сишку не сместить, вам только если кресты с гейдева какого-нибудь вымещать, но и то не факт.
>>1656819Сделать PROCESSENTRY32W* дополнительным аргументом, возвращать int-овый статускод. Алсо, у тебя рот в winapi измазан, вытри.
>>1656831Ебан, ты? Важные для компиля/системы статус коды в винапи уже завернуты, для себя возвращай чё хочешь и как хочешь
>>1656754Где рабочий эксплоит к этому, Маня? Даже если в расте есть какая-то там дыра, из-за мемори лэйаута, который устроен не так, как в сишных бинарях, ты не сможешь это эксплуатировать нормально.
>>1656917Ебан, вернись уже в свой тред. Ломают и будут ломать твой Раст, как и сишку, пока мы все на х86 сидим
>>1656955А на других платформах что? По-моему тот же ARM и RISC-V не имеет никакой разницы в плане эксплуатации программмимоанон
>>1656917Если pederust не дает мартышкам срать в память, то это не значит, что выходной бинарь на 100% безопасный
нубас таймЕсть структура SDL_Surface img = NULL;Я хочу загрузить в нее изображение.В обычном варианте это будет выглядеть как:SDL_Surface img = IMG_Load("../img_path/test.png);Но я хочу чтобы это делалось через мою функцию вида:bool loadImageToSurface (SDL_Surface destination, char path)Т.е. она возвращает 0 если все норм, и 1 если ошибка.Вопрос, как в нее надо передавать SDL_surface чтобы функция именно с внешей переменной работала? Через & не работает.
КАК ЖЕ МЕНЯ ЗАЕБАЛА ЕБЛЯ С WCHAR'АМИ ЧТО ЗА ШИЗА>>1657071В чём проблема? Вот так сделай.https://pastebin.com/G6LZ9sS4
>>1656999На других платформах то же самое - если кекогерцы не кукурузные, значит есть всевозможные Side-channel уязвимости, которые даже на сраном жаваскрипте без эксплойта в нейтив код юзаются.
>>1656917>Где рабочий эксплоит к этому, Маня?С козырей зашел, мое увожение. Нельзя написать эксплоид к расту, если растоговно нигде не используется. Нечего взламывать, понимаешь?100% безопасность из коробкиесли нету unsafe, то безопаснорабочих эксплоитов нету <<-- Вы находитесь здесьда, взломали, но ничего серьезногосами виноваты, надо было нормально писать
>>1657110> на сраном жаваскрипте без эксплойта в нейтив код юзаютсяВ лабораторных условиях при правильной фазе луны. Но это никак не относится к нинужности раста.
недавно обнаружил, что хуева туча версий гсс прошла мимо меня - прочила лог, соорудил модный мейкфайл с пиздатыми санитайзерами. использую для тестов.нормально или хуйня? https://pastebin.com/v9mXETRv
>>1657052говорилось именно про уязвимости памяти, а не в общем. Раст мартышке не даст скомпилить бинарь, где есть переполнение/висячий указатель/двойное освобождения памяти.
>>1657134да будет тебе известно есть такое понятие, как proof of concept. Пишут эксплоит, чтобы чисто показать возможность локального/удаленного исполнения кода, дабы показать, что уязвимость не пластмассовая, а найти кого взломать всегда можно.Я тебе открою секрет, его нет просто потому, что его не смогли написать.
>>1657236Есть, но:а) При тестах на такой род уязвимостей можно смело концентрироваться на местах, где есть ансейф, ибо другие места защищены уж точноб) В случае проблем с памятью, в виду специфики лэйаута в памяти растовых бинарей, заиметь контроль над исполнением программы почти нереально. Техники взлома, которые работают в Си и крестах, там бесполезны
>>1657243а какие сейчас техники взлома в плане передачи управления на произвольный код? стек и память разве исполняемые всё ещё?
>>1657245Возвратно-ориентированное программирование, приятного гуглежа. Шеллкод не вхуяривают уже лет как 10, с подключением.
>>1657270>Возвратно-ориентированное программирование, приятного гуглежаи как этому противостоит раст? эта проблема решается на уровне компилятора.
>>1657282Лолшто, как тебе компилятор поможет? Ты знаешь что такео возвратно-ориентированное программирование вообще или нет?В расте ты не моешь писать за пределы буфера и не можешь заебнуть указатели и насрать в кучу. Это никак не связано с тем, что ты сказал.
>>1657219> -Wno-parentheses> -std=c89> нормально или хуйня?Хуйня. А вот прогонять через санитайзеры - это всегда хорошо.>>1657270От ROP уже тоже лет 10 как есть защита, а у x86 даже аппаратная защита в виде shadow stack есть.>>1657288> Лолшто, как тебе компилятор поможет?Канарейки, редзоны, привет.
>>1657288>Лолшто, как тебе компилятор поможет? Ты знаешь что такео возвратно-ориентированное программирование вообще или нет?ты чё такой борзый? дыши ровнее.> В расте ты не моешь писать за пределы буфера и не можешь заебнуть указатели и насрать в кучу. если есть ансейф - то можно. и есть библиотеки, которым ты доверяешь что они безгрешные.> Это никак не связано с тем, что ты сказал.в смысле не связанно? ты затираешь возврат на стеке в заранее известны код, где-то у ret. и прыгаешь дальше, выполняя свою задачу чужими руками. тупо гугл даже выдаёт опцию в гцц, например -fcf-protection . а сколько там стек протекторов
>>1657301>Хуйня. А вот прогонять через санитайзеры - это всегда хорошо.не, не хуйня. я хочу максимальную переносимость. и не хочу печатать лишние скобочки.
просто я сюда захожу пару раз в год и каждый раз вы срётесь про раст. даже интересно стало, о чём можно тереть годами. или мне так показалось. в общем, мне бы друзей найти, а то я пишу в стол и никому ничего не показываю. мотивации всё меньше.
>>1657302> если есть ансейф - то можно. и есть библиотеки, которым ты доверяешь что они безгрешные.Раст на пути юзать только растовые либы.> в смысле не связанно? ты затираешь возврат на стеке в заранее известны код, где-то у ret. и прыгаешь дальше, выполняя свою задачу чужими руками. тупо гугл даже выдаёт опцию в гцц, например -fcf-protection . а сколько там стек протекторов Во-первых, бинари как правило не компилят с этой опцией, особенно если они должны быть быстрыми, так как эта мера имеет сильное влияние на скорость исполнения. Во-вторых, есть модифицированная техника обойти и эту защиту -> https://marcoramilli.com/2016/06/23/from-rop-to-lop-bypassing-control-flow-enforcement/, приятного аппетита и с добрым утром, нашли способ как это обходить еще в 2015-2016. В-третьих, стек протекторы - слабая защита. Если у тебя есть примитив либо на чтение, либо на запась (даже 1 из них сгодится) - ты сливаешь значение протектора и переписываешь его его же значением, чтобы он при возврате не крашнул прогу, либо при примитиве на запись ты записываешь ЗА протектор, сразу перезаписывая сам адрес непосредственно. В-четвертых, на стэке свет клином не сошелся, есть еще куча.
>>1657304> я хочу максимальную переносимостьСкажи, сколько твоих хелловорлдов (в штуках) было скомпилировано и запущено на платформах, где нет поддержки C11?
>>1657322ну, логично что на всякую гайку найдётся болт. не буду спорить, мне не очень интересно. но хорошо, и да, литературу по взломам я читаю только старую из 00х, чисто в развлекательных целях.>>1657326я пишу на старые системы. например спектрум. sdcc вроде есть поддержка, но нет Compound literals.Variable-length arrays.да и смысл в новых стандартах? писал бы на пк - может быть, но тоже вряд ли. просто не вижу смысла.статик ассерт можно самому написать, фикс-типы самому определить. треды поставляются отдельно. атомики - ничего не могу сказать.
Запилил аналог cheat engine, при записе в память нужного участка - падает все приложение сканируемое. Привелегии отладчика получил. Чо не так?
Что значит "взять стека" и "вернуть в стек"? Аноны, поясните что это такое на компьютере, в книге просот хуяк и ни с того ни с чего про какой-то стек пошла речь без его определения. В интернете гуглил ничего не понял. Молю, помогите. Что такое стэк на компьютере?
>>1657793Стек это структура данных в которую можно помещать какую-то информацию. Стек работает по принципу первый пришел - последний вышел. Тоесть если ты положишь в стек сначала 1, потом 2, потом 3. Ты вытаскиваться будет сначала 3, потом 2, потом 1. Почитай внимательней, там скорее всего где-то упоминается что именно за стек. Так как есть некоторые нюансы. Алсо если ты читаешь описание алгоритма то там возможно неявно подразумевается что ты создашь стек который и будешь использовать.
>>1657888а спасибо, я это уже читал.видимо это > если ты читаешь описание алгоритма то там возможно неявно подразумевается что ты создашь стек который и будешь использовать.там описание программы, ну да просто не понял откуда они там стэк взяли. всё спасибо, анчоусы.
>>1657891Еще при запуске программы для нее создается служебная структура-стек которая используется для хранения адресов возврата, аргументов, некоторых переменных. Когда говорят "стек" могут подразумевать ее, но к ней нет прямого разумного способа доступа, поэтому фразочки типа "взять стека" и "вернуть в стек" к ней не применимы. Обычно используется что-то типа "переменная хранится на стеке". А если в него и пишут что-то - то там пишут по адресам.
>>1657497В винде есть привилегии, требующиеся для разных действий, выполняемых системной, их наличие у процесса зависит от способа запуска и от пользователя, под которым процесс запущен. Но даже если программа запущена из-под админа, некоторые привилегии по умолчанию выключены (возьми Process Explorer или Process Hacker, и в свойствах процесса на вкладке Security увидишь). Код включает SeDebugPrivilege. >>1657898> к ней нет прямого разумного способа доступа_alloca()
Есть библиотека состоящая из единственного .h файла. Как её заинклудить в несколько моих? Оно ругается: "<название_функции> уже определено в другом объектном файле"
>>1658186Хмм, не помогло, #pragma once тоже не помогло.Заметил только разницу, если инклудить непосредственно в каждый мой файл, линкер вываливает целую кучу конфликтов, похоже все функции какие есть, а если положить в stdafx.h (который везде заинклужен), тогда выводит конфликты только тех функций, которые я реально вызывал, и их зависимые.
>>1658203Сделай всем функциям static, все заработает, но без -flto код в бинарнике будет дублироваться. Чтобы не дублировался, нужно использовать нормальные библиотеки, как у людей.>>1658572Ну это как TempleOS, только книга.
>>1658572На глаз очень классно, видно, что мужик шарит.Мне кажется, большая часть хейта в его сторону исходит от неосиляторов.
Стоит задача написать брутфорс расшифровщик с одного алгоритма. Естественно надо писать на многоядерное применение, а еще лучше делать это на видеокартах. Понимания как писать для видеократ такую хуету нет, как и для многоядерного паралельного вычисления. Решил посмотрел как там это все для видеокарт делаетя и офигел. Чето не хочется все это изучать про видеокарты ради одной задачи. Что можете посоветовать где копать? И что такая работа может стоить если заказать на стороне?
>>1659454Да вот , сижу читаю про CUDA, правда не хотелось бы привязыватьсяся к nvidia только. Надо потом постмотреть по OpenCl.Ты с OpenCl работал?
>>1659454>>1659535Как удачно, как раз хотел задать о них вопрос.А opencl умер?Последний релиз в 17 году.А то хотел локально на радеоне (мак) на нем попробовать оптимизировать вычислительную задачу, что бы потом не парясь запускать в облаке, на чем-то от Nvidia.А потом смотрю, книги все о нем старые, релизов давно нет.Сейчас есть альтернативы?
>>1660151СпсНо выбор между opencl, hip и cuda (с трансляцией в HIP), все равно стоит.Байтоебы, помогите выбрать, что перспективнее, если у тебя карточка amd.