Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь https://ideone.com/ или http://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или звездочки.Что читать:- Классика от Отцов: http://www.cypress.com/file/56651/download- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html- ООП, например: http://www.cs.rit.edu/%7Eats/books/ooc.pdf- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт) не драфт ищем на торрентах- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)- man/Dash/zealdocsЧем конпелировать:- Очевидный GCC.- clang: оче годно, батя рекомендует.- Intel C++ Compiler: оптимизации, тысячи их.- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.Что еще почитать:http://c-faq.com/FAQ из comp.lang.c. Древний, но все еще актуален.Stephen Prata "C Primer Plus, 6th Edition" (2014)Свежая знает про C89, C99, C11, описывает различия, объемная около тысячи страниц, годная хотя есть некоторые шероховатости, с вопросами, упражнениями и ответами. Читать после K&R или до.Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).Ben Klemens "21st Century C: C Tips from the New School" (2012)Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)Stephen G. Kochan "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+StandardЕще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_CПрошлые треды:- №16: https://arhivach.org/thread/235327/- №17: https://arhivach.org/thread/237852/- №18: https://arhivach.org/thread/243867/- №19: https://arhivach.org/thread/248880/Шапка: http://piratepad.net/bJ1SdmkZyu
>>959643 (OP)Освятил
#ifdef НОВЫЙ_ТРЕДосвятил_тред(959643, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)#endif
>>959653#include <stdarg.h> сцуко!
>>959653Хуевое проектирование.
>>959643 (OP)Имхо, вот эта книга неплохая для вкатывальщиков: http://shop.oreilly.com/product/0636920015482.doОсиливал в оригинале, про качество перевода не знаю.Хотя обложка и оформление слегка ебанутые
>>959661Нет, лучше всего Прата, а затем Керниган-Ритчи
>>959667Судя по оглавлению, книжка, по крайней мере, лучше чем hard way.
Почему в шапке до сих пор не было книги по указателям?http://shop.oreilly.com/product/0636920028000.do
>>959684Книга? По указателям? Следующей будет книга по булевой логике, хотя подожди-ка...
>>959661А что там вкатываться в си то? Открываешь стандарт и читаешь, хули, это не с++Не можешь сходу осилить стандарт, учишь сначала питон
>>959699я вот такую годноту там нашел:#define RAII_VARIABLE(vartype,varname,initval,dtor) \ void _dtor_ ## varname (vartype v) { dtor(v); } \ vartype varname __attribute__((cleanup(_dtor_ ## varname))) = (initval)автодестпуктор для мэлока
>>959746в плюсах тоже самое
Сегодня ты сосал хуиА завтра пишешь ты на Си
>>959903>__attribute__Это из какого стандарта?>>959906Стандарт плюсов в два раза толще. Чтобы из 1300 страниц выудить полезную информацию о том, как писать на языке, надо иметь недюжий ум.
анон хэлп. как посчитать максимальную связку из нулей. у меня получилось посчитать общее количество нулей.как мне сравнить одну последовательность нулей с другой?
>>960090Как обычно ищут максимум: заведи max_length = 0, max_offset = -1, а когда очередная последовательность нулей закончится, сравни ее длину с max_length, и если она больше, запомни новую max_length и офсет последовательности (если нужно). Алсо, сейчас у тебя просто количество нулей считается, а тебе нужно детектить переход между ноль-неноль и обратно.
>>960088>__attribute__из гцц>плюсов в два раза толщепишу все гуи на кют ложив хуй на стандарты, все отлично. стандарты это мокрописька для хипстеров.
>>960090else break;
>>959643 (OP)Ананасы, как правильно сделать проприетарную bare metal либу? То бишь нужно скомпилять код и поставлять в виде какого-нить бинарного формата + хедер с прототипами функций, доступных пользователю и всё это добро должно нормально линковаться. Очевидная статическая либа из объектных файлов не подходит, т.к. таким способом будут светиться все внешние функции/переменные из объектных файлов, что довольно некрасиво.
Почему когда я смотрю обычные заголовочные файлы stdio.h, например то вижу тонны дефайнов, несколько объявлений функций, а самих функций не вижу? Где они?
>>960119Скомпилированы и лежат скорее всего в виде shared либы где-то в /lib
>>960097>пишу все гуи на кют ложив хуй на стандарты, все отлично. ты какой-то даун совсем отбитый, советую рассмотреть суицид
>>960118Посмотри на sqlite amalgamation - собирай (скриптами) гигантский сорс и компилируй его (ну или инклудь .c в .c). Не делай символы внешними, используй static где только можно.
>>960124Неужели это всё нельзя сделать силами конпелятора или линковщика и нужно городить костыли? Ведь shared либы для больших операционок легко чистятся от излишних экспортируемых символов, даже можно всякими __attribuute__ в gcc явно задавать, что нужно всем видеть, а что – нет.
>>960127Может лучше просто скомпилировать либу в готовый машинный бинарник, написать функции-обёртки (т.е. обертки тех функций, которые должны эскпортироваться), которые вызывают _настоящую_ функцию по конкретному адресу, а также написать скрипт для линковщика?
>>960127Можно сделать средствами линковщика. Можно перепидорасить объектники как угодно, но подход sqlite требует меньше всего трудозатрат.
>>959906>в плюсах тоже самоеТолько стандарт си++ никто толком даже из комитета не читал. Была же история, что какой-то чувак в стандарт по шаблонам написал стишок и его никто не заметил, т.к. никто не читал. В итоге так и приняли стандарт вместе с этой хуйней
>>960119Мне тоже нудобно, хотел на реализацию глянуть и обосрался.
>>960154*неудобно
>>960155Ну наконец-то признался, что все эти твои имаксы говно.
>>960148Даже не поленился и нашел: страница 362 стандарта 2013 - пункт 14.7.3 Explicit specialization, подпункт 7, самый конец абзаца:When writing a specialization, be careful about its location; or to make it compile will be such a trial as to kindle its self-immolation.
>>960132В общем-то всё получилось намного проще: нужно всего-то сделатьld -r куча_объектных_файлов -o yoba.ostrip yoba.o --strip-all --discard-all (или какой-либо другой способ избавиться от неугодных символов)Подход с запихиванием всех исходников в один файл хоть и полезный для оптимизаций, но нахуй не нужен в моем случае по крайней мере пока хватает места на флешке, лол
>>960161Neosilator please.
>>960183Я? У меня никаких неудобств из-за хедеров не возникает.
>>960200Тупорылый петухевен, у тех двух ньюфагов тоже нет никаких неудобств с просмотром хедеров. До них не доходит, что реализации функций в хедере уже скомпилированны и не доступны для просмотра.этот дебил у вас тут - местный клоун?
https://arhivach.org/thread/248880/#959007Я вчера ночью придумал решение.Короче: http://www.stanford.edu/class/ee398a/handouts/papers/WittenACM87ArithmCoding.pdfДлинее: Хранить выборки в массиве ты не сможешь, если число будет слишком большим (число выборок - примерно N! ). Тебе нужно закодировать упорядоченную выборку из набора числом, и потом по требованию разворачивать выборку в строку или ещё во что (то есть, у тебя массива не будет. У тебя будет функция).Упорядоченная выборка некоторого размера M из набора N - это вектор из M чисел (индексов в наборе) от 1 до N-k где k - номер числа в векторе (число оставшихся вариантов зависит от того, сколько элементов уже выбрано, и каждое число обозначает номер выбранного продолжения в списке оставшихся).Когда ты сжимаешь текст арифметическим кодированием, ты используешь индексы. Вот и здесь у тебя индексы, их ты и сжимаешь в одно число, и после этого каждое число ты сможешь развернуть в уникальную перестановку (зная размеры набора и выборки).Например, выборка {1,7,4,8,9} из {0 ... 9} будет представлена дробью1/(101)+6/(910)+3/(8910)+5/(78910)+5/(6789*10)10 - размер набора.EOL-символ тебе не нужен.
>>960420P.S. Если тебе нужно объединить выборки всех размеров в одну, то EOL-символ тебе понадобится.
>>959643 (OP)На вашем говне еще что-нибудь пишут? Кроме корявых драйверов к какому-нибудь линуксу?
>>960426>вашем говнена нем написано ваше говно
>>960426Все программы от А до Я на C99/C11 пишутся.
Кто-нибудь ковырял MetaC? Годная штука?
>>959643 (OP)Аноны, у меня сортировка данных, вывел сам процесс в функцию, нужно посчитать кол-во обменов и перестановок. Можно задать цикл со счетом обменов/перестановок в самой функции, чтобы потом вывести это кол-во в консоль?
>>960119>Где они?Можешь купить у майкрософт.>Source code for runtime libraries is included in Visual C++[15] for reference and debugging (e.g. in C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src).Как это устроено у красноглазиков не знаю, но думаю надо будет сделать apt-get install libc6-dev или нечто подобное.
>>960167В голосяндру.
Фолкс, где искать работу? Пытаюсь учить всякие джавы, пхп... такая залупа хз.. не нравится мне всё это. С/С++ ближе, но работы чёт мало (или я просто не там ищу). Если и есть вакансия, то требуется кулхацкер со стажем пицот лет, и чтоб пришёл и порядок навёл без помощи. А где взять работу совсем зелёненькому, как я? Я вот недавно откинулся с универа. Не нуб, но и не чел, который придёт и возьмёт всё под свой контроль. Как быть? Нахуй идти не хочется.
>>960764Обычно у вуза тем более технического есть программы содействия трудоустройству выпускников, в твоем нет?
>>960764Дрочи электронику и иди пилить прошивки или ищи более нормальные языки. С поиском работы на Си в России все крайне хуево, всем нужны веб-макаки.
>>960764Ну щас тенденции такие. Байтоебство осталось в 90-нулевых, сейчас в рашке онли тырпрайз, делать сайты или писать приложения под ведроид. Но ты всегда можешь завести трактор и работать в нормальной ит компании, где еще пишут на плюсах/си - разные интол(интернет вещей), геймдев компании и тд
>>960750In any linux stdlibc installed by defaul in /lib64 headers in /usr/include
>>960779>>960782>>960785Спасибо, посоны, за эдвайсы. В вузе вроде были приколюхи в виде летних школ, курсов там каких-то, но я всё проебал, занимаясь полезными (нет) делами. Теперь вот чекнул вакансии, а там всякие модные слова и ваще всё то, что я не знаю и не умею. Прикольно вышку получил, хех. Не гоню на вуз, что типо зря учился, но кушать тоже хочется.. вот и думаю - что делать и куда идти.
Я правильно текст из файла в строку пидорю? https://a.vidga.me/sgeyey.c
>>9609061) Закрывать-то файл зачем? Сделай rewind или fseek(file, 0, SEEK_SET) после ftell().2) Ты уже знаешь размер, но читаешь посимвольно. Делай сразу fread всего файла, пусть рантайм разбирается и читает так, как ему там удобнее читать.3) Выделяешь n байт, читаешь n байт. В результате строка у тебя останется не завершенной нулем (если в файле нулевой байт не встретится). Выделяй n+1, явно делай str[m] = '\0' после чтения, где m = количество прочитанных байтов.
>>959643 (OP)Добрый вечер, могу ли я в функцию ввести цикл для подсчета количества сравнений и обменов?
>>960935Хуй знает, что это и зачем, но либо считай руками (для сравнений счетчик можно прямо в сравнении увеличивать: if (compare_counter++, foo < bar) { ...), для обменов тем более никаких проблем. Либо сделай отдельные фукнции compare и exchange, и увеличивай счетчик в них.
Хочу изучить с++ чтобы делать игры. В 2017 он еще актуален для гейдева?
>>960935> Кол-во сравненийЭто же просто обмен двух элементов местами. К чему этот комментарий? Массивы чтоль сортируешь?
>>960955В 2017 он единственный язык, на котором пишут игры.
>>960955Актуален, но лучше бери Unity и C#, быстрее вкатишься, а не погрязнешь в хелловорлдах и движкостроительстве. Алсо, тут тред не про кресты, вообще сходи к детям в /gd/ лучше.
>>960964> лучше бери Unity и C#Попробовал сначала на жаве, но 90мб в озу на перемещение спрайта меня как то оттолкнуло. Юнити тоже выдает много мусора. Схожу в общем посмотрю что в /гд говорят.
>>960967В юнити и вообще готовых движках ты нормального потребления не добьёшься, да и производительности нормальной тоже. Зато программить на этом сможет даже ребёнок, всё максимально просто.Если же хочешь, чтобы ресурсов мало выжирало и летало, то пердоль OpenGL/Vulkan на Си/Крестах, но на этом ты само-собой ультра йобу в два клика не сделаешь, тут думать нужно.
>>960967> 90 мбДай угадаю, а без спрайта хелловорлд ты не мерял? А чем всякие commit/reserve/heap отличаются не знаешь? Ничего плохого в 90 мб нет, если это не 90 мб на каждый спрайт. Тот же майнкрафт на моем старом 2 ядраодин целерон-2 гига середины 2000х упирается в проц, а не в память.
>>960972Вооот, уже начинают советовать делать свой движок... да еще на вулкане. Ты сам свой движок закончил? Ты представляешь, сколько нужно итераций "сжечь и переписать", чтобы у человека без предыдущего опыта в движке появилась архитектура? Сколько человекочасов, чтобы добиться современного уровня графики? Сколько соломки нужно подстелить для legacy-дров с багами? Сколько времени можно было бы потратить на разработку самой игры?Сам пилю йобу на С в свободное время, но я старый и глупый, не повторяйте моих ошибок.
>>960978Если у него есть желание, то не вижу проблемы. В любом случае я сказал как есть:Движки — быстрая разработка, тормоза, высокое потребление памяти.Велосипеды — долгая разработка, высокая производительность, маленькое потребление памяти.Алсо, если он хочет пилить 2D игорю, то тут всё просто.
>>960978>Сам пилю йобу на С в свободное времяПокажи скриншоты или что у тебя есть. Интересно.мимо-крокодил
>>960978>legacyНенужно совершенно.>дровmesa-vulkan твои дрова, сам движок под wayland пили.>человекочасовТы же не йобу собрался разрабатывать, сделай простую либу чтобы импортировались .blender файлы и все.
>>961078> legacy Ненужно совершенно.Поэтому удел линукса - сервера.> mesa-vulkan твои дрова, сам движок под wayland пили.А почему это плохой совет, читай двумя строчками выше.> сделай простую либу чтобы импортировались .blender файлы> простую либу> простую> .blender файлыА чего не .mb сразу?Неа, совсем не палишься
Про типы с точной шириной типа int16_t, uint32_t вики говорит, что не все системы их поддерживают. Кто-нибудь навскидку назовёт в пример подобную систему?
>>961203Системы, где байт не кратен 8 битам
>>960785Живу в рашкованском миллионнике и байтоёбствую под эмбедед и не только в продуктовой компании. ЧЯДНТ?
>>961217А много таких систем-то? Из популярных я имею в виду.Не, ну я предполагал, что Сетунь-70 не поддерживает подобное, но из современных, есть какие-то значимые примеры?Avr могу предположить, но там только в силу размера же.
>>961219Что за компани? Или это типичная оборонка?
>>961203> Кто-нибудь навскидку назовёт в пример подобную систему?DSP, где память адресуется 24- или 32-битными словами?
>>960764У нефтянки и прочих недрокопателей софт до сих пор пишется и поддерживается на с/с++.
>>960215Насколько я помню этот дебил бородатый и самый скилловый тут, а ты можешь пройти на хуй
Помогите написать генератор, типа питоновского/шарповского yield как на пикрелейтед. Код ниже почему-то вылетает с ошибкой:#include <stdio.h>#include <setjmp.h>jmp_buf env_generator;int range_generator(int max){ int val = setjmp(env_generator); while (val < max) { val++; return val; } return -1;}void main(){ for (int result = range_generator(10); result >= 0; longjmp(env_generator, result)) { printf("Result: %d\n", result); }}
>>961674>генератор, типа питоновского/шарповского yieldнахуя? если нужно нечто подобное, используй итераторы, а не такие кривые велосипеды
>>961696Какие итераторы? Мне нужно на чистом Си.Генератор, который выдавал бы значения внутрь цикла for и while (например, числа от 1 до 10) без хранения их в памяти.
>>961698Всё равно тебя не понимаю. 1) НАХУЯ тебе этот генератор в C??2) setjmp - эту ебанину крайне редко используют в очень узких задачах. Ты уверен, что это надо в твоём проекте? Что ты пытаешься сделать?
>>961698>без хранения в памятиМанямирок, отдельно функция и переменная не подойдет?Если цикл один то и функции не надо.Но вот итераторы раз они тебе нужны.http://stackoverflow.com/questions/4961860/iterator-in-c-language#4962050
>>961698В С так не делается, не переноси свои ебанутые привычки с первого языка на все остальные, учи C и как на нем пишется код, а не переводи в своей голове с питона.
>>961712как хочет так пусть и делает. зато быстрей вкатится.
>>961711Есть подозрение что он хотел отложенно вычислять массив по мере итерации.
>>961723Не соснет ли такое решение по сравнению с обычным последовательным? Вычисли сразу все а потом делай что хотел.
>>961725Соснет, этот дебил хочет функциональщины в насквозь процедурном языке. Для этого и изобрели пайтон.
>>961698>Генератор, который выдавал бы значения внутрь цикла for и while (например, числа от 1 до 10) без хранения их в памяти. Освобождай вручную и передавай ссылки, но это все хуита.
>>961709Библиотеку для коллекций с ленивыми вычислениями.
>>961723>>961727>>961728проиграл с тупорылой школоты
>>961727На С можно функционально писать. Но меру всегда надо знать ато бутет сосо в производительности или даже стековерфлоу. Лучшего кода за функциональный нет, писать удобно, никакого дублирования, маленькие исходники, но вызов функции сам по себе потребляет ресурсы.
>>961674longjmp предназначен для переходов внутри функции, или для "выпрыгивания" по стеку вызовов наружу. Если функция, которая вызвала setjmp, завершилась, можешь считать, что jmp_buf содержит мусор.
printf("Введите a кок-пок и т.д. и т.п.\n");success=scanf("%d", &a);printf("Введите b и с\n");uspeh=scanf("%d %d", &b, &c);Не могу заставить scanf считывать с новой строки b.Просто пользователь может после первого сообщения ввести два числа, в переменную a попадёт первое введённое, а вот scanf-ить числа b и с уже надо со следующей строки.А у меня если юзер введёт после первого сообщения "14 88", а после второго "13 37", тоа=14b=88c=13А надо:a=14b=13c=37success=scanf("%d\n", &a) не помогает
>>961828Считывай сугубо по одной переменной.
>>961832Дак лол, не могу же.Энивэй, если я попрошу вводить по одной цифре, то пользователь может ввести две по описанию задания. Алсо, он может ввести N переменных. Надо считать только первую, а потом заставить следующие scanf считывать с другой строки.putchar('\n') не помогает
>>961841> по одной цифреПо одному числу, фикс.> он может ввести N переменныхN чисел, фикс2
>>961841Почему не можешь?Программа должна писатся для трезвого пользователя.Можешь все за один scanf считать.
>>961843> Программа должна писатся для трезвого пользователя.Не у меня. Понимаешь, я мог бы всё аккуратно сделать через гетчары, перевод в числа и обстоятельные проверки всего и вся, но я так не сделаю, пока меня не обоссут, а пока просто сканфики скобачки.> Можешь все за один scanf считать.Не могу. Там дальше в программе надо будет считать разные данные в зависимости от хода программы, это и мешает, причём ужасно.
>>961828>>961844Решил так. Добавляю переменную char trash; while(trash!='\n') scanf("%c", &trash);Переменная сама никому не нужна, просто для прокрутки.
>>961848fflush? стандартных путей нет, кроме да, считывания.
>>961848> scanf для одного символа
>>961889> стандартных путей нет, кроме да, считывания.Это и есть стандартный путь после scanf failure. Вычитать остаток строки и запросить данные заново.
>>961896Пыня плиз.Железо все стерпит, процессоры с каждым годом все мощнее, 5GHz, дохуя ядер, scanf это ничто.
>>961828>>961848Сожрать остаток строки можно самим scanf-ом: scanf("%∗[^\r\n]"). Взять число и выкинуть остаток строки можно, чуть исправив формат: scanf("%d%∗[^\r\n]", &n) (звездочки только на нормальные поменяй). С чтением одного числа из одной строки (а также нескольих чисел из обязательно одной строки) сложнее: самый простой подход - использовать fgets+sscanf, самый правильный - fgets+strtok+strtoul и прочие strtoX.
>>961896Дак чтоб под строку не выделять память
>>961973Спасибо, годно
>>961987он наверно про то, что getc (или как оно там) менее тяжеловесен.
>>961995Дак да, но блин, я уже сталкивался с таким, что позиция, с которой будет считан следующий getchar() не совпадает с позицией, с которой будет считан следующий scanf().Или у меня тогда проблемы были не с этим. Но приходилось писать scanf("%d\n") - только тогда всё работало В общем, я осторожничаю с этими вот читалками.
>>961896В прочем, ты был прав. С гетчаром всё работает, я не смог сбить его с толку
Ладно, поцоны, как вы парсер пишите? Например, заголовка ip пакета. Для мeня пока бeст таeр это сдeлать структурку с битовыми полями и обeрнуть ee в #pragma pack. Или как-то так. Ну и входной массив привeсти к типу.Минусы: eбиная дирeктива компилятора, что шатаeт кросплатформeннсть, и нeвозможно динамичeски описать поля структуры, eсли парсятся извeстной формы набор байт.Какиe ваши прeдложeния?
>>962115https://en.wikipedia.org/wiki/Parsing
>>962115На, попробуй http://www.colm.net/open-source/ragel/
>>962115а, кстати, не ебу о чём ты там, но структуру можно объявлять динамически внутри функции.типо какf(a,b) {struct a { c[a];d;}}
>>962123У мeня гцц трeбуeт обязательно числа в квадратных скобках
>>962126ну чё, перестал, требовать? типы проставь
>>962115В прошлом треде (или позапрошлом, не помню) дохуя об этом срали, сходи почитай - ссылки в шапке.
>>961828Диванный нуб залетает в тред. Вылечил проблему банальным fflush(stdin); перед втором сканфом.
>>962205А я и не отрицаю.Тот самый диванный нуб
сисюны, реквистирую алгоритмы разбиение текста на строки типа Knuth-Plass Line Wrapping
>>962245Лол, диванный это я. 3-й курс шараги еще.
>>962205> fflush(stdin);UB
>>962368И это еще раз иллюстрирует нам, насколько сильно комитет злоупотребляет UB. Здесь вполне можно было бы обойтись unspecified behavior.
>>962397>И это еще раз иллюстрирует нам, насколько сильно комитет злоупотребляет UB.Не дорос ты определять, злоупотребляют или нет.
>>962148Удивитeльно, но да. Но крeстах совeршeнно нe хочeт так дeлать. Совeршeнно нe понятно, почему в сишкe работаeт
>>962456> Совeршeнно нe понятно, почему в сишкe работаeтПотому что в C99 есть VLA, а в C++ их не взяли
>>959643 (OP)Как посчитать эти ёбаные числа?
>>9625288ll 1024 1024 * 1024
>>9625318ll x 1024 x 1024 x 1024
>>962528Ну или long long gigs
>>962528Рофл size_t это саный int чем же считать память??
>>962537>size_t это саный intштобля
>>962538Он второй тред уже срет своими гигабайтами, которые у него не выделяются.
>>962538Пик>>962540Я разобрался, кароче когда пофиксил число и оно стало не ноль выяснилось что винда тратит половину свободного места в никуда, я в итоге выделил но меньше.
>>962542Если у тебя size_t - unsigned int, значит у тебя 32-битная система, и выделить 8 гигов ты не можешь никак. И в закомментированной строчке на пике у тебя именно 8 гигов, а не 1. Память мы считаем в байтах, а не в битах.
>>962547Это я понял, но я также слышал что-то про pae и я не врубаю что это тогда если с ним всё равно ничё нельзя на 32битной
>>962549Я тебе уже пояснял за PAE (в винде это AWE). Выделяешь кусок адресного пространства, сколько не жалко - это "окно", и когда тебе нужно что-то положить в память или прочитать, просишь систему в это "окно" показать кусок оперативки. Выделить так можно более 4 Гб, но видно одновременно будет только столько, сколько размер твоего окна. Т.е., при желании ты можешь несжатую картинку 65536655364 байта (16 гигов) положить в память, но не можешь без дополнительных телодвижений обращаться к рандомному пикселу внутри нее. В 64-битной системе ты можешь делать банально bitmap[y * width + x]), а с PAE ты сосешь хуй: чтобы что-то прочитать или записать, тебе придется "отобразить" регион, содержащий пиксел в твое "окно", и потом внутри этого окна с пикселами работать, по необходимости сдвигая окно (т.е., отображая на него различные страницы физической памяти). Гугли AllocateUserPhysicalPages/MapUserPhysicalPages, только нахуя тебе это надо - непонятно.
>>962549причём тут язык c? ты не как не можешь иметь на 32битной машине больше адресов чем 4к. это по стандарту невозможно.не знаю как работали всякие виндовс сервисы - наверно также, на один процесс 4к адресов, просто сумма реальных больше.
>>962561вот интересно, в компиляторах нет таких расширений?
>>962570В компиляторах Си они нахуй не нужны. Это достаточно низкоуровневый язык, чтобы извращениями занимался не компилятор втихомолку, а ты сам и явно. У тебя задача-то какая? Почему ты не можешь воткнуть 64-битную систему, если есть потребность в огромном адресном пространстве?
>>962574я не он. просто подумал что это же реально эмулировать.
>>962577хотя нет, как же тогда системные библиотеки с их типами. да, это уже вопрос ос а не компилятора, наверно.
>>962577Смысла нет. Это был переходный механизм, когда 64-битные наборы инструкций еще не существовали (или были мало распространены), а возможность воткнуть более 4 Гб уже была. Да и юзкейсов, когда тебе нужно, много гигов на один процесс, не так уж много. Гораздо чаще хочется иметь много гигов для разных процессов - вот эту задачу PAE, в общем-то, и решает.
>>962549>я также слышал что-то про pae Сходи посмотри на расшифровку это аббревиатуры, довен.
Господа, вопрос скорее даже не по С, а по линкусу и сетям. Пытаюсь сделать через raw-сокеты отправку пакетов с спуфом ип-адреса источника. Трабла в том, что софт запускается на роутере с включенным NAT и этот NAT заменяет в отправляемых пакетах любой адрес источника на внешний ип-адрес роутера, т.е. спуф идет по пизде.Если ли способ может через установку какой-либо опции для сокета или может твик ядра линукса через /proc/sys/net/ipv4/ или еще как-то заставить блядский NAT не подменять адрес источника в пакетах, которые были сгенерированы на самом роутере?
>>961896А число без scanf как считать?
>>963023Тебя ебёт это, что ли?
>>963023getchar() считывает символы, число можно собрать по цифрам
Аноны, тут такое дело, курсач нужно запилить, исходные условия: "шоб использовал С/с++ и шоб с базами данных, ну и не совсем простое.Таки вопрос:Что б такого написать? не совсем нуб, но и сверхъестественное не надо, сроки как-никак. Думаю что-то типа библиотеки замутить, но выглядить слишком просто.
>>963141sqlite+CСлелай телефонную книку
>>963195Как усложнить можно?P.s. Спасибо)
>>963229Учет доходов и расходов семейного бюджета?
>>963233О.оЛадно, енижка так книжка.
>>963238Усложни, один человек может иметь несколько номеров.
>>963238Можешь еще мыльце или вк добавить к записям.
>>963240Окай, спасибо за идеи, няш :3
>>959643 (OP)Как после каждого занесения элемента в массив увеличить a на один, а потом вывести эту a в консоль, ничего не работает, выводиться всегда ноль.
>>963574Самый глубокий цикл не выполняется ни разу скорее всего.
>>963575Вся функция работает правильно, мне нужно только посчитать a и b.
>>963577А где ты "а" в консоль выводишь?
>>963579Ну не стал весь код кидать.Через printf("%d",a);Возможно в выводе ошибка, первый раз с функцией работаю
>>963580Вывод в теле функции происходит?
>>963582
>>963585Они же у тебя локальные. Ты выводишь какие-то другие "а" и "b"
>>963585А как вывести? Ну ту a которая в функции считается?
>>963588В конце функции написать вывод, либо сделать функцию, возвращающую значение
>>963589Спасибо, анон, что-то не дошло, что проблема в выводе
Ребятки,имеется массив 4х4, нужно найти минимальный элемент среди положительных ниже главной диагонали, подскажите как это сделать пожалуйста. Пока что вот что имею.Там дальше два счетчика для i и j должно быть как я понимаю,потом if(i<j),дальше без понятия как действовать.
>>963797Привет, лабодаун. Разевай ротешник, будем в него ссать всем тредом.
>>963799А, это у вас тут такие правила , я понял. Больше не буду значит тут помощи просить. А в ротешник сам себе нассы ,дядя.
>>963797>дальше без понятия как действовать.учись маршироавать
Ужас тут что одни школьники сидят?
>>964021Вообще нет, походу дохуя в крестотред перебралось.
Задался вопросом, а как обычно нормальные люди реализуют так сказать динамическое создание указателя. К примеру есть у меня список односвязный, указатель на голову я создаю в мейне или делаю глобальным. Ну и заполняю список и работаю с ним. А если понадобится еще один список? Получается нужна отдельная функция создающая указатель, потом этот указатель таскать за собой везде и нигде не потерять. Или нужно сразу создавать динамический массив указателей?
>>964248Делай массив, указатели не забывай освобождать.Конечно лучше все на перед статически инициализировать.
>>964263Спасибо
>>959643 (OP)Ньюфаг ворвался в тред.Собираюсь начинать.Как настроить чертов visual studio под C?
>>964457Ставь vim
>>964459вместо visual studio?
>>964461Да.
>>964462спасибо,антон
>>964457Никак, ничего настраивать не нужно. Ставишь Visual Studio, создаешь пустой C++-проект, добавляешь новый файл, сохраняешь как .c.
В Си есть что-то вроде "static typedef int myint;"? Не хочу, чтобы этот тайпдеф вылезал за пределы .h файла.
>>964631Нет и не может быть. Препроцессор, встречая #include, просто заменяет эту директиву на указанный в ней файл, поэтому для компилятора "пределов .h файла" просто не существует, существует только единица компиляции, а уж из чего ее препроцессор собрал, компилятору насрать.
>>964632Бля, и с функциями та же хуйня. А я почему-то думал, что static функция за пределы своего файла не выползает. Пизда.
>>964633static-функция не выползает за пределы юнита. Если ты пишешь header-only либу, то во-первых, сделай дефайн, чтобы различать включение для деклараций (многократно в проекте) и включение для реализации (однократно, с дефайном), а во-вторых, используй неймспейсы для бедных - добавь уникальный префикс или суффикс ко всем используемым символам. MyYobaLiba_ вполне подойдет. И похуй, что там будет торчать после этого.
>>964634Да я наверно просто от .h-only откажусь, так логичнее будет.Это нужно будет создать .h файл с хедерами функций либы, скомпилять сошку "gcc -shared -o lib.so -fPIC lib.h", и для использования моей либы придётся просто инклюдить .h файл и компилять с -Llib.so, я правильно понимаю? Ни разу так не делал, всегда .h файлами обходился.Тайпдефов либы тоже видно не будет?
>>964636Header-only место в аду. Ты ведь не набиваешь параметры компиляции в командной строке руками, ведь правда?
такс такс, пивасик есть, осталось решить, за кого болеть то?
это я не вам. лаба-петухи.
>>959643 (OP)Собрал на visual studio проект.Поменял разрешение в c..Запустил через конфигурацию решения release.Пишет.что не удаётся найти указанный файл
>>965153Антивирусы есть? Какая студия? С нуля ставил? Есть ли файл на диске? Есть ли русские буквы в пути?
Проверь, что у тебя рантайм нужный стоит. Он ставится автоматически, но мало ли. Скачай dependency walker, посмотри какие .dll получившийся .exe хочет.
>>965153Ану-ка попробуй собрать в Fedora GNU/Linux
>>965153Спермопроблемы-спермопроблемушки
мда, уровень тредика падает на глазах, местные уже не могут скомпилировать программу и не знают что такое точки компиляции.
>>964897> Ты ведь не набиваешь параметры компиляции в командной строке руками, ведь правда? Вчера осваивал Makefile, было больно.Прошу немного пояснить мне за либы. В моей либе есть структуры, много структур. И, допустим, мне нужно, чтобы пользователь либы мог работать с одной из них, например со структурой "type". Если я просто слинкуюсь с либой и начну использовать эту стуктуру как тип, то компилятор ругнётся. В структуре много вложенных структур, например "type->str", но в .h файле либы, который я создал во избежания еггогов просто написано:typedef struct {void *str; // Хотя в либе это большая структура} type;При таком варианте можно обратится к элементам структуры "type->str"? Сам проверить сейчас не могу, да и долго это, ответь же ты, тредик.> Header-only место в аду.Вот ты так говоришь, а пока от необходимости делать отдельную библиотеку я испытываю одни неудобства. Как минимум всё переусложнено.Может кто доставить, так скажем, туториал о оформлении своей библиотеки? Вчера искал, не нашёл.
>>965235это не местные, это залётные
>>964631>тайпдеф >вылезал за пределы .h файлаче ты высрал, как ты этим пользоваться будешь тогда
>>965236>туториал о оформлении своей библиотекиman so
>>965249Стикероблядок, съеби. Мне нужны общие принципы а не технические подробности.
>>965251>общие принципыman shared library
>>965252Пиздец, чего только обезьяна не надобавляла в эту анонимную социалочку. Пойду лучше на возрождённую мяту. Сажи этой помойке.
>>965253Да-да, пиздуй на свой парашный 0-чан, вкатывальщикю Там тебе будут радынет.
>>959643 (OP)Какая же годнота С, по сравнению с жавоскриптом.Сейчас дочитываю первую книгу, с синтаксисом разобрался, подскажите что можно написать на С?
>>965307Сегфолт
>>965307Ядро линукса
>>965307> подскажите что можно написать на С?Все что угодно. Просто тратить время чтоб написать на Си какую то веб-перделку никто не будет, на нем пишутся сложные хуитки, быстрые хуитки (если не делать говнокод), много всего. В первый раз я написал небольшую чит-программу которая использовала драйвер для скрытия от античит систем, банальные хуки в таблице SSDT ядра Windows.
>>965312>сложные хуитки>хуки Школьник, плес.
>>965329Я уже не школьник, когда впервые этим занимался тогда был школьником, дико доставляло копаться в ядре. Всяким JS макакам вряд ли такой адреналин доставляет их макакинг, верно?>хукив usermode довольно сложно реализовать правильные Inline хуки, т.к требуется дизассемблер длинны функций, иначе можно испортить все.
>>965331Системное программирование немногим сложнее веб-параши.Вот такую штуку:https://ru.wikipedia.org/wiki/Apache_Sparkна Си не напишешь.
>>965334>Системное программирование немногим сложнее веб-парашиНайс манямирок
>>965312В том то и дело, что это совсем другой мир. Тут уже залетный из жс отписался, но как по мне, веб быстро надоедает. Даже несмотря на "обилие" языков, по сути все одно и тоже. А фронт-енд это такая хня, что лучше туда не лезть вообще. И дело не в сложности, как раз сложного там мало, но все приедается быстро.Поэтому и пал выбор на С.
>>965340манямирок тупых байтоебов, не знающих алгоритмов и J-нотации и считающих, что выучить набор инструкций процессора сложнее, чем набор классов и методов в веб-фреймворке
>>965340манямирок тупых байтоебов, не знающих алгоритмов и O-нотации и считающих, что выучить набор инструкций процессора сложнее, чем набор классов и методов в веб-фреймворке
>>965363>>965362Лол
Байтоёбство включает в себя:1. Императивный стиль программирования как начало байтоёбского пути.2. Дрочка на машинно-ориентированные типы данных (собственно, основной симптом байтоёбства) и последующее за ней закономерное возмездие байтомудакам в виде big endian vs. little-endian, особенности обработки чисел с плавающей точкой и.т.д.3. Предтерминальные стадии байтоёбства - интринсикоёбство и его более тяжёлая форма - инлайн-ассемблероёбство. Подсадка начинается с убеждённости поциента в необходимости ручками использовать SIMD -инструкции.4. Терминальная стадия, как итог п.3, тру-ассемблероёбство и "хроническая низкоуровневая оптимизация головного мозга"
В нашем мире, к счастью, подобные симптомы с распространением java, C# и прочей "замещающей терапии" встречаются реже, однако остались две отрасли, входящие в зону риска:1. Гейдев. Байтоёбство в гейдеве берёт своё начало в 70х-80х, поскольку именно тогда зародилась традиция байтоёбства в геймдеве. Обязаны этим, в основном, восьмибитным соснолям и домашним компьютерам, которые, обладая малым объёмом ОЗУ и имея скудные средства программирования, требовали делать на них ёба-игры. Эта традиция продолжилась и далее, всё благодаря тем же консолям, на которых консолерабы должны были выпускать игры 5 лет, задрачивая их убогие байтоёбские архитектуры по полной. К сожалению, подобная практика перешла и на ПК, где байтоёбство, в общем-то не так оправдано. К слову байтоёбам-игроделам дали шанс выбраться из этой трясины в 2002 году, когда майкрософт запилила дуднет и менеджед дайректикс к нему. Но байтоёбы остались верны своим указателям, плюсам и байтоёбской оптимизации. Зашоренность, верность привычкам, безыдейность, десу.2. Эмбеддед. Причины почти всё те же, что и в гейдеве. Маломощное железо, пара сотен байт озу, деревянные игрушки, прибитые к полу и.т.д. К этому прибавляется огромное количество разных железок разномастных архитектур, для которых нет толковых тулчейнов. Из хорошего - в последние годы байтоёбство в этой сфере потихоньку излечивается, спасибо дядям из ARM co ltd, сделавшим свою архитектуру более менее распространённым стандартом среди всех архитектур и огромному количеству появившихся фреймворков и компиляторов языков для этой платформы.
Так же распространено ложное утверждение что байтоёбство крайне необходимо в системном программировании. На самом деле этого легко избежать. Рассмотрим среднестатистическую аппаратную платформу. Краеугольными камнями любой аппаратной платформы являются:1. Процессорная архитектура2. Memory map - адресное пространство, в которое отображаются RAM, ROM и внешние устройства3. Протоколы управления этими самыми внешними устройствами.Так вот, всё вышеперечисленное вполне можно вполне декларативно описать обычным конфигурационным файлом, не прибегая к программированию вовсе. Затем, скормить этот файл генератору платформ и на выходе получить готовый фреймворк-скелет нашей операционной системы, доступ к которому можно получить из любого языка программирования. Вот так вот просто, если бы байтоёбство гологного моска не мешало.
Чувствую себя дауном. Тут всякие системеные штуки делают, а мой уровень - Laba_1 и кривой консольный тетрис.
>>965376так зделой, кукуретик хуев
>>965419Это слишком просто для него, его ждёт смуззи и очередной круд.
>>965411Все с чего-то начинали.
>>965373>>965375>>965376Господи, какая же ссанина. Кучка терминов в ничего не означающем словесном поносе.
>>965373>>965375>>965376ты забыл начало:Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда ба йтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели clock() - start) - пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы. Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия - он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо. Байтоёбство включает в себя:
>>965419> так зделойНа самом деле некоторые шаги в этом направлении есть. То же FDT, например.
>>965555некоторы шаги есть в любом направление. высер того анона напоминает кукарекание петухатиков где у них есть еба теории в которых все заебись но на практике абсолютно не реализуемы да и оторваны от реальности
>>965307Портируй на Vulkan и Wayland самую лучшую в мире читалку - mupdf
Нету желающих сервер в SAMP на Pawn поковырять по фану?
>>965748Есть
Аноны, я тот аноны который после веб макакинга начал изучать С. Очень нравится язык, наскачивал книг, одну уже осилил для нубов, одну даже планирую купить, очень охуенно там все разложено, плюс примеры интересные. Но вопрос такой: есть ли с С работа? Например со знанием пхп/жс ее порядочно, даже выбирать можно. Что вообще пишут на С? Только драйвера и ядро линукса? Что еще параллельно подтягивать вместе с самим языком?
>>965769У нас в основном на С пишут что-то связанное с железом. Не сколько драйвера, сколько прошивки микроконтроллеров. Но в этой отрасли зп ниже, чем в веб.А крутые чуваки, да, пишут всякие СУБД, Highload-бекенды и подобное. Но это в долине
>>965769Писать на нем можно то-же что и на плюсах пишут.
>>965769Если ты PHP-шник.То знание C выводит тебя на новый уровень знания того-же PHP и сервера.ТЫ можешь сам писать патчи и расширения к языку.
>>965769нет
>>965769Какую книгу собираешься купить?
Помогите разобраться с вводом-выводом.Есть 2 файла: данные и результат.хочу считать данные с одного тхт файла и чтобы результат был напечатан в другом.
>>966040>>963799
>>966040На fprintf() посмотри.
>>966040Погугли немного.
Я новичок.Поставил Clang.Пишу: clang hello.cА он мне:hello.c:1:10: fatal error: 'stdio.h' file not found#include <stdio.h> ^~~~~~~~~1 error generated.Как сделать, чтобы работало?
>>966484А вот код из CS50:#include <stdio.h>int main(void){ printf("hello,world\n");}
>>966484https://clang.llvm.org/docs/FAQ.html
>>966488я читал, но всё равно не понял что делать
>>966488и зачем мне опция "только фронтенд"?
Кланг не работает без сторонних библиотек что ли? Тогда нахрен я это говно вообще ставил :(
>>966490>>966493>>966489Чето в голосСделать форк репозитория ллвм и самому собрать компилятор религия не позволяет?
>>966484>Поставил Clang.Юзай cmake, а там через env уже легко компилятор настроить, чтобы он генерил правила сборки без гемора.
>>965769>Что вообще пишут на С?Практически все. Модули ядра для разных осей, реалтайм ос, гуишный софт, веб серверы, плагины для веб серверов, базы данных, интерпретаторы (хотя тут и на C++ благодаря темплейтам с генериками наркоманы любят обмазываться и грамматики разбирать), компиляторы, проще сказать что на С не пишут.
Решил вкатиться в это ваше програмирование на с++. Какие мануалы и литературы курить полному ньюфагу?
>>966519 >>961839 (OP)
Всем привет. Вкатываюсь с таким вопросом. Вывожу в файл содержимое массива структур. При выводе в файл куча приписок, меток, форматирований непосредственно для более упрощенного восприятия человеком. Очень старался запарился, но прилетела задача - обратно такой файл грузить в программу и работать с данными. Другого варианта кроме как скурпулезного считывания нету?
>>966634>Другого варианта кроме как скурпулезного считывания нету? json/xml де/сериализация
>>966634>>966677yaml еще.И да, изобретать велосипед не стоит, хранение данных это хранение данных, а генерация отчета для человеков это генерация отчета.
>>966634Для машины файл ничего лишнего содержать не должен, а отчеты отдельно генерируй.
>>959643 (OP)Анон, подскажи. Почему в топовых вакансиях (с/с++) требуется знания си? Я понимаю, что си - фундаментальный язык, очень приближен к работе с железом. Но, разве все то, что используется в си, используется в с++. Если не брать в расчет базовые вещи вроде типов данных, циклов и т.д.?
>>966830По большей части кресты - это надмножество си. Соответственно, зная кресты, ты можешь кое-как писать на си. И тебе может понадобиться использовать или исправить сишную либу, например.
>>966854Знания си помогают в работе с плюсами?
>>966859Со знанием си кресты учатся быстрее (ну или си со знанием крестов). Знания си мешают писать в "крестовом стиле" на первых порах - получается то, что называется "си с классами". С опытом проходит.
Можно ли как-то по бинарнику узнать для какой ОС и под какую архитектуру он был скомпилирован? Точнее, можно ли узнать calling convention(используя иду, или другой дизасемблер)? т.е. хранится ли где-то какая-нибудь метаинформация и тдВарик просматривать дизасемблированные листинги и гадать - не оч
>>966876Тут есть отдельный тред >>960640 (OP)> Можно ли как-то по бинарнику узнать для какой ОС и под какую архитектуру он был скомпилированДа, можно. readelf/objdump/dumpbin/различные PE-редакторы. В целом зависит от формата бинарника.> можно ли узнать calling conventionНет. Если явно не указать calling convention, современные компиляторы могут менять ее от функции к функции и от билда к билду, передавая аргументы в разных регистрах, выкидывая неиспользуемые аргументы нахуй и т. д. Если было явно указано при компиляции - можешь посмотреть дизасм, это не гадание, там все очевидно после двух-трех функций. Иногда из бинарника торчат декорированные экспорты (или есть отладочная инфа, например), тогда в там кодируется и конвенция.
Обсуждаем грядущий блевотный синтаксис атрибутов, бугуртим от slice-нотации, которую пытаются притащить из питона, гадаем, будут ли замыкания:https://developers.redhat.com/blog/2017/02/01/october-2016-iso-c-meeting-report/
>>966884Мне надо знать calling convention чтобы собственно и определять аргументы функции. Причем не заглядывать самому каждый раз в бинарь, а написать такой парсер, который будет говорить где лежат параметры(т.е. названия регистров или смещение в стеке) для каждой функции. Такое вообще можно реализовать?
>>966921Ну смотри, для x86 у тебя есть: регистры, стек, fpu/sse для floating point. Это на вход. На выход у тебя могут быть eax, edx:eax, fpu/sse, стек (для структур). Все это компилятор может смешивать в любых пропорциях. По-хорошему это "решается" написанием dataflow-анализатора, причем анализом одной функции не обойдешься (foo: add ecx, 20 ; jmp bar - какие аргументы у foo?), причем анализ все равно будет изредка лажать, как бы ты не изъебывался. Если тебе только thiscall/fastcall/cdecl/stdcall различать - тогда анализ проще, процент успеха выше (но не 100% - IDA постоянно лажает), можно использовать всякие эвристики (обращение к ecx без инициализации для thiscall/fastcall, retn N для stdcall, add esp после вызова для cdecl и т. д.). В общем и целом, проще всего взять IDA, пусть она проанализирует, потом сдампить тайпинфо скриптом, а при возникающих проблемах смотреть и руками править.
есть файл >100мб, в каждой строке 1 слово, как найти повторяющиеся строки=слова? Сделал через strcmp - каждое слово прогоняю через весь файл в поиске повтора.... в итоге 5Gb надо обработать, чет. как-то долго выходит )) Как ускорить?
>>966962В хэш-таблицу загони.
>>966972хеши тоже ведь проверять надо?>>966962Закинь сразу весь файл в оперативку.Не перепроверяй то что уже проверил, а какой результат программы должен быть вообще?
>>966940>проще всего взять IDA, пусть она проанализируетТак а как это сделать? Собственно я и хотел писать парсер, ибо в иде такой функции не нашелЛегкий гуглеж говорит, что это можно провернуть, если пользоваться другим декомпилятором от хексрейз. Но мне бы именно в иде
хочу выучить свифт, я туда попал?
>>967040Иди в ваш загон, он тонет.
>>967037Ну начни с чего-то типа:import idaapiimport idautilsfor ea in Functions(): ti = idaapi.tinfo_t() if not idaapi.get_tinfo2(ea, ti) and not idaapi.guess_tinfo2(ea, ti): print('%.8x: <error>' % (ea)) else: print('%.8x: %s' % (ea, ti.dstr()))Посмотри на idaapi.guess_func_cc(), посмотри на idaapi.tinfo_t(). Документация говно, но на гитхабе встречаются чужие реализации, где можно подсмотреть, как с этим всем работать.И вообще иди-ка ты в тред по реверсингу, тут у нас няшная сишечка.
>>967083Блядский питон, блядская макака! Пробелы сам расставишь.
У меня есть typedef struct { ... } type;Можно считать нормальным стилем ещё одно декларирование этого типа в виде:typedef type type;?Никаких подводных камней нет?Для наглядности хочу собрать все типы в одном месте и прокомментировать их.
>>967123Абсолютно нормально. На таком декларировании в заголовочниках в glib например описание объекта строится.
>>966962на поиск дубликатов наверное есть с десяток оптимизированных алгоритмов (по потреблению памяти, по быстродействию, в общем, на выбор)так сложно это загуглить...
результат файл без повторов
>>967036результат файл без повторов
>>967185потом еще утилитка uniq есть в coreutils..те если это не учебная программка, а реальная потребность то проще ей воспользоватся
Сап такой вопрос. А указатели на функции это нормально? За такое не бьют ногами? Я вообще новенький разбираюсь со структурами данных. Решил для себя написать, как раз и разберусь лучше. И в процессе возникла такая идея. Возьмем список. Есть структура для узла и есть структура содержащая голову и хвост нашего списка, ну и количество элементов. В структуру с головой я решил засунуть указатели на функции для работы со списком. Т.е. по итогу я хочу получить своего рода инкапсуляцию. Все что по итогу нужно для работы будет уже в структуре. Создали, вызвали функцию инициализации ну и работаем со списком в свое удовольствие, все методы сразу видны, на первый взгляд удобно, но нигде такого раньше не видел.
>>968047Указатели на функции в структуре . Для работы с этой же структурой
А зачем? Зачем хранить константу в структуре? Указатели же не меняются.
>>968047> нигде такого раньше не виделцпп?
>>968047Да. В Linux Kernel вообще повсеместно используется.
>>968051"Эмуляция" пространства имен, ну и для удобства.
>>968070Не видел в чистом си.
>>968047Более чем ок, если понимаешь, что делаешь.
С чего начать изучение C#?Где брать задачи?навыки уровня первокурсника есть в чистом сина с# написал прогу, которая авторизовывалась в вк в отдельном окошке, причем сам нихуя не понял ничего
>>968075лолну уж никак для структур данных типа списков
>>968070В цпп только виртуальные функции лежат в таблицах, и даже их современные компиляторы стараются девиртуализовывать.>>968233Есть случаи, когда хранение указателей на функции в списках вполне оправдано. Например, у тебя список разнородных сущностей, может быть хорошим решением хранить указатели на деструкторы в элементах, а не делать гигантский свитч при удалении.
Подскажите гуманитарию в чём проблема. Есть одна функция которая генерирует рандомное число, и в зависимости от результата возвращает строку. Проблема в том что рандомное число генерируется один раз, и при повторных вызовах функции используется оно-же. Гугл не помог.
>>968305> Подскажите гуманитарию в чём проблемаВ ДНК. Код давай.
>>968313https://pastebin.com/qjwbDm0pИ раз уж на то пошло, есть какие-то более лаконичные способы "броска" кубика у которого некоторые грани повторяются?
https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-HarmfulНяшный одноглазик научит тебя православной генерации случайных чисел. На крестах правда, но тебе то небось все равно.
>>968329Очевидно, что тебе нужно бросать кубик (вызывать dice()) внутри цикла (после do), а не снаружи. Алсо, random() - это что-то нестандартное. Наверное, ты имел в виду rand()?> лаконичные способы "броска" кубика у которого некоторые грани повторяются?Не делать if, сделать lookup. Типа:#define countof(array) (sizeof(array) / sizeof((array)[0]))const char ∗results[] = { "foo", "bar", "foo", "baz", "foo" };int n = rand() % countof(results);return results[n];Но как правильно заметил >>968334 вот этот анон, rand() часто реализован очень некачественно, а rand() % n добавляет еще больше неслучайности из-за особенностей реализации LCG PRNG. Можешь так делать, так слегка медленнее и слегка лучше:// Generates int in range [n1, n2] (inclusive on both sides). n2 must be > n1.int random_range(int n1, int n2) { return (int) ((rand() ∗ (1.0 / RAND_MAX)) ∗ (n2 - n1 + 1)) + n1;}Если это лаба - просто забей. Если игра, можно спиздить генератор получше.
>>968354Внутри цикла... Вот я рукожоп...Спасибо большое! Видео смотрю уже. Досмотрю и постараюсь сделать всё кошерно.Да, игра, для себя чисто делаю. Хобби типа.
>>968381Я тоже рукожоп. Там должно быть 1.0 / (RAND_MAX + 1), если что.
Анон, давай поговорим о оформлении кода. Вот скобочки и названия функций. Есть стандарт? Где почитать? Как много людей соблюдают стандарт?
>>968511>о оформлении кодаСтолько же, сколько соблюдают правила русского языка.
>>968511возьми линуксоидный кодстайл и не промахнешься
>>968511Вон на днях на хабре очередной высер выложили. Сходи почитай, если хочешь. Ну или на вики. Или у любого крупного опенсорсного проекта есть стайлгайд обычно. Общего стандарта нет, есть разные подходы для разных ситуаций, но в целом похуй, как писать, лишь бы одинаково во всем проекте.
Господа, возможно ли scanf'ом или подобным прочитать строку вида "abc123", чтобы abc ушло в char[], а 123 в int?
>>968546Частично: можно сделать %3s%d и/или %[^0-9]%i, но там куча подводных камней. Лучше делай fgets и разбирай руками.
>>968546Позволю себе не согласиться с этим >>968551scanf - отличный парсер
>>968551>>968608Тащемта fgets'ом я разбираю файл, а потом построчно ковыряю sscanf'ом.Просто проблема в том, что строка может иметь вид "[1-ый символьный параметр] [2-ой символьный параметр][числовой параметр]".И если, к примеру, второй строковый параметр отсутствует, то конструкции типа >%3s%d и/или %[^0-9]%iобламываются, ибо проёбывают в том числе и числовой параметр. Хотя решение хорошее, да.В итоге забил хуй, просто считываю как две строки, а вторую потом ковыряю strtol'ом, вытаскивая число, а остатки уже ковыряю на наличие/отсутствие нужных символов strchr'ом.В любом случае, не для атомного реактора программу пишу, и так сойдёт.
GTK4 will be rendered with Vulkan API.
>>969090Это победа, гудбай легаси пердолинг.
>>969091Пиздец, какие ебанаты принимают такие решения?
>>969452Вот >>969091 такие. Но я еще не читал. Наверняка ведь это опция, ни один долбоеб не будет завязываться на мертворожденный графический апи.
>>969090>GTK4 will be rendered with Vulkan API.ебать, они там рисовалку виджетов пилят джватцать лет. они и в 4 версии пытаются натянуть ооп?
> ни один долбоеб не будет завязываться на мертворожденный графический апи.Так разрабы GTK и есть долбоебы. Новая версия - новые правила.
>>969517>пытаются натянутьНе осилил glib? ООП там давно уже есть.>рисовалку виджетовЧто это такое?>>969456>мертворожденный графический апиНу да, сосачерам виднее.
Пишу на С для STM32.До этого на С++ писал только в вузе проекты уровня Курсач1. Помню, access violation тогда постоянно сопутствовал на практике.Как контроллер реагирует на access violation / кривой код? Возможно ли случайно сделать из контроллера кирпич неудачным кодом? Контроллер можно перешивать много раз
>>970771Сам по себе контроллер в вакууме - нет. Но он же у тебя куда-то воткнут.
>>970774Discovery board с периферией (кнопочки, диод (должен быть), LCD дисплей). Воткнуто через USB к ПК, отладка. Как обычно, основа всего кода - бесконечный цикл. Вот там могут быть проблемы. Пока всё в порядке, но как-то тревожно
>>970776Ну диод ты врядли сожжешь, кнопочки тоже обычно не горят.
>>970721> ООП там давно уже есть.надеюсь ты объяснишь почему они не взяли кресты, а сделали все через жопу? ооп на с, кек, долбоебища, структура с кучей ссылок на подпрограммы это типа у них класс, пиздос.
>>970991>надеюсь ты объяснишь почему они не взяли крестыХотя бы потому что в иксах Си - стандарт.Хуяришь на Сишке, потом портируешь в свой любимый язычок.>ооп на с, кек, долбоебища> структура с кучей ссылок на подпрограммы это типа у них класс, пиздос.Первые версии твоих крестов, транслировались в сишку.
>>970991> структура с кучей ссылок на подпрограммы это типа у них класстак в крестах тоже самое почти, лол>почему они не взяли крестыкресты говно, да и биндить к другим языкам тяжело, а тут биндинг левой пяткой можно написать, я его для диплома к тиклю прикручивал
>>970771> Как контроллер реагирует на access violationКак любой арм. Будет фолт, будет переход по соответствующему вектору из таблицы.> Возможно ли случайно сделать из контроллера кирпич неудачным кодомНет, там критичный регион залочен, разлочить его случайно невозможно.
>>971133> Первые версии твоих крестов, транслировались в сишку.А сейчас сишка и кресты транслируются в асм. Это повод писать на асме? Всецело двачую идею писать гуи на крестах или еще более высокоуровневых языках.
>>971167>Всецело двачую идею писать гуи на крестах или еще более высокоуровневых языках.Ну, так и делают. Только сначала пишут ядро на сишке, чтобы работало быстро и легко было портировать на другие яп. На си++ только ничего портировать не надо, все из коробки можно юзать.
>>971174Щупал гайку/беос? Там изначально кресты. Попробуй.
>>971177>ПопробуйВ пезду. Жонглирование дистрибутивами один из видов прокрастинации.
>>971189Это не "дистрибутив". Это самостоятельная Unix-like ОС. К сожалению, так и не взлетевшая.
>>971194>К сожалению, так и не взлетевшая.как говорится - рыночек порешал.
>>971174>Только сначала пишут ядро на сишкепруф или пиздун, кьют изначально писался на плюсах. >>971157>его для дипломаэгсперд ф треде, всем бояцо>>971167>Всецело двачую идею писать гуи на крестах или еще более высокоуровневых языках.я про то, если мыслишь в рамках ооп то и выбор должен быть соответственным, а не как у гномопетухов.
>>971243> я щитаю што все должны, так как я себе представляю, куд ах.нахуй иди.
>>971243>соответственнымсоответствующем. поправил хуесос
>>971243> я про то, если мыслишь в рамках ооп то и выбор должен быть соответственнымТы путаешь ООП и ээээ.... классы. stdio в сишечке - ООП, куча кода ядра Линукса на сях - ООП. Просто это не классы. Посмотри ссылку в шапке.
>>971250>куча кода ядра Линуксаэто куча говна, а не ооп>>971250>ООП и ээээ.... классы.кагбы не>>971250>stdio в сишечке - ООПнет
>>971246гном, не рвись
>>971260> stdio в сишечке - ООП> нетОбосновать ты, как я понимаю, не можешь, только обзывать все говном.
>>971287>Обосновать ты, как я понимаю, не можешь, только обзывать все говном.наркоман? или ты файловый хэндлер считаешь объектом класса?
>>971321> файловый хэндлер
>>971333эгсперд?
>>971243>пруф или пиздун, кьют изначально писался на плюсах.Ты даун?
>>971346ты дмитрий?
>>971321>файловый хэндлерШо? Дескриптор файла?
>>971346антон, не толсти
>>971351>Дескриптор файла?какие еще слова вы в школе проходили?
>>971351Он имел в виду FILE, но он не является хэндлом (дескриптором) - это объект, который хранит дескриптор и прочие данные, необходимые для осуществления ввода-вывода.
>>971347Да.
>>971357>это объектобъект чего? какие у него методы?
>>971359Методы посмотри в stdio, имена начинаются с f (и по историческим причинам несколько методов без f). Если для тебя методы - то, что пишется через точку после имени объекта, то я тебе сочувствую.
>>971357Понял.
>>971359https://www.gnu.org/software/libc/manual/html_node/Streams-and-Cookies.html
>>971364у объекта есть указатель на себя, который неявно передается его методу, да, fd->read() а не процедурщина read(fd) и как минимум уничтожение объекта при выходе из области видимости. когда завезут приходи.
>>971369и чо? обыкновенное структуроебство.
>>971378> указатель на себя, который неявно передается его методуОсобенность реализации какого-то конкретного языка. Например, COM/DirectX - ООП, но на сишечке я вполне себе делаю obj->lpVtbl->Release(obj), и от этого оно магически не перестает быть ООП.> как минимум уничтожение объекта при выходе из области видимостиНикаким местом не относится к ООП. Мало того, многие языки уничтожают объекты не при выходе из области видимости, а когда-нибудь. Мало того, для сишечки есть либа с подобным управлением памятью с автоматическим вызовом деструкторов.
>>971378>как минимум уничтожение объекта при выходе из области видимостит.е. жаба — не ООП. Приехали.
>>971384ясно, и пронаследуешь от структуры FILE ты тоже и все это не перестанет быть ассемблером.
>>971386давно у жабы деструктор?
>>971392>давно у жабы деструктор?Лол. С самого начала. Вызывается сборщиком мусора.
>>971390Ну наконец-то нормальный аргумент. Да, FILE нельзя наследовать, но он не перестает быть от этого объектом. Отличия FILE от структурного программирования - инкапсуляция. Содержимое структурок тебе доступно по определению, а содержимое FILE тебе стандартная библиотека показывать не обязана (хотя в большинстве реализаций ты его и видишь, оно все равно implementation defined, и ебать его напрямую - зашквар), с FILE работают только его собственные методы.
>>971395> Вызывается сборщиком мусора.сборщиком клюквы
>>971403Спорщиком брюквы
>>971398>Да, FILE нельзя наследовать>но это все равно ООП, просто там невиднопонятно, давай более весомые аргументы, а не эти маняфантазии
>>971405Ебать ты убогенький.
>>971407больше аргументов нет?
>>971408Из тебя прям аргументы фонтаном бьют.
>>971378>как минимум уничтожение объекта при выходе из области видимостив objc этого нет, теперь он тоже не ООП?
Сап, есть упражнение 2.1 из K&R. Так вот, там просят не только просто вывести пределы long, short, char, int, double, float, а ещё их вычислить. Но вот зацепку, как их вычислять, K&R не дал в начале второй главы. Вот скажите, когда я переполняю, допустим, тип int, переход в отрицательное число отвечает стандарту? У меня при любом переполнении будет как бы начинать с конца данного диапазона. Или это зависит от реализаций там каких...
>>971592Алсо, гуглить пробовал, ну, такое себе.
>>971588Это вообще не язык
>>971588объекты должны создаваться и уничтожаться не только по завершению программы и явном удалении, капишь?
>>971592> когда я переполняю, допустим, тип intЭто UB
>>971167>Всецело двачую идею писать >GUI on C++TOPKEKQt - buggy piece of shit.GTK - masterpieces of code.Qt app 2 times biger than GTK3 app, not to mention FLTK.
>>971752>Qt app 2 times biger than GTK3 appВсем похуй.
>>971753No.
>>971754Разве что пользователям дискет не похуй.
>>971599ага, настолько не язык, что на нем зарабатывают неплохие деньги
>>971758Qt - говнокод, как не изъебнись, и тормозит дай бог. Нахуй надо.
>>971780Двачую будущее за JavaFX на кроссплатформе
>>971783Будущее это GTK4, и возможно FLTK (Если тоже перейдут на Vulkan+Wayland)
>>971780Не тормозит Motif. Только вот> Нахуй надо.
>>971790>Будущее это GTK4шо, опять? с 98 года пердолят это поделие. оно же выглядит как говно, работает как говно и спроектировано как говно.
>>971759Гей-шлюхи со стажем тоже неплохо зарабатывают.
> 2017> спорить об ооп> в C тредевы ебанутые что ли? это же моветон.
>>971820Он не может в Wayland, нахуй не надо.>>971895Qt так-то куда хуже выглядит, еще и виснет.Вот слева evince (GTK3), справа okular (QT5)Четко видно кто в 90х застрял сука.okular еще и виснет, охуеть просто.
>>971694Что?
>>971694в c99 возможны 3 варианта представления знака. зависит от реализации.
>>971592так что, приделы для безнаковых можешь скаставать 0xffffffff к соот. типу, перед этим проверев существование LONG_MAX, иначе - 0xffff. больше ничего придумать не могу.
>>971961Слишком сложно для человека, читающего вторую главу K&R. Ну ладно, не буду этим заниматься, просто выведу.
>>971957Охотно верю
https://pastebin.com/6Fx9dEGRмудрый анон, что нетак с этим куиксортом? На 9 из 10 наборах дает верный результат, пытался осилить дебаггингом и в сухую, но все равно не могу понять в чем подлива.
>>971969понятно что он имел в виду.-1(uint) - не переполнение, а конвертация.
>>9719721. Сделай нормальное имя массива arr.Почему не скопипастил рабочий алгоритм?
>>971983>понятно что он имел в виду.Кто "он"? Твой МЧ?
>>971984Потомучто куиксорт - это самоцель и я хочу разобратьсяза имя массива извенения :с
>>971985не знаю как ты будешь переполнением выводить пределы. хотя знаю, создашь для каждого типа переменную, проинициализируешь нулями, а потом в рантайме вычтешь 1? как хочешь.
>>971987Оно уже есть в glibc и работает там быстрее, более под железо заточено.Чесно говоря не разбирал куиксорт, но читал, там больше кода было.
https://pastebin.com/Ueix2sRGНаписал подпрограммы для работы со стеком, не могу добавить с помощью нее элемент в стек. да, я даунГде я обосрался? Хэлп плс
>>972025тебе в другой тред.
>>972027В какой? Я думал тут только этот по си
>>972029Библиотеку пиши.
>>972021обычно свап прямо в теле делаюти оформляют все в постусловном циклеспсы, энивей
>>972029В Си нет операторов new/delete.
>>972029> delete/new> Cвыбери одно
>>972032В этом и цель, тип написать библиотеку с подпрограммами для работы со стекомНо сначала надо просто программу сделать, что бы протестировать их все, а я не могу добавить элемент>>972036>>972034?Странно, мы в универе изучаем Си и нам препод их давал, лулЕще когда списки проходили
>>972043А что такое printf("%d сообщение\n") вам препод рассказать забыл? БЕГИ ОТТУДА И вообще, непонятно, чего ты хочешь. Элементы добавляются.
>>972047Разве я правильно все написал?Ахахахаххахахахахаха, про /n рассказывал, ебать в голос четПросто у меня уже 4 утра, я по фасту написал то что в мэйне и сюда кинул, ибо хз
>>972050\n* ahahah
>>972050Нет, ты всё написал неправильно. Твой код не компилируется, половина кода не выполняется. В стек ты пихаешь неинициализированную переменную. Стеком называется вся структура данных, а не один ее элемент. Пишешь ты на смеси C и C++. printf ты не осилил.
>>972056Ахахах, на счет принтфа я тебе объяснилЯ не понимаю, о какой смеси Си и крестов вы говорите, что тут кроме new/delete с крестов?
>>972059Например, main. Например, кривой (неработающий) typedef.
>>972060В мэйне треш, я об этом и говорюТайпдеф просто по дефолту пишу перед страктом, хзЭнивей он не мешаетВот скрин из нашей методичке по Си, delete/new тут естьЛибо вы меня троллите с этим, либо я совсем уже потерялся
>>972062слово объект тебя не смущает?
>>972062Есть Ц и есть кресты. new/delete это штука из крестов, не из Ц. Может вас крестам учат, а ты не понимаешь этого?
>>972062> Энивей он не мешаетОн абсолютно ничего не делает, не добавляет никаких новых сущностей. Я даже не уверен, скомпилируется ли это в Си. Программа работает только потому, что в C++ теги (имена) структур сразу являются типами, и писать struct Имя, как в Си, не обязательно.>>972063В стандарте Си про каждую переменную говорят "объект". Это нормально.
>>972065>Может вас крестам учат, а ты не понимаешь этого?почему тогда принты...
>>972069Потому что удобнее.
>>972069Потому что препод не шарит. Я тебе уже говорил - беги, пока не поздно.
>>972072Или он считает что printf удобнее чем iostream
>>972075Если люди так считают, они говорят #include <cstdio>.
>>972069А почему бы собственно и нет?
>>972065Ахаххаха, да нетЯ не такой даун, первый семестр неплохо закончил, и с от крестов отличить могуИ да, чекни библиотеки>>972075Ахахаххаха, найс рофлишьБля, так и знал что вы суки троллите меня
Что-то тред снова скатился. То ООП, то кресты. Вот нет, чтобы атрибуты в грядущем стандарте обсудить. >>966915
>>972078http://ideone.com/nKI0jHЧто не так, отличитель ты наш плюшевый?
>>972078Братюнь, толсто.
>>972080Строчка начинающаяся с int* a
>>972081Бляя, не знаю, что вы творите тутНо теперь мне еще страшнее идти завтра на пару чем без этой программы
>>972083В общем так: идешь на пару, начинаешь возбухать, что вас учят крестоблядию вместо ламповой сишки. Говоришь, что из-за этого обмана не сделал программу
>>972085Бля, ну правда норм рофлите тутНо я ночь не сплю, что бы написать эту хуйню до утра и в итоге вы меня так запутали что пиздосХз, просто я вчера показывал преподу эти подпрограммы, он немного подредачил одну и сказал все норм, просто сделай типо, что бы они запускались по очереди и все
>>972088Так подредактируй. Тебе уже перечислили все косяки.
>>972088А у тебя есть заголовок твоих лекций? Скрин сделаешь нам?
>>972090Я пофиксил принтфы, убрал тайпдефНо это не значимые косяки, я хз что дальше с этим всем делать теперь >>972091Смысл?Ну спалите вы моего препода иБтв учусь не в такой уж и шараге, топ 30 вузов россииНе думаю, что препод может путать Си и кресты блять
>>972093> Не думаю, что препод может путать Си и кресты блятьТут варианта два: либо всё напутал, либо ты.
>>972093Мы хотим спалить не твоего препода, а "Курсы ЦПП для дауничей из заборостроительного, 1 час в неделю", дурашка.
>>972095>либо онфиск
>>972095Как можно их попутать?В крестах же iostream, using namespace, cin, cout etcА у нас такого нет и никогда не было в курсе
Хватит уже зелёного кормить, заебали.
>>972079> The maybe_unused attributeненужно. если есть варнинг на аюзед, возьми код в #ifndef NDEBUG.> The fallthrough attributeблевотина. для неосиляторов switch. серьёзно? если компилятор вам выдаёт такие варнинги, то это повод прописать ему в щи с вертушки и отключить этот клятый варнинг. вы ещё побольше скобочек вокруг & лепите, вместо того чтобы выучить приоритеты.
>>972096Ахахах, ой все крчЗавтра утром поговорю с преподом на счет этой хуйни всей и напишу итт
>>972100> возьми код в #ifndef NDEBUG.У меня колбек, его вызывает либа. Что ты предлагаешь взять в NDEBUG? Как ты объяснишь компилятору и читателю, что ты не используешь аргумент намеренно?> блевотина. для неосиляторов switchЯ пишу на сишечке уже полтора десятка лет (с лишним, если считать ньюфажество и фриланс). И все равно бывают случаи, когда я забываю break (обычно копипаст или мерж кода). И чаще всего fall-through хочется для case FOO: case BAR:. Хитровыебанная лапша с неявным goto c помощью switch не нужна и должна быть переписана.> вместо того чтобы выучить приоритетыЗнаю приоритеты, очень долго писал foo << bar & baz без скобок. Когда с кодом стало работать большое количество людей, стало ясно, что мои знания и предпочтения не значат нихуя, читабельность гораздо важнее.Рано или поздно все взрослеют, умнеют, перестают выпячивать знанания языка в своем коде и начинают писать читаемо.
>>972079> The nodiscard attributeещё одна борьба с варнингами. ебанутые. > The deprecated attributeкомментарии писать не пробовали? диагноз: отбитые.
>>972079> Attributes in Cдавайте сделаем из с с++.
>>972109> deprecated> комментарии писать не пробовали?У тебя есть код, использующий функцию сделать_хорошо() из какой-то либы. Код давно написан, работает и не требует изменений. Как разработчики библиотеки могут тебя предупредить, что они опять все сломали перепидорасили API, и скоро твой код перестанет работать? Ты читаешь документацию и хедеры каждой либы для каждого нового релиза?
>>972106> У меня колбек, его вызывает либане понял. >И все равно бывают случаи, когда я забываю breakне знаю как это комментировать, не допускаю таких ошибок.> читабельность гораздо важнее> Рано или поздно все взрослеют, умнеют, перестают выпячивать знанания языка в своем коде и начинают писать читаемо.ты просто оправдываешь своё превращение в макаку.
>>972111Давайте. Неплохо бы __attribute__((cleanup(...))) стандартизировать.
>>972114>Ты читаешь документацию и хедеры каждой либы для каждого нового релиза?прикалываешься? что это поменяет? тебе всё равно придётся переписывать код. это вопрос в доступности информации - зачем это тащить в синтаксис?
>>972116> не понял.Ты предлагаешь что-то ифдефать. Что именно?void handler(int unused) { terminating = true;}// Где-то в main.signal(SIGINT, handler);> ты просто оправдываешь своё превращение в макакуТак для меня-то по прежнему нет проблем писать без скобок, делать for без тела или еще как-нибудь извращаться. Почему я вдруг макака?>>972119> тебе всё равно придётся переписывать кодУвидеть ворнинг, создать тикет и переписать в плановом режиме; переписывать с горящей жопой, когда разработчики либы все сломают или, хуже того, не трогать код полгода и узнать о проблеме от кастомеров, которым, как обычно, все нужно вчера?
>>972122> Ты предлагаешь что-то ифдефать. Что именно?понятие не имел что такое вызывает варнинг. как у тебя это получается? -Wall -pedantic - ничего не выдаёт. и это странно выдавать на это, ведь есть множество функций с аргументами для совместимости, например. >>972122>Увидеть ворнинг, создать тикет и переписать в плановом режиме; переписывать с горящей жопой, когда разработчики либы все сломают или, хуже того, не трогать код полгода и узнать о проблеме от кастомеров, которым, как обычно, все нужно вчера?теперь ты оправдываешь свою лень. это твои проблемы что ты не узнал что ЛОМАЮТ АПИ - нихуя себе история. >>972122>Почему я вдруг макака?ну или нет. например, потому что поддерживаешь фишки которые всем усложнят жизнь и только тебе облегчат.
в любом случае.> Array Sectionsвот это интересно смотрится, недавно думал об этом.
>>972131> как у тебя это получается?Ну привет. -Wunused-parameter включается с -Wextra (ну или -Weverything в clang). И да, люди этим пользуются. И да, если у них что-то где-то для совместимости, они делают:#define UNUSED_ARGUMENT(arg) ((void)(arg))...int handler(int sig) {UNUSED_ARGUMENT(sig);}Классика жи. А теперь вот решили это стандартизировать, а новый синтаксис позволит не делать по хедеру на каждый атрибут, как было раньше (например, stdnoreturn.h /__Noreturn).Вообще, когда я поднимал эту тему, я надеялся услышать мнения про синтаксис. GCC-шный вариант более вменяемо выглядит, поддерживается многими IDE и меньше ломает парсеры в тех редакторах, которые про него не знают. Или нет?
>>972137моё мнение: всё говно и всё равно придётся прятать за макросы.
>>972137>И да, люди этим пользуются.может я тоже буду так делать. выглядит, логично.
>>972099Двачую этого. Развели тут
Умоляю, помогите пожалуйста. Хочу сделать консольную задачу, установил визуал студио, и вот такая херня выскочила. Дело в том, что если нажать да - код все равно не будет работать, я и другие пробовал, 100% рабочие - не работает ничего.Как исправить?
>>972241>Умоляю, помогите пожалуйста. продолжай
>>972241> код все равно не будет работатьПодробнее поясни. Покажи выхлоп компилятора из панельки Output. Скинь бинарник, если он не пашет. Проверь время и дату на компе.
>>972241>код все равно не будет работатьчет кек
>>972241Я так понимаю все дебыли перекатились из C++-треда сюда.
>>959643 (OP)Сап, погромисты. Пик 1 - задания, пик 2 - прога. Я правильно понял задание и сделал или хуйня?
>>972359Под упорядочиванием видимо подразумевается сортировка.
>>972367Каким образом можно её произвести? Курил интернеты, но не нашел примера на Си.
>>972372Берешь обычную сортировку и применяешь к каждой строке по отдельности.
>>972359>>963799
>>972390в моей такого нет
>>972373Ананас, прости за мою тупость, но я правда не знаю как сортировать. Вот написал новый простой массив. Почитал про всякие методы сортировки, но непонятно, в какой момент её нужно вставить, например, в пикрелейтед?
>>972421Пиздуй в армию, ты безнадежен.
>>972426нахуй он нам тут нужен
>>972421> #define + -
Что-то столкнулся проблемой сейчасvoid main() { int k, c; while ((c = getchar()) != EOF) { if (c == '\n') { ++k; printf("%d\n", k); } }}выводит не "1" как ожидается, а 32763 может и 32768 вывести.Что-то не стыкуется с моими знаниями о том, что int k; инициализирует k в 0
Почему сайт этого вашего LLVM такой тормозной, хотел скачать дистр, а скорость 7 кб/с о_О при этом пробовал с разных ВПН (думал м.б. рашкованские айпи зарезали).
>>972652А оно и не инициализирует.
>>972659я понял да. значение на момент объявления неопределено
>>972471Двачую майора
>>972241>>972241поставь gcc и не еби мозгкомпилируй через cc hello_world.c
>>972690> компилируй через cc hello_world.cсс - это симлинк к компилятору C по умолчанию. С тем же успехом это может быть clang. >>972658> скорость 7 кб/с It's just you. Кабельный МТС - 150-200 КБ/с.
>>966484Попробуй кинуть код (hello.c) в директорию llvm/bin (где лежит clang) и снова выполнить clang hello.c
>>966484>Я новичок.>Поставил Clang.Откуда ставил?
>>972703>It's just you. Кабельный МТС - 150-200 КБ/с. У меня скорость 30-32 мбит/с (при скачке обычно 3.5-3.9 мб/с), так что нахуй, это сайт LLVM'а тормозит.
>>972658охуеть, а форкнуть репозиторий и самому собрать никак? Там же даже мейк есть, просто в консоли две команду прописать, ну
Допустим есть в winform 5-ь кнопок (button1,button2...button5)и для одной из кнопок мы можем задать параметр TEXT путём введения команды:i=1;this->button1->Text = Convert::ToString(i);в итоге мы получим кнопку с числом 1 в text'e.Но как сделать это через цикл,ведь для каждой кнопки не будем выделать ещё 1-у строку и делать индусский код.;#####################for(i=0;i<5;i++){this->button->Text = Convert::ToString(i); }не сработает...(проблему выделил) . Как в cpp можно реализовать решение данной проблемы?
this->button->Text = Convert::ToString(i);отвалилась проблема, FIX.
>>972754Мда, что то идёт не так в общем трабла в "button"this->button->Text = Convert::ToString(i);
Блять, макака походу издевается.
>>972755>Convert::ToStringпиздуй ка ты к плюсанам
>>972767Нахуй нам C++/CLR не нужно.
>>972751> форкнуть репозиторий и самому собрать никак?Мне почему-то кажется, что даже скачать готовые бинарники по модему (олдскульному, через телефонную линию) будет быстрее, чем это собрать.
>>972768>C++/CLR не нужнотак и пиши на си тогда
>>972652я ввожу любой символ и у меня начинается а принтует у меня "к" начинает с числа 3. это потому что не определено какое значение принтовать ? Если определить к=0 то будет с единицы печатать.мимо начинающий неосилятор
>>972769Ну на урезанном i5-u(5 поколение) у меня собрались за ~40 минут
>>972754 >>972753Съеби в плюсотред.>>972768Какой ещё CLR, уёбок?
Поцоны, а что скажете вот по этой статье?http://eax.me/c-vs-cpp/
>>972868Правильно пишет. Надо все что можно писать на C, и даже если надо C++ большую часть кода можно написать на C и использовать.На C++ даже компиляторы ничего не гарантируют, с горем пополам могут в последние стандарты.
Разбираю шаблон программы для STM32 на С. Это вообще легально, описать static и non-static прототипы для одной и той же функции? Мне показалось, что нелегально, потому статический прототип закомментировал. Правильно сделал?
>>972864>Какой ещё CLR, уёбок?Совсем тупой?
>>972885static Надо делать, убирай статик если будешь юзать функцию другим файлом.
>>972893Ты тупой, МБ? CLR - это что, по-твоему?
>>972768Ты что, ебанутый?
Здравствуйте, посоветуйте пакетный менеджер для C типа npm или pip.
>>972984> пакетный менеджер для C
>>972984Но нахуя?
>>972970Нет.
>>973046Тогда что такое CLR, уёбок?
>>972885> Это вообще легально, описать static и non-static прототипы для одной и той же функции?Я спрашивал в одном из тредов насчет static, restrict и const. Никто не знает. В стандарте все очень мутно. Но вроде бы делать прототип без static, а саму функцию определять со static - это нормально.>>972984Системный пакетный менеджер (pacman, apt, dnf) - это и есть пакетный менеджер для Си, он позволяет ставить компиляторы, либы и хедеры.>>973093CLR - это Common Language Runtime. C++/CLR - это извращение, позволяющее писать на крестах под дотнет. У >>972753 именно оно. Использующие это идут нахуй в C# тред. Заебали срать.
>>973146> функцию определять со staticБля, наоборот. В общем, я имел в виду, что декларация задает тип и видимость.
Сап анон! На связи кун который вкатывается в C. Читаю классику от отцов. Дошел до задания где надо гистограмму длины слов из входного потока построить. Подскажи анон, все ли на месте? По длине массива сделал с расчетом на 1000 слов, так как не знаю еще как динамические массивы делать в сишечке
>>973248Нахрен ты нам фак показываешь?
>>973248Нормально. Особенно, если это твой первый язык.1) Если у тебя будет два пробела подряд, зачтется как пустое слово.2) Выражение words[wordsCount++] = lettersCount лучше показало бы твои намерения.3) Если в if / else у тебя хотя бы в одной ветке есть фигурные скобки, ставь их и в другой (да, синтаксис позволяет писать, как у тебя, но выглядит это неоче). Это правило обычно встречается в каждом первом стайлгайде. У некоторых принято писать фигурные скобки вообще всегда (в основном из-за убогих текстовых редакторов).4) Второй while лучше заменить на for - лучше показывает намерения. В C99/C11 ты еще и переменную в заголовке for объявишь, и ее не нужно будет искать глазами.5) Переменные лучше объявлять как можно ближе к их использованию, поэтому int i я бы положил внутрь второго while (даже C89 это позволяет) или в заголовок for (С99/С11).
>>973248У мейна прототип int main(int argc, char argv);Каждое объявление переменной с новой строчки и лучше делать с инициализацией:int c = 0;int i = 0; и тдК каждому ифу добавляй скобочки, даже если одну инструкцию выполняешьЕсли просто инкрементишь переменную, то i++; выглядит лучше, чем ++i; (хотя в плюсах последний варик для объектов лучше из-за отсутствия лишнего копирования)
>>973248Анон, не слушай этого >>973268 пидора, ну разве что последнюю строчку. Вредные советы.
>>973272>>973268Про прототип мейна - правильно. Я не заметил. Есть int main(void) и есть int main(int argc, char ∗argv[]) (он же int main(int argc, char ∗∗argv)). Других мейнов в стандарте нет.> выглядит лучшеЭто наоборот плохой совет. Постинкремент нужен для специальных случаев. Его все поголовно используют неправильно, но лучше не привыкать так делать. В свое время была шутка, которую упоминал даже сам Страуструп, что язык C++ даже назвать правильно не осилили - улучшенный C логично было бы назвать ++С.> лучше делать с инициализациейИ потом статический анализатор или компилятор будут ругаться, что присвоенное значение забыли использовать.> к каждому ифу добавляй скобочкиА вот и человек с ed вместо редактора подъехал.
>>973279>Других мейнов в стандарте нет.Есть imlementation-defined.Может ты мне ещё запретишь envp через main получать, гнида?
>>973279> В свое время была шутка, которую упоминал даже сам Страуструп, что язык C++ даже назвать правильно не осилили - улучшенный C логично было бы назвать ++С.Нет, просто «I think maybe the guy who invented C++ doesn’t know the difference between increment and excrement.»> И потом статический анализатор или компилятор будут ругаться, что присвоенное значение забыли использовать.А так он будет ругаться на defined but not used.
>>973281> envpБля, вот все время забываю, что envp на самом деле в стандарте есть (в списке распространенных расширений). Но тем не менее, это все равно расширение, которое какбэ намекает на возможные проблемы с переносимостью. Да, оно везде реализовано, но все же.
>>973284> А так он будет ругаться на defined but not used.Будет причина удалить нахуй неиспользуемую переменную. На самом деле я согласен, что инициализация при объявлении желательна. Но только если у нас C99 и выше, где мы объявляем переменные по месту, а не в начале блока, т.е., нам видно, что вот она наша переменная, и мы ее сразу инициализировали, и нам понятно, зачем мы это сделали.
>>973279>А вот и человек с ed вместо редактора подъехал.Дебик, даже в гугл код стайле прописано, что так надо делать. Хотя да, мане из ебеней лучше знать.
>>973289> гугл код стайле прописаноКакого бреда там только не прописано. Самый бредовый — что пробелы лучше табов.
>>973290> пробелы лучше табовБоже, нет, только не снова! Давайте перекатываться лучше.
>>973288>если у нас C99 и вышеМань, на дворе то 2017, просыпайся
>>973288Насколько знаю если все инициализировать в начале то программа должна быстрее работать.
>>973294
>>973294Абсолютно похуй, когда компилятор положит переменную в стек. Мало того, он все равно положит ее тогда, когда захочет.Тем временем мы перекатываемся без шапки, потому что в шапке образовалось слово из спам-листа. Спасибо, Абу!
>>973294Ага, а если для названий переменных использовать только одну букву, то еще и памяти меньше отожретА вот и оптимизации уровня /pr подъехали
>>973297 (OP)>>973297 (OP)>>973297 (OP)>>973297 (OP)Перекатываемся, но макаке не нравятся наши книжки. Пора пилить гайд куда-нибудь на гитхаб.