Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.Что читать:- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)- man/Dash/zealdocsЧем компилировать:- Очевидный GCC.- clang: оче годно, батя рекомендует.- Intel C++ Compiler: оптимизации, тысячи их.- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.Что еще почитать:http://c-faq.com/FAQ из comp.lang.c. Древний, но все еще актуален.Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.Ben Klemens "21st Century C: C Tips from the New School" (2012)Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+StandardЕще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_CОнлайн-утилиты:- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.Прошлые треды:- №41: https://arhivach.ng/thread/434018/- №42: https://arhivach.ng/thread/438066/- №43: https://arhivach.ng/thread/441686/ >>1377621 (OP)
>>1383560Аа, кажись я понял где проеб. Этот & надо писать в переменной которую передаешь в функцию, а не в описании самой функции. Верно?
>>1383650В описании (на самом деле это называется объявление функции, declaration - учись говорить правильно сразу), не забудь аргументу указать, что он указатель на int.>& надо писать в переменнойНу пока хотя бы так понимай
Пацаны, такой вопрос, изучив основы СИ, что делать дальше? Заучивать алгоритмы? А что дальше? Есть ли смысл оставаться на СИ, или уже особо ловить нехуй и переходить к крестам и ООП?
>>1383709Стоит изучить основы программирования, а не языка, тогда и не будешь такую хуиту писать. В шапке есть книга по изучению ООП на примере си, на ангельском, но топовая.
>>1383709http://sijinjoseph.com/programmer-competency-matrix/Читаешь, смотришь чего не знаешь - узнаешь. Дрочи структуры, алгоритмы, матан, солид, работу компилятора, архитектуры и тд.>>1383713Щас бы нубам советовать книги на англише.
>>1383709Изучать ООП на примере С++ - это обрекать себя на впитывание худших девелоперских практик и на обязательное и мучительное переучивание в будущем.мимоскрыл
>>1383709>Заучивать алгоритмыВообще не айс. Ты перед этим тупо заучивал разновидности хеллоуворлдов на Си? То-то же. Вот и с алгоритмизмом все поинтереснее.http://index-of.co.uk/Algorithms/Introduction%20to%20Algorithms%203rd%20Edition%20Sep%202010.pdfВникай, не пожалеешь. Если и убьешь время, то не на "заучивание".>переходить к крестам и ООПТоже ошибочное разочарование, якобы предстоит все только самое скучное. ООП - в первую очередь парадигма, а не всякие бесовские языковые конструкции, подлежащие запоминанию. Возможно, так будет ближе к сути:http://index-of.co.uk/Algorithms/Introduction%20to%20Algorithms%203rd%20Edition%20Sep%202010.pdfНеплохо еще покодить под Линукс, системные вызовы, сокеты-хуёкеты, вот это все. Доступный вариант:https://richard.esplins.org/static/downloads/linux_book.pdfИ приятность испытаешь, когда не сферический хеллоуворлд в вакууме, а какая-то прикладнуха с реальными взаимодействиями запустится.Можно ASM пощупать, осилить не слишком сложную теорию, позалипать в дебагере, понаступать на грабли, поизвлекать уроки, эмоции обеспечены.Лично я не стал бы отворачиваться в сторону современной движухи так рано. Как минимум еще кайф половить, а как энтузиазма и усидчивости достанет, то, глядишь, и не доведется уходить.мимо нетрудоустроенный студент
>>1383709>>1383730бля, со второй ссылкой промахнулся, вот быстрофиксhttps://www.cs.rit.edu/~ats/books/ooc.pdf
>>1383719> Изучать ООП на примере С++ - это обрекать себя на впитывание худших девелоперских практикПоэтому лучше взять gcc-objc и привыкать к правильному ООП на Си. Да, на Windows/Linux, да, без маковых фреймворков, потому что суть не в этом.> мучительное переучивание в будущемЭтого не избежать никогда.
Можно ли на чистом С сделать игру уровнем вроде контры с nes и насколько это геморно? Правильно ли я понимаю, что для этого SDL используется?
>>1383927Что в моем вопросе толстого? Писали же тот же дум 1-2 на чистом С.Бтв, вопрос по книжке. Хули компилятору не нравится? Я же точно как в книжке все написал. Сменил компилятор с GCC на G++ и заработало. Какого хуя?
>>1384003Вот целикомhttps://pastebin.com/PLTqn7pY>>1384001>>1384005Я про сложность спрашивал и sdl. То, что это возможно, я в курсе.
>>1384059> https://pastebin.com/PLTqn7pYПереименуй свой getline хотя бы в mygetline. В stdio.h есть своя версия getline.
>>1384062Почему именно opengl? И что такое glut?>>1384072Боагодарю. И это не мой гетлайн, так в книжке написано. Неужели книга так устарела, что уже некоторые примеры не работают? Это же не первое издание.
>>1384078Можно и не опенджл, но будешь свои методы писать взаимодействующие с директиксом. С опенджл же уже все написано за тебя. Ну и добавь уже гугл в закладки блджад
>>1384078OpenGL - это такой опенсорсный кроссплатформенный DirectX. Грубо говоря, интерфейс между тобой и видеокартой, чтоб все, что надо, в память видюхи загружать, запускать там нужные вычисления, и чтоб выводилось куда надо. Сам процесс обработки тоже пишешь ты на языке GLSL, похожем на Си, с нативной поддержкой матриц и векторов. Эти маленькие программки называются шейдерами, и с недавнего времени как минимум 2 шейдера - vertex и fragment - тоже должен предоставить ты, то есть даже крутящийся кубик не сделаешь без базовых знаний, как вектор с координатами множить на матрицу с синусами-косинусами-хуёсинусами, а потом еще в перспективу переводить, а потом еще z-buffer юзать, чтоб не насквозь все было. GLUT - набор кое-каких вспомогательных инструментов поверх OpenGL, чтоб не проделывать вручную ОС-зависимые прелюдия и еще кое-что. Короче, OpenGL - это интересно, OpenGL Programming Guide (большая красная книга) в помощь, остальное от лукаваго.
>>1384078Найди возможность поставить какой-нибудь линукс, хотя бы ноут из серии 1 гигло 1 ядро и поставить там gdb и юзать nm. Много вопросов отпадет. Ну или аналоги под шиндос как-нибудь, или на ведро или на чем ты кодишь.
В OpenGl можно в взять адрес памяти видеокарты(glMapBuffer()) и использовать memcpy между cpu и gpu. Насколько это безопасно? memcpy же заоптимизирован по самое, комп знает что это указатель на другое устройство или указатель как-то пометить нужно?
(uint64_t) - 1;Си знаю плохо, переписываю код с него на другой язык, никак не могу понять что в этой строчке происходит. Результат у нее всегда -1. Поясните пожалуйста механику.
>>1384174Это такой хитрый способ написать максимальное uint64_t число. А пишет -1 наверное потому, что ты печатаешь знаковые инты.
>>1384151Ну в марио синусы разве что для прыжка, но и то без них можно. И базовый кубик в OpenGL можно вывести, вообще ничего кроме арифметики не зная, вся математика есть готовая в либах. Но да, для платформера более чем достаточно SDL, а уж как выводить, оно там само разберется.>>1384160Нет никакого "другого" устройства, видеокарта точно так же висит на адресной шине, как и оперативка (на самом деле не точно так же, но похуй). На уровне кода разницы нет, ты просто читаешь/пишешь в обычню память, а какое устройство обрабатывает эти операции, твоему коду знать не нужно.
>>1384277Но ведь они же обещали оставить для совместимости с существующими приложениями, просто прекратили развитие и поддержку? Ну и пусть сами ебут друг друга в свой метал, макось не нужна.
Зачем на пикрил объявляется алиаст с таким же именем для объявленной структуры? Это чтобы в случае чего можно было сменить приватную реализацию или зачем? Или это чтобы в объявлении типа можно было писать CGRect без слова struct?
>>1384277Я что-то такого не слышал, можно ли ссылочку анон? А то больше похоже на один вася сказал.В мохаве opengl можно включить. В ios 12 он вообще по дефолту включен.
А я могу делать forward declaration для указателя на тип?Т.е. у меня в сигнатуре метода фигурирует указатель на некую структуру, заголовочный файл которой я не хочу подключать в своем заголовочном файле, а в файле имплементации.
>>1384419> А я могу делать forward declaration для указателя на тип?Можешь либо typedef struct struct_name type_name; у себя, и в функции type_name ∗argument. Либо ты можешь просто struct struct_name ∗argument без предварительных плясок. Естественно, все это работает, если тебе нужно только имя типа, но не его содержимое/размер. Вариант с typedef - это обычный для си способ положить наружу апи и скрыть реализацию.
>>1384160CPU пишет в память так же, как обычно, только попадает всё не в раму и кэши, а в GPU.Обычно эти участки памяти Write-combining, подробнее в https://fgiesen.wordpress.com/2013/01/29/write-combining-is-not-your-friend/
Всем привет.Недавно понадобилось одну простейшую программку написать на Си.И у меня тут-же возникла пара-тройка вопросов к этим вашим Си.Серьезно за время всего существования языка, которому уже более 40 лет, никто не решился реализовать НОРМАЛЬНУЮ работу со строками ?Что это за хуйня ? Пик 1Нахуя блять добавлять обратный слеш ?Почему в питоне можно просто написать три апострофа подряд и это будет строкой, которую ты мало того что можешь переносить, так еще и любые апострофы туда добавить.Я полагаю именно поэтому мейнстримно сейчас изучать то, с чем проще работать, язык Си просто шикарен, несомненно, но какова хуя.Второй вопрос без RAGE будет, скажите как мне правильно что-то запустить в командной строке ?ShellExecute ?system ?Причем нужно чтобы консолечка не появлялась, но команда отработала.Причем наибольший вопрос составляют кавычки, для выполнения команды нужно много двойных кавычек использовать, но я ебал слеши добавлять.
>>1384595Ну хорошоСо строка я вроде как разобралсяТеперь вот вопросКак уменьшить размер выходного файла ?Одной только опцией -s файл почти в 10 раз меньше стал, но я хочу еще меньше.У меня использовались windows.h и stdio.hПервая для ShellExecute и создания Win32 application штоп консоль не создавалась.Решил я не пользовать stdio.h для создания файла, потому что в windows.h есть CreateFile, размер уменьшился всего на 5 килобайт -_-Смысол всего кода в том что он должен создать файл, записать в него строку и запустить его.Как сделать код максимально оптимизированным в плане размера ?
>>1384551Какой же блять говнокод вырвиглазный, даже на превью глаза горят от этой хуйни. Ну неужели нельзя сразу писать красиво и удобно, чтобы даже 5 строчек твоего кода не вызывали смех и ярость?
>>1384657Да это полный пиздец на который даже смотреть не хочется, ты нахуя его притащил сюда? И да скачай библиотеку ебан
>>1384658Все у меня скачано, я содержимое папки поместил куда надо( к mingw) и линки -lSDL2main and -lSDL2 сделал, как и показано на скрине в ошибке.
>>1384603Cам никогда не уменьшал размер исходников, поэтому вот мой поток сознания с идеями:Попробуй LTO. Попробуй не весь windows.h, а только нужные подхедеры. Попробуй вообще не инклюдить ничего, а самому объявить нужные функции. Посмотри с depends.exe от чего лишнего зависит. Посмотри насчёт структуру получаемого PE, может там что-то лишнее что можно с помощью настроек линкера убрать. Попробуй вообще отключить CRT и написать свой, легковесный (ЕМНИП. венда так позволяет).>>1384571>Причем нужно чтобы консолечка не появлялась, но команда отработала.С CreateProcess можно. В винде есть аналоги линуксовых exec и друзей (https://docs.microsoft.com/en-us/cpp/c-runtime-library/exec-wexec-functions?view=vs-2019), но я ими не пользовался.
>>1384670Аутист тут только ты, съебись в школу 21, где тебя даже либы собирать не научили. Эх! Ты-то наверное думал, уже программист!
>>1384669Сделал Rebuild Project и стало вот такую хуйню выдавать и какой-то <stddef.h> открывать в новой вкладке.
>>1384682Иди, сука, хеловорлды пиши уебан глупый, и свои дырявые посты пиши в один блядь. И блядь добавь гугл в закладки
Вот подключение SDL - тот еще дроч. Начиная с того, что там есть два разных бинарных релиза, заканчивая тем, что оно иногда просто блять не линкуется и все тут. Алсо, есть ли на Гитхабе или еще где пример небольшого полноценного приложения, где GUI создается только с использованием WinAPI?
>>1384676>Попробуй не весь windows.h, а только нужные подхедеры. Попробуй вообще не инклюдить ничего, а самому объявить нужные функции.То есть я могу каким-то образом получить доступ к ShellExecute без windows.h ?Как это работает ?
>>1384571>>реализовать НОРМАЛЬНУЮ работу со строками Еще один. Ты почитал бы хотя бы причину появления именно такой строки.
>>1384746>>1384746интересная тема, а где можно поподробнее почитать о его использовании, как конпеляй делать я понимаю, но он уже скомпилит маленький файл или это нужно какими-то аргументами регулировать ?
>>1384746>#include <windows.h>>#include <stdio.h>>ShellExecute(NULL, "open", "text.txt", NULL, NULL, NULL);>main.c:25: warning: implicit declaration of function 'ShellExecute'>tcc: error: undefined symbol 'ShellExecute'Почему так ?
>>1384797>>ShellExecute>>shellapi.hhttps://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-shellexecutea
>>1384698Примеры есть на сайте Microsoft, где-то рядом с описанием функции CreateWindowEx.>>1384741Он хуйню тебе советует. Выходной размер exe-шника увеличивается из-за патчей для msvcrt, которые гцц статически линкует. Если собирать вообще без CRT, будет очень мало, но очень неудобно.>>1384854Спизди нужное из гцц. А дефки для библиотек там встоенная утилита делает, tiny_impdef, кажется.
В вузике изучаем графику в консоли с использованием windowsx, насколько мне это пригодиться в будущем?
>>1384870Очень маловероятно, что пригодится. Но навыки ебли Windows API пригодятся если MS внезапно не дропнет совместимость, лол, а они могут, у них совсем крыша едет.
>>1384868Я спиздил нужное с официального сайта TCC, там есть файл winapi full, и там есть shellapi.h.Почему-то та же самая ошибка.
>>1384749Не понятно, вот есть программа https://ideone.com/ooIlwc из книги, которая в теории должна выдать строку если она содержится в образце, на деле она выдает любую введенную строку, почему?
>>1384879> Почему-то та же самая ошибкаБыть не может. Покажи содержимое tcc/include и tcc/include/winapi. У тебя INCLUDE правильный стоит в переменных окружения?>>1384881> >= NULLПроиграл в голос. Убери это или замени на != NULL.
>>1384885В tcc/include/winapi shellapi естьВ tcc/include только что скопировал, выходит тоже самое.TCC нужно использовать переменные окружения для include ?
>>1384891Так это другая ошибка! Сделай: tcc -impdef shell32.dll, получившийся деф положи в lib, и собирай потом с -lshell32.
>>1384891А ворнинг, потому что ты NULL (указатель) вместо инта в последний параметр передал. Скажи SW_SHOWDEFAULT.
>>1384893>>1384896Спасибо вам, заработало, а теперь расскажите что это за деф и почему без него не работало ?На другом пека для работы никакой деф не нужен ?
>>1384900Это список экспортов дллки, чтобы линкер (в случае tcc - встроенный линкер) знал, где лежит функция. kernel32/user32 оно вроде автоматом подтягивает, а остальные нужно указывать явно. Вот ты и указал. На другой пеке нужна будет только shell32.dll, из которой ты ShellExecute дергаешь, но она системная и есть в каждой винде последние лет 30.
>>1384906А вот допустим нужно мне будет туда сокет прикрутить, какой тогда список указывать ?Где бы на русском языке почитать об этом всем, что-то я очень мало информации найти смог.
>>1384918> Где бы на русском языке почитать об этом всемВ машинном переводе MSDN, сука ненависть! На русском есть какие-то левые переводы MSDN. Но даже с нулевым скиллом английского можно посмотреть в MSDN внизу в описании каждой функции, из какой она длл и какой хедер инклудить. Для длл проделываешь ту хуйню с impdef, которую для shell32 делал, линкуешься с -lимядлл. Через десяток итераций ты таким образом сгенерируешь дефы для всех основных либ, и настанет счастье, но можешь написать скрипт и хоть всю system32 сразу обработать, если заняться нечем.> А вот допустим нужно мне будет туда сокет прикрутить#include <winsock2.h> перед windows.hИ линковаться с ws2_32.dll.
>>1384934Сделать .rc-файл (у них там вроде редактор ресурсов есть, не?). Манифесты кладут в ресурсы, а не просто компилируют как исходник.
>>1384942>ненавистьНу чего ты это, сердишься то ?MSDN я читаю, я не о WinAPI почитать хочу, а о тонкостях работы с TCC.
>>1385004> сердишься тоДа Microsoft заебала автоматически переводить технические статьи своим говнопереводчиком уровня "массив ворот дисплея" только потому, что у меня в браузере локаль русская. А кукисы с выставленным языком у них рандомно протухают, и опять все по новой.> о тонкостях работы с TCCТам есть doc/tcc-win32.txt, но tcc - это такая локальная редкоиспользуемая штука, поэтому читать лучше исходники.
>>1385030Эх исходники, понимать бы еще што там.Я так понял при компиляции иконку нигде не всунуть, всунул Resource hacker'ом.Ща буду туды сокеты засовывать.
>>1385040Можно засунуть через MinGW'шную утилиту windres.>TCC can link windows resources in coff format as generated by MinGW's windres.exe.>For example:>windres -O coff app.rc -o appres.o>tcc app.c appres.o -o app.exe
>>1385053>>1385053Ну вроде сокеты я приделал, но вот проблема, почему-то программа совсем не ждет подключения и получения каких-либо данных, просто завершает работу.Подключаться она подключается, я на скрипте-"сервере" это вижу.
>>1385103А ты пробовал вообще возвращаемые значения функций проверять? Ну хоть изредка? WSAGetLastError() там, да просто 0 или не 0 хотя бы?> memset(buf)> recv(sock, buf)Ты уверен, что это у тебя вообще собирается?
>>1385105Хм, а если убрать windows.h и так называемую точку входа >WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)То он ожидает и подключения и передачи каких-либо данных.
>>1385105Он работает когда я просто отправляю с сервера строку, помещает в буфер и выводит.Просто я хочу отправить файл, и что-то он его отказывается видеть.Обычный exe'шник принимается не полностью, а лишь его часть, я так предполагаю что это из-за наличия /x00/ в передаваемых данных. Это же вроде как символ того что строка закончилась.
>>1385111Выложи исходник нормальный, телепаты из треда за несколько лет разбежались. Но оставшиеся намекают, что \0 тут роли не играет (ну разве что ты не выводишь файл printf()-ом), а вот recv() нужно вызывать в цикле.
>>1385115https://ideone.com/rCQJ3oНасчет recv не знал, файл я не вывожу, но вот в файл пишу fprintf'ом
>>1385118> fprintfНу да, он останавливается на первом же \0, он для строк, а не для бинарных данных. Пиши fwrite-ом. И файл открой wb, а не w, а то на \x1a еще споткнешься.
Помогите разобраться, в чем отличие между (++argv)[0] и ++argv[0], то есть я понимаю, что у [] более высокий приоритет, но вот что из этого следует для меня загадка
>>1385121С файлами все получилось, додумался даже как имя файла сначала отправлять, понял для чего существует memset, без него в буфер имени файла попадал какой-то мусор.А зачем нужно recv в цикле делать, и какую делать проверку все отправлено было или нет ?
>>1385203Мусор не попал, он там и был, без причины память никто не очищает. И смысла чистить никакого нет, ведь ты всё равно туда свою строку пишешь.
>>1385206Откуда тогда в конец имени файла берется рандомный символ, если я туда свою строку пишу ?Типа мне надо как-то ограничивать кол-во символов которые во всем буфере составляет определенная строка, прежде чем строку из буфера куда-то вывести ?
>>1385196по идее, если параметры запуска - перечень какой-то однородной хуеты, то одноразово собрать их можно такwhile(--argc) chtoto_sdelat(*argv++);Но это какой-то gavnokodКороче, argc - это число параметров, с которыми запущена прога (включая саму само название проги "./proga"), argv - массив указателей на эти строки, то есть указетелей на первый указатель, и инкременируя его вместо индексации, ты делаешь его указетелем на второй указатель и т.д. Вообще, изначально все запускается не так, и стэк пушится не указатель на массив указателей, а прямо на месте все эти указатели складываются, но поскольку потом это первая хуерга вызывает main, то ему уже указатель на это место в стеке надо передать.
>>1385224Сишные строки заканчиваются нулевым символом. Ты сам должен заботиться чтобы так и было. А ты вместо одного нуля записал ВОСЕМЬ ТЫСЯЧ ненужных нулей. Макакин говнокод хуже этого трудно себе представить.
>>1385203> А зачем нужно recv в цикле делать, и какую делать проверку все отправлено было или нетИменно. send() может отправить не все твои данные, recv() может получить не весь кусок, который отправил send(). TCP - это поточный протокол, ему похуй на границы сообщений.>>1385208Студия на работе, саблайм дома, потому что в мелких-средних проектах иде не нужны.
>>1385845Если есть подсветска синтаксиса, вкладки и возможность прикрутить переход к строке с ошибкой, то можно и в блокноте. Раньше было модно в Notepad++ кодить, например.
>>1385879> а компилировать и запускать из блокнота ты как будешь> показ ошибок?Плагины же, запуск компилятора по хоткею, парсинг выхлопа регэкспами и подсветка строк. Хотя в том же npp все это уже из коробки.
>>1385801>дома в мелких-средних проектах иде не нужныКонсольное барахло поди, только непонятно зачем оно дома, что за проекты такие, или у тебя линукс дома? Я даже в школе в 80-х годах писал игры в графике и в прогах гуй рисовал, тупо удобнее и приятнее чем "введите номер для выбора" как инвалид. И до сих пор, честно, из прог что написал не припомню ни одной без нормального оконного гуя. А рисовать окошки в блокноте, даже не смешно.
>>1385900> что за проекты такиеЕбу байты, попутно высирая тонны отладочного выхлопа текстом. Не знаю, куда там гуй прикрутить - картиночки мне гнуплот генерит, кнопочки не нужны.> или у тебя линукс домаДа.> и в прогах гуй рисовал, тупо удобнееСпециально для тебя скриншот самого лучшего в мире компилятора с гуем. А fasm file.asm в консольке пусть дебилы вбивают!
>>1385873>Раньше было модно в Notepad++ Это же сеньеоры так джунов тролили, мол не кодишь в нотепаде - не программист. Ты правда на это повелся?
>>1385911Ты еще поймешь, что ждать, пока запустится студия, создавать проект, добавлять файлы, ползать по настройкам, меняя ключи компиляции ради какого-нибудь хелловорлда - это перебор. Потом поймешь и остальное.>>1385912> Это же сеньеоры так джунов тролилиТы про тех самых джунов, которые вопили "у вас тут нет пхпсторма, я не знаю пхп без него"?
>>1385909>Специально для тебя скриншотСпасибо, забавно. Судя по картинке, уж тут-то окошки/кнопочки нужны в последнюю очередь, лол.
>>1385951Потому что у тебя говнокод на Си. Ты int сравниваешь с long double. Там такая ебанина потом будет после 232-1 при сравнении с твоей переменной iterations. Компилятор за тебя производит смену типов для корректной обработки...
>>1385964да тут я проебался, почему-то думал, что double есть макс. целочисленный ок, объявил i и iterations как unsigned int
>>1385973>>1385974rand(); нет в stdlib.h. Не понимаю как компилятор без ошибок собрал. Ну и нода у тебя тупо из кеша берет результат.
>>1385974У тебя даже ответ написан уже, посмотри время CPU, у тебя нод код даже не выполнял скорее всего, сделай с принтом и перенаправь аутпут в дев/нулл и посмотри время.алсо нода использует сишные треды если мне память не изменяет
>>1385981> а i=0, дружок.да сорян только сейчас заметил> Ну и нода у тебя тупо из кеша берет результатхм, впервые слышу про то чтобы нода что-то кэшировала
>>1385985Ты сравниваешь V8 (с оптимизацией) и gcc (без оптимизации). Сделай -O3, и gcc выкинет весь твой говнокод нахуй, будут нули.
>>1385997Я не фронтенд-макака, и не знаю, что именно в V8 отключается (что-то отключается, да). Может оно этот пустой цикл еще на этапе парсинга выкидывает. Тем более, что там let i, и результаты вообще никак наружу не протекают.
>>1385999Я вообще жс не знаю, делал какую-то лабу в универе по веб-программированию и всё, так что тоже не могу сказать, что там можно отключать и как это делается.алсо убери сажу, в тематике же
>>1385316Ну теперь позаботился, отправляю в конце "сообщения" \x00.Я отправляю небольшой файл 2кб размером по сокетуОн помещается в буфер размером 8кбПри записи, файл имеет размер 8кб, что соответствует размеру буфера, но не реальному размеру файлаКак это решить ?
>>1386104Размер отправляй, ну! Весь твой протокол может выглядеть примерно так (send_all - send в цикле, пока все не отправится или соединение не будет закрыто, а recv_all, соответственно, recv в цикле):send_all uint32_t filename_length, content_length;send_all uint8_t[filename_length];recv_all uint8_t status; // Опционально можно просить у клиента подтверждение, что ему нужен такой файл такого размера.send_all uint8_t[content_length];recv_all uint8_t status; // Опционально, подтверждение, что клиент все принял и записал.Никакие нуль-терминаторы в коммуникациях, в общем-то, не нужны. Можешь после приема втыкать.
>>1386322Ты про numcmp?Два указателя типа char приводятся к double.Затем сравниваются и возвр-ся -1, если первое меньше второго, 1, если наоборот и 0, если не то и не то(равны).
>>1386355Это то ясно, я именно про comp спрашиваю, вот эта вот конструкций меня угнетает(int ()(void,void*))(numeric ? numcmp : strcmp)
>>1386369Это обычное приведение типа указателя, только не простого, а указателя на функцию. Ты можешь заметить, что sort принимает функцию с параметрами void, а реальная подаваемая функция с char, поэтому нужно приведение типа. Ну а справа оператор ?, с ним всё ясно.
>>1386369У тебя чекается нумерик, в зависимости от него, выбирается функция, имя функции это ее адрес, по факту, можно ещё и адрес взять, все равно разницы не будет, так вот, теперь вы определились с функцией но qqsort, принимает указатель на функцию другого вида, поэтому мы берём и кастуем указатель имеющейся. Нас функции к функции вида, которую ожидает qqsort, все достаточно просто.
>>1386379Шланг и гцц с перекосом в сторону первого, если есть выбор.>>1386422Я не вкатываюсь в Си, а на ноде вообще никогда не писал. Но не знать JS в 2019 стыдно.
>>1386654Чтобы иметь возможность взаимодействовать с окружающим миром, пропитанным жаваскриптом чуть более, чем полностью.
>>1386665>стыдно не есть говно >зачем мне есть говно>вокруг столько говна как ты можешь его не естьОкей.
>>1386682>Например, ты пишешь это из браузераDashchan>а в вокруг тебя приложения на электронеВайбер на ноутбуке и все.И нахуя мне знать жс - ты так и не смог ответить.
>>1386411> У тебя чекается нумерик, в зависимости от него, выбирается функцияЭто я понимаю> имя функции это ее адресЭто тоже вроде бы ясно> можно ещё и адрес взять, все равно разницы не будет, А тут хотелось бы поподробнееА дальше вообще ничего не понимаю. Почитал тут http://www.c-cpp.ru/books/ukazateli-na-funkcii и тут https://metanit.com/cpp/c/5.11.php, но подобных примеров там нет
>>1386734А вообще я так понял можно переписать отдельноint (cmdd)(void,void*)=(numeric ? numcmp : strcmp);и в вызове функции просто указать cmdd, это ведь то же самое? Только почему при таком задании нужно равно, а при изначальном все писалось слитно, и строка указателя была пуста?
>>1386739Да, можно.Равно потому что ты объявляет новую переменную - указатель на функцию.А там ты передаешь параметр, который кастуется, тоже самое что int i = 0;double d = (double)i;Обычный каст, ни больше, ни меньше.
>>1386752Хотя кстати тут тоже явный каст нужен будет скорее всего, в случае объявлении переменной, не уверен, но можешь засунуть в компилятор да чекнуть.
>>1386653Нахуя мне знать js? Если надо что-то написать на этом говне копипащу втупую с stackoverflow. Зависимости нет, брат жив.
Собсна помоги.UKR: Ввести масив дійсних чисел. Зробити копію масива та впорядкувати їх. 1) Деяким звичайним методом 2) (Рекурсивного розділення, або методом хуара) 3) Підрахувати та порівняти кількістьсть операцій порівняння та присвоєння у першому і другому методі. Примітка - рахувати тільки операції в яких бере участь елемент массиву. RUS: Ввести массив действительных чисел. Сделать копию массива и упорядочить их. 1) Некоторым обычным методом 2) (рекурсивный разделения, или методом Хуари) 3)Подсчитать и сравнить количество операций сравнения и присвоения в первом и втором методе. Примечание - считать только операции в которых участвует элемент массива.Сделал программку - https://pastebin.com/pLyV3VRu Там какбє нужно было выбрать 2 метода и написать тупо код, но ЙА сделал так чтобы учитель погладил по головке.(тупро через switch)Но Я не єбу як зробити (3) пункт. Козаче, допоможи.
>>1386422хз откуда такая помпезность и самолюбование вкачусь как-бы без особых проблем язык не выглядит сильно сложным. Может ты переоцениваешь его мальца?
>>1386869Это просто школьник, который в реальном мире, за пределами своей комнаты, ещё не был, и думает что языки как-то "по интеллекту" делятся
>>1386869Не, язык то очень простой, посмотри на стандарт, он совсем не толстый, не плюсы же.Но вот писать программы, а тем более сложные программы, уже проблематично, ты поймёшь это со временем.Асм вообще очень простой там инструкций-то раз-два и обчелся, но пойди попробуй напиши на нас что-нибудь хоть немного крупное.
Пацаны пацанчики, если у кого есть, киньте пример максимально понятной грамотной и правильной реализации односвязного списка, а то, разбираюсь уже какой день, а все равно многие вещи до сих пор непонятны, конеш, если есть ещё очередь стек и дерево, то это тоже
Бля а в чем смысл работы с текстовыми файлами, нахуй они нужны, пока вижу применение только в создании базы данных, что я недавно и сделал, а если более глубоко, как вы тут любите
>>1386906> сложные программы, уже проблематичнону кому как, может тебе стоит шаблонам/проектированию ПО уделить внимание ?
>>1386944Раз уж ты тут недавно, то скажу, не отвечай вкатывальщикам, троллям и выебщикам из школы 21, со временем, ты научишься их замечать по первому предложению. Если ответ надо получить быстрее, любой вопрос можешь дублировать в крестотред, а лучше, с большинством вопросов или сразу туда. Потому что в изучении языка там помогут лучше.
>>1386944А посоветуйте, чего прочитать? Я на задачах объемнее чем "laba_12.c" уже теряюсь и если и начинаю хорошо - рано или поздно забрасываю из-за роста сложности кода.Мимо
>>1386955Большинство си кода исторически всегда шло с документацией. И сейчас на Гиты в ридми/отдельным пдф, тхт их складывают
>>1386955начни с совершенного кода. Сложной технической информации почти нет, читается как бульварный роман. Есть 5-7 суперполезных советов.Думаю на двощах должен быть тредик аркитектов наверное остальную инфу стоит искать в шапке этого треда.
Сап программач, нужно написать функцию поиска слова с помощью bsearch, щито делать?char word;char ept;printf ("word:");scanf ("%c", &word);ept = (char) bsearch(word, MyArray, stroks, sizeof(char), compare);if(ept!=NULL) printf("%c find", ept);else printf("not find", word);int compare (const void, const void,int stroks,char MyArray){//чего тут надо?}с меня как обычно
>>1386944Я говорю не про себя, я говорю про вкатывальщиков, которые залетают со словами что тут сложного, язык же такой простой.
>>1386992Спасибо. И еще вопрос - стоит ли перекатываться на Си++98, если обычный Си в общем-то устраивает, но костылить свой ассоциативный массив и как-то париться со строками не хочется? Пишу свой корявенький валидатор текстовых файлов для моддинга одной игры, в перспективе развить до редактора.
>>1386909google: rosetta code >>1386953Вы только посмотрите на эту крестоблядь! Хочет затащить ньюфагов из няшной и простой сишечки в свое болото!>>1386994Для начала тебе нужно отсортировать массив, иначе оно искать не будет. Потом неплохо было бы читать более одного символа с помощью scanf(), если тебе нужно искать именно слово. И %c - это неправильный спецификатор для вывода найденного слова.> compare> чего тут надо?Тут надо удалить лишние аргументы, оставив только первые два, дать им имена, скастить каждый в const char * и сравнивать с помощью strcmp.
>>1387021>Для начала тебе нужно отсортировать массивготово>Потом неплохо было бы читать более одного символа с помощью scanf(), если тебе нужно искать именно слово. И %c - это неправильный спецификатор для вывода найденного слова.исправил на %s>Тут надо удалить лишние аргументы, оставив только первые два, дать им имена, скастить каждый в const char и сравнивать с помощью strcmp.эээ так?int compare (const voidsos, const voidhelp) { const chars=(char)sos; const charh=(char)help; return strcmp((const char)s,(const char)*h);не работает
>>1387041> не работаетПотому что я еще sizeof(char) не заметил в вызове bsearch. У тебя MyArray либо массив указателей на строки (тогда в compare надо их объявлять как указатель на указатель на char и дереференсить для strcmp()), либо это двумерный массив с каким-то максимальным размером строки, тогда ты вместо этого твоего sizeof(char) передаешь этот размер.
Товарищи, как запилить горячие клавиши на Си?Типа нажал я "Ctrl + L" - у меня какая-нибудь фича сразу же вылезла.А то я нажимаю "Ctrl + L" - у меня вылезает "^L". Это еще и энтеры жамкать!Как оно вообще реализуется?Если есть, кидайте ссылкуГугл явно не оценил моих запросов
Объясните почему не работает ?char [] ведь объявляет массив, элемент массива нельзя получить по его индексу ?
>>1387062символ (char) печатается на %c.Если же ты хочешь напечатать строку начиная с первого символа:printf("%s", &str); // или printf("%s", str + i);
>>1387055Никак. С это универсальный язык для любой кофемолки, поэтому не поддерживает клавиатуры, только текстовый терминал - получение набранного после нажатия Enter.Ссылка на поржать:http://forums.codeguru.com/showthread.php?340202-C-Equivalent-of-BASIC-s-INKEYКороче, ккри маня по при своей системы, как там работать с клавиатурой.
>>1386110Так, а теперь можно подробнее насчет uint8_t, uint32_t ?На Си я пишу клиента, которому сервер на питоне должен отправить файл.Я пытаюсь обойтись 1 сообщением содержащим имя_файла|размер, потому что думаю что 2 раза тянуть функцию recv() это ресурсозатратнее чем 1 раз получить строку и разделить её по разделителю.Strtok это еще одна функция, которая потратит определенное кол-во памяти и немного увеличит размер выходного файла, поэтому ее использовать я не хочу.Разделитель получился на пике.Не говнокод ли это ?
>>1387135>1 раз получить строку и разделить её по разделителю.Передавать числа в виде строк это типа модно и не ресурсозатратно?
>>1387136Я просто не ебу как мне со стороны питона отправить int.struct ?А что ресурсозатратнее, 1 раз отправить строку или 2 раза отправить имя размер ?
>>1387138По идее лучше один раз, но число строкой больше весит и нужно конвертить обратно в число на клиенте, что не сильно похоже на оптимизацию к которой ты якобы стремишься. Тогда уж лучше найди готовую библиотеку какого-нибудь JSON и передавай что хочешь как человек, без васянских велосипедов.
Как Си в плане самоудаления .exe ?Из примеров со StackOverflow и achat самый адекватный по-моему это удалять через cmd.exe.Вызывать cmd через exec/spawn, чтобы не ждать завершения процесса, выставлять задержку (секунды может 2, чтобы программа нормально работу завершила), и удалять.Нормальная задумка или нет ?
Пацаны, реализую функции для односвязного списка без удаления пока что, https://pastebin.com/XVjge32QВвожу элементы все нормально, но выводятся только последние 2, где я проебался?
>>1387262Зачем тебе в add указатель на указатель, есть хоть одна причина не передавать указатель на лист просто?Ты его даже именно как двойной указатель нигде не используется, везде разыименовываешь.А ещё у тебя нарушена логика, add должен делать, внезапно только add, он не должен являться конструктором в том случае, если получил null, загугли любую реализацию списка, братишка.
>>1387266Ну я же передаю адрес узла в функцию, то есть адрес указателя, поэтому указатель на указатель
>>1387142Вот в питоне есть struct.Возможно с его помощью создать пакет который будет до разделителя содержать строку, а после число ?Или мож трюк какой выдумать с числами, типа посылать букву, ASCII код которой равен длине файла ?Или еботни больше будет чем с преобразованием ?
>>1387267У тебя структура лист это текущий узел, чтобы передать его адрес нужно передать указатель на структуру лист, разве нет?
>>1387273Сделал через обычный указатель, с возвратом значения https://pastebin.com/wZUWKEQwВообще ничего не выводит)
>>1387273https://pastebin.com/SxQ5ZtGqСделал так, все хорошо выводит, в аргументах двойной указатель, потому что в этой функции я сразу инициализирую, так как, чтобы поменять значение какой-либо переменной, нужно передавать ее адрес, как я понял, в моем случае эта переменная указатель, и я передаю адрес указателя.Остался только один вопрос, почемуя вместо этого:ptr = ★temp;while (ptr->next != NULL){ ptr = ptr->next;}ptr->next = t;Но если я запишу так, то у меня выводятся только 2 последних элемента, почему так нельзя записывать?while ((★temp)->next != NULL){ ★temp = (★temp)->next;}(★temp)->next = t;У меня есть догадки, но думаю они неправильные
Объясните как так.Почему питон может пикрелейтед, а Си нет ?Словом как выводить символы <256 или вообще что-либо с ними делать ?
>>1387360томушо питон проектировался позже няшной с поддержкой юникода. В Си юникод нужно поддерживать ручками и подцеплять wchar.hШирокие символы в два раза жирнее простых ascii-символов. Где-то это плюс, если нужна переносимость, где-то это минус, если нужно меньше памяти потратить.
>>1387135Передавать имя_файла, размер_файла плюс какие-то разделители тоже можно. Это вопрос вкуса.> Не говнокод ли это ? Говнокод. strchr()/strtok().> увеличит размер выходного файлаТы же тот анон, что tcc на винде использовать пытался? На память похуй, ты либу все равно уже загрузил. Что касается размера файла... то можешь сам посчитать - импорт функции из длл - это, грубо говоря, 4 байта (sizeof(uintptr_t)) + 2 байта (sizeof(uint16_t)) + длина имени фукнции, считая \0. Мне кажется, твой говнокод больше весит в любом случае.>>1387138> что ресурсозатратнее,Сериализовывать и парсить числа ресурсозатратнее. Но сначала скажи, сколько миллионов файлов ты собрался передавать, и где, в таком случае, твой конечный автомат и асинхронный IO?>>1387177> Как Си в плане самоудаления .exe ?Зарепортил начинающего малварщика.>>1387399> томушо питон проектировался позже няшной с поддержкой юникодаЛучше так: после того, как Си уже обосрался с поддержкой многобайтовых кодировок, питон нихуя не научился на чужих ошибках и тоже обосрался. Потребовалось изобрести целый новый питон 3, чтобы это исправить. У Си такой возможности не было.>>1387360> как выводить символы <256{b]Возможно, вы имели в виду > 256[/b]Кодировать эти символы в UTF-8 и выводить стандартными сишными средствами. Сейчас проблема терминалов в KOI8-R, к счастью, исчезла, и осталась лишь (решаемая) проблема терминалов в CP866.
Ну то есть все что >256 кода ASCII Си никак не воспринимается без сторонних либлиотек ?А используя wchar можно будет получить код символа ASCII выше 256 ?1488 например.
>>1387437а тебе оно вообще нахуя надо-то? Просто u_char удобно читать дампы. Что-то можно сразу в полноценные строки перевести, а что-то давным-давно стандарт в вебе.И на твой вопрос: Да. wchar может получить код символа 1499 в юникоде. Но вот только Си не про это.
>>1387436Почти все на что ты ответил это я тот анон.Насчет strtok>либу ты все-равно уже загрузилА я string.h и не загружал, strtok вроде там находитсяПамяти она и не занимает, но вот работает всяко труднее говнореализации по разделителю.Файл должен отправляться 1.Я подумал что изобрел вариант нееботы с преобразованием строки в число.Так как любой символ (char) это в принципе уже число, почему бы со стороны сервера не отправлять строку с файл_нейм|chr(len(файл)) ?Типа например если файл весит 2048 байт, отправлять символ с ASCII кодом 2048.Изврат, да, но если бы Сишечька могла, было бы гораздо проще чем atoi, ящитаю.Но раз для этого судя по всему нужна еще библиотека, то нахуй.Я не делаю никакой малвари, просто программа-загрузчик после загрузки уже не нужна.
>>1387445>ASCII кодом 2048хм....Аноны, а когда ascii-кодировку успели так нихуёво расширить, а то я только что подъехал и чота видимо пропустил.
>>1387445> А я string.h и не загружал, strtok вроде там находитсяЭто хедеры, они не влияют на размер, по большей части в них находятся только объявления. Можешь вообще их не подключать, а объявлять функции в своем .c файле, ничего не изменится. А вот либа, которая все это реализовывает - одна и та же: tcc линкуется к msvcrt.dll (можешь взять http://www.dependencywalker.com/ и посмотреть сам, если не веришь). И эта либа не может грузиться частями, поэтому ты ничего не экономишь.> Типа например если файл весит 2048 байт, отправлять символ с ASCII кодом 2048.Символ с кодом 2048 кодируется двумя байтами: 00 08 (или тремя e0 a0 80, если у тебя UTF-8). Теми же самыми двумя байтами может кодироваться число 2048, никакой магии.> Файл должен отправляться 1.Так что ж ты концентрируешься на таких мелочах, которые абсолютно не играют никакой роли ни в быстродействии твоей программы, ни в потреблении памяти, а даже если бы и играли, это сотни байт, а не сотни мегабайт.> просто программа-загрузчик после загрузки уже не нужнаСделай как человек тогда: MoveFileEx("govnokod.exe", NULL, MOVEFILE_DELAY_UNTIL_REBOOT). После ребута винда все сама отлично грохнет.
>>1387458Насчет веса/размера понял.>символ с кодом 2048 кодируется двумя байтамиНа путхоне я это уже понял, не понял только как на Си эти байты...декодировать чтоли обратно в 2048.Я не концентрируюсь на мелочах, я не знаю как размер загруженного файла сделать равным данным которые пришли, а не размеру буфера в котором эти данные находились.Где с тобой почятиться можно, заебало гидранты искать.
>>1386869>Может ты переоцениваешь его мальца?Когда самым рациональным решением задачи будет ебля с препроцессором и дрочево макросами длинною несколько экранов, вспомни свой вопрос. Посмеешься.
>>1387460Посылка файла в питоне:filename = 'проверка.txt'filedata = b'...' # Читаешь из файла.filename_bytes = filename.encode('cp1251')s.sendall(struct.pack('<II', len(filename_bytes), len(filedata)) + filename_bytes + filedata)Прием в сишке:struct file_header { uint32_t nbname; uint32_t filesize; } header;recv_all(s, &header, sizeof(header), 0);char ∗filename = malloc(header.nbname + 1);recv_all(s, filename, header.nbname, 0);filename[header.nbname] = '\0';uint8_t ∗filedata = malloc(header.filesize);recv_all(s, filedata, header.filesize, 0);FILE ∗fp = fopen(filename, "wb");fwrite(filedata, 1, header.filesize, fp);fclose(fp);free(filename);free(fileadata);Вот и все. Плюс валидация имени файла, проверка ошибок в каждой строке и все такое прочее. Плюс реализация recv_all. Ну и я наверняка какую-нибудь скобку где-нибудь проебал. Это будет работать на всех little-endian машинах (читай: пока ты не найдешь какую-нибудь MacOS 9 на PowerPC).> я не знаю как размер загруженного файла сделать равным данным которые пришлиЯ еще много сообщений назад советовал fwrite, ему можно указать, сколько байтов писать.> Где с тобой почятиться можноЯ все что мог, уже рассказал.
>>1387473А что не так, кроме избыточной вложенности? Сделай отдельную фукнцию/функции, утащи туда внутренний цикл/циклы, и будет норм.
>>1387473>entry = &(ef->entries)Делай просто "entry = ef->entries + i". Офигенный стиль, всем рекомендую. Сам пару лет назад начал так писать.Алсо, инициализируй entry и slot при первом упоминании. Всё равно у тебя не ANSI C, как я вижу.
Что могло сломаться тут? Почему на одном конкретном файле fseek перестает работать? С другими все нормально. Кодировки одинаковые, ANSI, везде обычный CR/LF. Тупо после одного успешного срабатывания больше ничего не делает.
>>1387650Немного отладочного кода протекло. Должно просто возвращаться назад по файлу до первой открывающей скобки, но оно просто зависает в бесконечном цикле! На всех сука остальных файлах работает как надо, выкобенивается лишь с одним.
>>1387653Проблема в том, что позиция в файле не откатывается, хотя есть куда. Он должен уходить на два байта назад - но с этим конкретным файлом не хочет. Кодировкам там тот же ANSI.
>>1387657Ноль он возвращает. На всех остальных файлах все нормально. Я уже и в хекс-редакторе их сравнил, нет аномалий никаких.
>>1387658Сначала там считывается вся строка. Потом откат до открывающей скобки (и гарантируется, что она есть).
>>1387651Дай угадаю, fseek() не сбрасывает ни ошибку, ни EOF, и поэтому тебе fgetc() возвращает EOF всегда. Попробуй сделать clearerr() внутри цикла ради разнообразия. И вообще, seek - дорогая операция, зачем так делать, неужели не проще прочитать в память и ебаться в указатели?
Лол, проще за него все сделать. Ощущение, что человек вообще про гугл не слышал и наступает на все возможные грабли.мимопроходил
>>1387822Ну, в данном случае гугл не помог. Лучше, наверное, переписать с нуля, но я ж заебусь. Да и в целом, писать парсер текстовиков на сишке - выбор такой себе. Мне просто страшно даже пытаться начать прикручить гуишку на винапи
>>1387834>писать парсер текстовиков на сишкеХобби не хуже прочих, десяток точно написано.Или больше, не помню уже.
>>1387468У меня все-же не отпал вопрос касательно получения кода символа.Вдруг в будущем какие-то заебы с этим возникнут.Приведу вопрос к конкретике.Я с питона отправляю сокетом символ с ASCII-кодом 200.>s.sendall(chr(200).encode('utf-8'))В Си для приема сообщения из сокета выделяется буфер char размером предположим байт 20.>char buf[20];>recv(sock, buf, sizeof(buf) , 0);После того как сообщение было отправлено, как мне в Си вывести код символа который был принят ?
>>1388073> s.sendall(chr(200).encode('utf-8'))Ну короч идешь открываешь википедию и читаешь, как устроен UTF-8 и... сложно это все, в общем. Или берешь iconv. Но если у тебя исключительно винда, то ты можешь: MultiByteToWideChar(CP_UTF8, ...), чтобы получить из последовательности байтов последовательность wchar_t, и опционально обратно WideCharToMultiByte(CP_ACP, ...), чтобы отмапить юникод в MBCS (например, чтобы получить имя файла, которую прожует fopen). Естественно при этом символы, которых нет в активной кодовой странице (Windows-1251) проебутся.
>>1388101Ладно, как пригодится так буду думать, а то у меня щас голова лопнет.Если ты тот анон который весь тред мне помогал, то спасибо тебе, ты не просто очень здорово помог мне, ты пробудил интерес к изучению Си, до этого я скриптовал на питоне и был доволен, а сейчас у меня открылись глаза.Ня.
Пишу калькулятор с умножением/делением, плюсами/минусами и скобками, для парсинга собираюсь использовать рекурсивный спуск. Как я понимаю, сначала в спуске идет функция, проверяющая на плюсминус, затем на дивмул, затем на скобки, затем на числа? Есть где-то вразумительное гайд? Просто в нагугленном не могу понять, что означает такая запись, например:выражение ::= слагаемое [«+» или «-» слагаемое] слагаемое ::= множитель [«» или «/» множитель] *множитель ::= число | переменная | (выражение) | +множитель | -множитель
И да, твой вопрос такая хуета непонятная, что сразу видно - в школе математику прогуливал. Иди читай про приоритеты операций, виды записи, и нахуй иди долбоеб
>>1388158чувак, поймы, ты первый, первопроходец, никто до этого не делал до этого, ты на ходишься на краю информационных технологийконечно у тебя не будет сначала получатся, но ты пытайсяи, возможно, через года, у тебя сформируется теоретическая база, формальная математическая модешь, которая позволит реализовать калькулятор с плюсами и скобками
>>1388191Скажи спасибо гниловузам, навязывающим быдлу ненужный язык. В 2019 считать си языком общего назначения будет только полный дегенерат, что не мешает задавать на нем сортировочки и прочую парашу общего назначения, когда для этого есть правильные языки. Такое-то образование-дебилозование.
Почему tcc не хочет компилировать ?Хочу скрыть появляющуюся при запуске программы консоль.Делать это через WinMain можно, но мне надо без дополнительных проблем получить argv, поэтому я подумал использовать обычный main с:>ShowWindow(GetConsoleWindow(), 0)Перед инклюдом <windows.h>Указал #define _WIN32_WINNIT 0x0500Собираю с -lkernel32 -luser32Ошибка: undefined symbol 'GetConsoleWindows'
>>1388257>Делать это через WinMain можно, но мне надо без дополнительных проблемБез дополнительных проблем используешь WinMain и функции получения аргументов.
>>1388262То есть всякие GetCommandLine нормальное явление чтобы получить нулевой элемент argv, то бишь имя файла.
>>1388379Разобрался, надо было DeleteFileW вызывать.Как в windows создать процесс и не ожидать его завершения(exec в линукс) ?
Сап, такой вопрос, я студент и дальше написания лаб и базы данных, на си естественно, ничего не доходило, какой проект можно написать, чтобы кайфануть от сделанного, все темы по сишке уже прошел, хочется что написать что-то более менее серьезное и в тоже время простое, при этом набраться реального опыта, что подскажете делать?
Чет я запутался в указателях. Вот я передаю указатель на начало строки функции пусть будет *filenameИ хочу напечатать эту строку. printf("%s", filename) Почему так? filename это разве не число, не адрес начала строки?
>>1388689> проект можно написать, чтобы кайфануть от сделанногоhttps://www.youtube.com/watch?v=HQYsFshbkYw
Пытаюсь в рекурсию, объясните, как эта хуйня работает?Я все понимаю, что выводится 1 2 3 4 4, но дальше какого хуя?Почему выводится еще 3 2 1, если на последнем выводе было две 4 и все.void p(int n){ printf("%d ", n); if (n < 4) p(n + 1); printf("%d ", n);}int main(){ p(1); _getch();}
>>1388738Тому что у тебя 2 принтфа. И оба выводят ЛОКАЛЬНЫЕ переменные. Которые не меняются при вызове функции. Даже при вызове самой себя. При каждом входе в функцию создаётся новая копия переменных. И при выходе из функции ты продолжаешь работать с набором переменных, которые были созданы при именно этом вызове именно этой функции. И другие вызовы не могут их поменять. если ты не будешь использовать ссылки или ломать стек.
>>1388747Дополню. Хотя в твоём случае скорее не допонимание процесса выхода из функции. Ты входишь четыре раза p(1), p(2), p(3), p(4). И при выходе из p(4) продолжается выполнение p(3), при выходе из p(3) продолжается p(2) и так далее, пока не вернётся управление в мейн.
Аноны, у меня тут охуительная идея...Вот грубая сортировка строк по принципу radix sort (если ничего не путаю, по introduction to algorithms пока только до chapter 8.2 дошел) https://pastebin.com/j31vAdHU . И тут я подумал, что на big endian архитектуре можно было бы добиться сверхзвуковой скорости работы за счет оперативки. Например, сделать массив всех unsigned short int (всего 65 килобайт) и группировать по парам знаков за раз, кастуя адрес как (short ∗). Но на little endian не канает, т.к. лексикографически старшая буква будет браться как младший разряд. В связи с этим вопрос знатокам, который вряд ли легко гуглится. Используется ли что-то подобное на конских компютерах, ведущих межгалактические базы данных с кучей строчных рекордов, которые периодически надо быстро грубо сортануть?
>>1388833Причем тут работа оперативки в big-endian?Это вообще говна кусок ненужный, поэтому он настолько непопулярен.
>>1388841да мне тоже, когда я на асме кодил, little-endian в большинстве случаев казалась более практичной. Я о том, что на big-endian, например, сравнив две строки длиной в 4 знака, как (unsigned )s1 - (unsigned )s2 получишь лексикографически корректный результат. А на little-endian придется дергать ntohs() или что-то вроде того
>>1388841оперативка при том, что в count sort различать на 8 бит более длинные значения выйдет дороже в 2^8 раз по памяти
>>1388852я не говорю, что это плохо. Всего 65кб ведь (или 16мб, если изъебнуться и по 3 байта брать). Просто факт, что проц экономится за счет оперативки, при на 2-кратную экономию проца уйдет в дважды большая степень двойки оперативки (2^16 против 2^8)
>>1388852ой... до меня дошло, что ты имел ввиду. Пожалуй, я зря насрал в тред. Опять студент не сдержался. Не судите строго
>>1388709Передаешь char*(звезда) filename?Внутри функции переменная filename имеет тип указатель на чар.>filename это разве не число, не адрес начала строкиЭто и есть указатель, с подключением, через %x (процент x) можешь его распечатать.Тред заполонили токсик хуесосы.
>>1388895Согласен. Только говно может не понять, что имеется ввиду, а именно, божественный язык, божественный тред, божественные юзеры. Лучей добра тебе, анон.
>>1389033Нет, это такой язык программирования называется си плюс плюс, это как си, только круче и мощнее, рекомендую.
>>1389126Язык, где все указатели restrict - это примерно то же, что и язык без указателей вообще. Нет.
Однако, здравствуйте!Вопрос.Как открыть корневую папку на Windows?Суть проблемы:на "opendir("/")" - мы попадаем в корневую папку !раздела. То есть если программа была запущена из диска "C", то мы попадаем в "C:\". Если программа была запущена из диска "D", то попадаем в "D:\". И т. д.А как мне попасть в самый корень? Где я бы мог посмотреть, какие диски есть, и открыть нужный.
>>1389393А чего ж сразу не opendir("//"), чтобы посмотреть, какие сервера есть в интернете? GetLogicalDrives() используй, тебе хватит.
>>1389409Ну, несколько подряд идущих слешей картины никогда не меняли, а за GetLogicalDrives() спасибо.
>>1389435Только макросы порт тем, что плохо читаются, в принципе причесать твой код и будет заебись, в плане логики все ок на первый взгляд.как минимум дай нормальные названия аргументам, чтобы можно было по ним сразу понять какой за что отвечает, а не читать комментарий, спасибо что он хотя бы есть кстати
>>1389438Ну вообще на макросах можно запилить всё, вообще все.Только это будет пиздец как нечитаемо, но это уже будет не так важно...
>>1389438Тысяча слов "вы приняты" на собесах ничто в сравнении с честью не быть обосранным в богоподобном Си-треде. Лучей добра тебе, анон. Не зря брался за алгоритмы.
>>1389442>всё, вообще всеОни не Тьюринг-полны, так что нет. Да и циклы на них так себе, вручную приходится писать. Но есть и крутые вещи, да. Например, X-macros.
>>1389432> картины никогда не менялиА ты никогда не задумывался, почему после http: два слеша, а не один? А почему в винде \autoexec.bat - это твой autoexec.bat, а \\SERVER\C$\autoexec.bat - соседский?>>1389435Мог бы сделать static inline и не плодить говнокод. Отдельный дизлайк за VLA.
>>1389455>А ты никогда не задумывался, почему после http: два слеша, а не один? А почему в винде \autoexec.bat - это твой autoexec.bat, а \\SERVER\C$\autoexec.bat - соседский?Ну в url двойной слеш вроде вообще о другом. Где-то между строками речь в действительности шла о путях в операционных системах...А прекола с виндой я не понял, потому что слишком тупой.
>>1389448Ну все, что тебе нужно сделать можно, тьюринг-полноты нет, т.к. нельзя весь код нужный тебевыполнить на этапе компиляции, но учитывая для чего нужен си ему и не нужна тьюринг-полнота.
>>1389455>static inlineя использую макрос не в побеге от оверхеда call/ret, а чтоб использовать контекст (во всех трех случаях разный тип указателя). inline ведь впендрюривает маш.код по месту вызова, сохраняя ту же семантику, что и при вызове?>VLAты о том, что не следовало усложнять инструкцию эксплуатации макроса комментарием "k must be a constant", а вместо int b[k] = {}; написать int b[k]; memset(b, 0, sizeof(b));?
>>1389550ммм, переоткрываешь как делать обобщенное программирование на макросах в си?на, глянь, как бати делаютhttps://people.freebsd.org/~jasone/jemalloc/progs/rb.hhttps://github.com/freebsd/freebsd/blob/master/sys/sys/tree.hОбщее количество альпинистов, поднявшихся на Эверест с начала его истории: 9044 человек, без учета повторных восхождений.
>>1389551Больше балдею от своего велосипеда с адаптацией идеи radix sort для double, все это байтоебство. А про макросы просто лозунг дня выкрикнул.
>>1389551Выглядит круто. Но есть ли смысл в таком не при написании ОС? Вот, например, хочу ассоциативный массив строка-строка. Может, лучше через функции?
Сап двач, решаю задачи по си и здесь задание:"Выведите таблицу, состоящую из десятичного, двоичного, восьмеричного и шестнадцатеричного эквивалентов." Что это хоть значит и как это сделать? Можете показать пример хоть для одной из систем счисления и объяснить что к чему? Гугл выдал перевод из одной системы счисления в другую или это и нужно сделать?
>>1389763https://ru.wikipedia.org/wiki/Printf#%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D1%82%D0%B8%D0%BF%D0%B0
>>1389794Если у тебя это лаба, то ты сам должен сделать конвертацию. препод иначе по рукам надает. Вики на случай если это надо тебе.
>>1389805для себяхз слепил https://ideone.com/HTwGcwперевод в двоичную скопировал с другого сайта не вникая в подробностииз минусов 0 в двоичной = 1можно просто с помощью if изменять в таком случае хаха
>>1389862исправил на 0, сломал перевод в двоичную.А чтобы исправить просто перед while() нулевые значения и цикл начал с 1;
>>1389560в случае когда adt реализуются на макросах есть преимущество в том, что сохраняется контроль типов - в результате препроцессирования сгенерируется набор функций, работающих с конкретным типом элемента в контейнереальтернатива макросам при реализации идей обобщенного программирования - это работа через нетипизированный указатель, либо через оберки над этим нетипизированным указателем, в любом случае это означает "выключение" контолья типов, а слежение за правильностью того что будет класться в контейнер теперь будет не на компиляторе, а на программистено у второго подхода есть другое преимущество - а именно то что это позволяет работать над таким контейнером через границы загружаемых модулей - интерфейс то контейнера в виде набора функций уже определен (пусть и принимает нетипизированные указатели), а значит может спокойно торчать из dll или soвсе равно по итогу соображения универсльности перевешивают над соображениями о строгости контроля типов и чаще всего проектируют вторым способоместь еще и третий способ - для какой-то библиотеки определяется набор допустимых для нее типов и тем-или иным подходом эмулируется в языке тип variant, а дальше уже в качестве элементов контейнеров принимается этот variant
>>1389909А еще можно писать конкретные реализации. ADT редко нужны, максимум вот этот самый variant, который ADT не является.
>>1389909https://apr.apache.org/docs/apr/1.7/group__apr__skiplist.html#ga326fdccaf516e5296969fa03bbda3fcaвот, к примеру, реализация списка с пропусками в apr, элементы через нетипизированные указатели
>>1389911>А еще можно писать конкретные реализации. ADT редко нужнызаебешься писать каждый разэтим как раз то начинающие драйверописатели и страдают - реализуют, к примеру, свои структруры данных, в то время как кернелл любой ос уже предоставляет готовые обкатанные реализации
Есть одна функция и она не работает.https://ideone.com/u59vb0Есть файл, в нем n строк в каждой 3 символа и знак новой строки. Надо считать их в файл. Что я сделал не так? Когда число строк больше 5 программа выдает ошибку
>>1389923Темплейты можно пилить на макросах, это было даже до того, как эти самые темплейты появились в плюсах, расслабься, студентик.
Есть какие-то либы для работы с икпорт протоколами?Документации чисто технические, гугл названия этих протоколов считает опечатками и ничего не выдает релевантного.Начинающий ембед-лох
Вот посоветовали вы считать файл в память, и лишь потом обрабатывать. А как, блджад? Мне писать отдельную функцию по получению строки из считанного в файле, копировать в динамический массив нужную подстроку, и только тогда ее использовать (поудалять лишние пробелы и табуляцию, разлепить слова, цифры и другие символы, разбить на токены )?
>>1390377> копировать в динамический массив нужную подстрокуЗачем? Она уже в памяти. Если ты ее не будешь по-другому повторно парсить, можешь ее уродовать прямо по месту.> поудалять лишние пробелы> разбить на токеныПо месту. \0 для разбивки на токены тоже по месту.> Мне писать отдельную функцию по получению строки из считанного в файлеДа. strtok() называется, ищи \n, убирай возможный \r из конца строки. Алсо, можешь объединить с разбивкой на токены и удалением пробелов, тогда будет один проход, а не два-три.
>>1390379>Да. strtok() называется, ищи \n, убирай возможный \r из конца строкиОх, а вот до такого я не догадался, спасибо. Инерция мышления какая-то.
>>1390386Это не обязательно. Я, например, недавно в подобной задаче вручную посимвольно парсил и сразу бил на токены. Конец строки и конец файла - отдельные типы токенов.
>>1389969>0xC0000005Access violation же. Читаешь невалидную память (возможно, нулевой указатель?) Запомни эту цифру, она часто встречаться будет.
Сделал программу https://ideone.com/AQZTbv, мне нужно посчитать количество сравнений, каждый цикл я добавляю 2, ведь сравнений чисел 2, но в итоге получаются какие огромные цифры, даже не близкие к nlogn, а ведь столько сравнений должна делать пирамидальная сортировка. В чем моя проблема?
>>1390462Код не читал, O большое не имеет никакого отношения к фактическому количеству операций. Оно показывает, как этот показатель будет расти при росте n. Это не говоря о том, что сравнение строк само по себе нихуя не O(1).
Сегодня челик из интернета пытался мне прочитать лекцию по поводу того как мой код плох, прога на 40 строк генерящая тхт файл с консоли. На вопросы выдавал ссылки из вики "правила оформления кода", ссылки на хабр типа 100500 способов писать код правильно и тому подобное. о моему мнению у меня пропущена пара пробелов на которые вообще положить. На вопрос конкретные где проблема уходил в затуп. На вопрос на чем писал ответил только писал на крестах на 1ом курсе. Это что вообще было? Ресентимент? Современная айти токсичность или так действительно учат? Ну или я склоняюсь к тому что он все таки мудила.
>>1391231Твой код восхитителен. Хочу заниматься его поддержкой и доработкой. Позволь мне это делать, я готов даже сосать тебе за вклад в твой код.
>>1391221Есть хороший маркер - если человек употребляет слово "токсичный", с ним в ближайшие лет десять не о чем разговаривать, код смотреть уже не слишком-то и нужно.
>>13912311. Индентация. Любой нормальный редактор поможет тебе это сделать. С ней любой код станет в 10 раз более читаемым.2. Всегда ставь скобки после while/for/if. Сам же видишь, что можешь огрести иначе.>":regional_indicator_" "%s" ": "Зачем? Почему не просто ":regional_indicator_%s: "? По мне лишние кавычки добавляют лишний шум.>/ return to EOF /Лолват
>>1391352Нужно везде, люди которые достаточно кодят читают код очень быстро в любом нормальном оформлении от твоего кода произойдет резонанс, суть оформления именно в том, чтобы это было логично скомпоновано и удобно для чтения, когда читаешь твой код надо буквально всматриваться в каждую скобку, хотя учитывая размер кода тут это вообще смысла не имеет, попробуй исправь оформление и сравни код до и после, надеюсь ты поймёшь разницу, а если нет, то тебе нужно ещё поучиться писать программы, дружок.
>>1391363Пирожок, справедливости ради ситуация была такая что я написал простенькую прогу, попросили исходник, там как бы не подразумевалось что кто-то будет читать когда-то мои исходники. А до меня доебались хули не все вылизано идеально. В общем-то похуй.
>>1391409if написан правильно, а while нет, нужно писать в одной строке что к нему относится. Строки это отдельные сущности, неправильно так разрезать посередине.
>>1391419И строками же. Строки должны соответствовать ;А для многострочных сущностей есть фигурные скобки.Ты же разбиваешь одну сущность ; на две строки, это нарушает смысл написанного кода.
>>1391433>нарушает смысл написанного кодаЧитаемость может чутка страдает, а смысол на месте ведь все работает.
>>1391409Я не пойму, ты толстишь, или как? Никто с мало-мальским опытом не пишет микрохуйню гавнокодом, а норм прожекты красиво. Это раздвоение личности. Руки сами должны писать всегда нормально, ломать привычку ради "ибо нехуй доебываться" - себе же труднее. Приучивать себя делать что-либо по-людски надо всегда и везде, не существует случаев, где "и так сойдет", это все одна сплошная инвестиция в будущее. Ну, и как анон сказал, это тебе кажется, что норм, потому что ты и чистый, и говнистый код читаешь по слогам. А опытные кодеры умеют "сканировать" глазами, но это умение работает только когда все как следует отформатировано. Никто не станет ехать на спортбайке по говну, потому что на батином Урале один хуй было, что грязь, что автобан.мимо крокодил
>>1390527> алгоритм сортировки, работающий в худшем, в среднем и в лучшем случае за Θ(n log n) операцийТут прямо написано, что это число операций
>>1391460ой блядь, мазила, себе ответил. Вот, это тебе было:что, переходим на маня фантазии? Давай, попытайся убедить меня в том, что я тоже пишу без отступов и фигурных скобок, а на контрпруф кукарекни "чужое скопипиздил". Потом я сфоткаюсь с распечаткой своего кода и сигной /pr/ 29.04.2019 , а ты обозвешь меня социоблядью и вообще "диванооон!!! тгавляяя!!!" Знаю я вас демагогов, вам лишь бы посамоутверждаться. Приперлось на борду пожаловаться, что его в шараге гавнокодеров обозвали, ага...
>>1391444Не важно слегка или нет, это ошибка.Вот смотри, твой аргумент про ненужность отступов я понимаю и согласен. В этой программе нет длинных или вложенных блоков, поэтому код читаем и без отступов. Тут ошибки нет. Однако, разбиение на строки двухоператорных сущностей идет против логики кода. Это ошибка.Если ты специально троллишь, тогда ладно, но если не троллишь, значит плохо понимаешь логическую структуру кода языка С.
>>1391498Таблетки прими, вкатывальщик. Логические условия переносили ещё 30 лет назад. >логическую структуру языка силол, чё это ваще значит? Иди книжки почитай. Indentation это просто для глаз. Рантайм парсит только точку с запятой, скобки и ключевые слова, никакой блять разницы нет будешь ты параметры вайл стейтмента писать в одну строчку, или в пять. В школе 21 об этом не рассказали?И да, код полная хуйня мимо не-тот-долбоеб
>>1391499>просто для глаз>просто Ебать дебил и говнокодер.>мимо не-тот-долбоебТем хуже для тебя, долбоеб.
Привет.Какой из способов создания процесса не заставляет процесс-родитель ожидать завершения дочернего процесса ?Ну вот вроде после CreateProcess основной процесс может завершиться, а дочерний процесс продолжит работать.Но есть еще WinExec и ShellExecute.Все они позволяют оставить работать дочерний процесс после завершения основного ?
>>1391499Для дебилов демонстрация:while()……do_something();another();Правильноwhile() do_something();another();Правильноwhile()do_something();another();Неправильно, нарушена логика кода. Такая запись воспринимается как одноранговая, хотя вторая строчка таковой не является. Тут либо невежество в программировании, либо сознательная обфускация.
>>1391499Как же вы заебали. Съебите на ioccc.org, и пишите там хоть в кружочек, хоть по диагонали. А для нормальных людей неотформатированный код - говнокод безотносительно содержания.>>1391598> РейтПробелы вокруг операторов пропукаешь. clang-format в помощь. В нескольких return внутри функции нет ничего плохого, но вот мешанина из continue и return разной вложенности так и просит себя отрефакторить. Обращения к токенам через массивы я бы тоже во что-нибудь превратил. Алсо, предпоследний if подозрителен, что будет при i == 0?
>>1391602>i == 0Не будет, старт всегда с единицы. >Обращения к токенам через массивы я бы тоже во что-нибудь превратилДа вроде самый адекватный вариант. До вызова этой функции считанный в память файл предварительно подготавливается (убираются комментарии, избыточные пробелы, табуляция, етц) и потрошится на токены, которые в массив и суются. Выглядит вроде терпимо. По мешанине да, надо подумать на рефакторингом, пожалуй.
>>1391598Что такое токен? Ничего внятного не гуглится, есть какие-то видосы с индусами но там пиздец.
>>1391645Ссылка мертва, поэтому попытаюсь ответить так. О(f(n)) говорит не о том, что операций ровно f(n), а что их g(n), где g асимптотически растёт так же, как и f. То есть lim(n->inf)(g(n)/f(n)) = const.На твоём примере. Сложность O(nlog(n)) вполне может означать следующую конкретную функцию числа операций: T(n) = 100500nlog(n) + 5.21n + sqrt(n/2) + pi/log(n).
>>1391534Чем тебя CreateProcess не устраивает? ShellExecute и WinExec обертки над CreateProcess, в конечном счете все вышеперечисленные функции вызывают NtCreateProcessEx. У тебя задача какая поставлена?
>>1391646https://life-prog.ru/view_programmer.php?id=67&page=7> Анализ (разбор)Лексический разборЛексический разбор выделяют для упрощения построения компилятора. Это линейное сканирование входящей программы, при котором символы группируются в токены - последовательности символов, имеющих определенное совокупное значение. Следующая строка языке Паскальlen: = 3.14 зв r; состоит из следующих токенов Идентификатор len Символ присвоения: = Числовая стала 3.14 Знак умножения зв Идентификатор r Разделитель операторов;
>>1391944Покажи как запускал, тебе как минимум про разделение пробелом всяких if, for и тд должно было ругнуться.
>>1391966Да разобрался, правда, пришлось cygwin ставить. Но есть ощущение, что длинную строку с условием я разбил не очень хорошо.
Хороший код должен быть труднопонятным, всякое быдло не должно даже догадываться, что там написано. Но при этом в коде не должно быть исскуственных усложнений. Иными словами, только настоящая элита, что думает глобально, у которой в каждой строке виден полет мысли, может писать хороший код.
>>1392083Лучше писать максимально бородато чтобы всякие заводчане-вкатчики не понимали о чем это и не могли за доширак поддерживать твой элитный код.
>>1392083This. Алсо, меня бесят люди, которые используют фичи компилятора. Например, аллокация переменных на стеке. Ну вот кто знает, как тот же gcc себя поведёт? Никто не знает. Поэтому я всегда делаю alloca и руками управляю переменными. Так намного лучше и понятнее.
>>1392142Алсо, меня бесят люди, которые используют фичи компилятора. Например, alloca(). Ну вот кто знает, как в тот же gcc это реализовано? Никто не знает. Поэтому я всегда делаю выделяю глобальный массив на гигабайт и руками реализую свой стек, а в нем свою alloca(). Так намного лучше и понятнее.
>>1392158>я всегда делаю выделяю глобальный массив на 4 гигабайта и руками реализую свою асинхронную неблокируемую кучуПоправил этого младенца.
>>1392203Наркоман? У тебя тип данных флоат, ты задаешь экспоненциальное, и вычитаешь эксп из флот выводя во флот.
>>1392203Константу в 7 строке невозможно точно представить во float (мантиссы не хватает), зато вычитаешь ты double, в который константа отлично влезает, вычитание проходит в double, результат кастится в float. Попробуй вычесть 2.0e20f или (float) 2.0e20 и увидишь разницу.>>1392216Способ записи константы тут не играет никакой роли. Он мог бы написать и 200000000000000000000.0, ничего не поменялось бы.
>>1392298Что? Кто тебе мешает взять крестовый код? Зачем тебе что-то ксорить, если оно декриптится скриптом из трех строк?
>>1392304Хочу сишный код на макросах. Очевидно для того чтобы строку нельзя было найти автоматическими средствами.
>>1392312> Хочу сишный код на макросахВ Си в таких случаях принято пилить внешние препроцессоры/кодогенераторы. Например, вот: https://fossil-scm.org/home/artifact/331bea4cfc50a1cf (https://fossil-scm.org/home/artifact/05fefd0fecca6a8c пример применения).> чтобы строку нельзя было найти автоматическими средствамиНу посмотрят вручную, тоже мне проблема. Это займет меньше времени, чем у тебя уйдет на реализацию.
>>1392217ебать получилось. а че за магия нахуй. почему невозможно точно представить во float он же вроде до 37 степени десятки поддерживает.
>>1392341Пусть смотрят, главное чтобы сигнатуры не было, поэтому ксорю, еще сверху обфускатором пройдусь. За ссылочки благодарю.
>>1392399Флоат не записывает биты по десятичному порядку, и даже если бы все 31 бит отдавал на запись, этого бы не хватило на 37 разрядов. На само значение там отведено около 20 битов, в которые ты 37 разрядов никак не запишешь, а ты ещё экспоненту туда пихаешь, которая один-два байта займет, в зависимости от компилятора. Вывод у тебя правильный для того что ты задал. Флоат это относительно точный тип, т.е. для него 37.99999099099 == 38, но 37.0000 + 1.0000 != 37,99999099099 + 0,00000900901, флоат в битах занимает меньше, чем число, на которое его имя указывает, а ты в значение флоата по имени сразу же записываешь многоразрядную хуету свою
>>1392399короче, float - это 32 бита SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM.Бит S - знак, 0 - плюс, 1 - минус. Биты EEEEEEEE - экспонента, 01101011 означает m = 2^(01111111-01101011). Биты MMMMMMMMMMMMMMMMMMMMMMM - мантисса, e = 1.MMMMMMMMMMMMMMMMMMMMMMM. Твое число - это знак∗e∗m. В твоем случае 10^20 = 2^20 * 5^20. Степень двойки прекрасно попадает в экспоненту, а вот 5^20 - это 10101101011110001110101111000101101011000110001. Без единицы впереди, которая не идет в запись, 45 знаков. Осталось перенести условную запятую с конца в начало, прибавив 45 к эспоненте. Жирным виделено то, что войдет в запись. Вот тебе и потеря точности. А double 45 знаков прекрасно вмещает (там до 52).
>>1392424>по десятичному порядку>в зависимости от компилятораСколько медитировал, чтоб постичь тонкости дивного типа float?
>>1392474смешные вкатывальщики.Как вопросы уровня laba1.cpp задавать, так не "кринж",а как ответы на таком же уровне получать, так "кринж".Фу, сука. Я испытал адский кринж читая твою пубертатную парашу. Надеюсь, когда-нибудь на ваши тупые вопросы вообще перестанут отвечать, глупая школота.
>>1392497по моему, без приписки мимо другой анон очевидно, что я не тот вкатывальщик. Если точнее, я вот этот >>1392455. А фантазии про 99090990 и разные компиляторы - это не тот случай, когда можно оправдаться "какой вопрос - такой ответ". Тут не подъеб, а явная переоцененность собственных знаний и умения их излагать.
>>1392399Ну blyaaaa, прости анончик, я тут >>1392455 не только m и e перепутал, но еще кое-что. не 2^(01111111-01101011), а 2^(01101011-01111111)
>>1392510Он объяснил на конкретном примере, почему число не влезло. А в википедии кроме картинки ничего полезного нет.> докер, эджВсе, этот тред проебан.
>>1392514он просто скопипастил текст из статьи, попутно проебав арифметику и поменяв все местами. Пример того же уровня, что и тот, на который он выебывается.Непонятно только то, зачем вообще отвечать на вопросы вкатывальщиков, а так же комментировать другие ответы, будучи того же уровня развития. Этот тред проебан с самого первого треда, бай зе вей.
>>1392517> зачем вообще отвечать на вопросы вкатывальщиков> тред проебан с самого первого тредаТогда что ты здесь забыл?
>>1392526уЛУЧШАЕШЬ знания, помогая сделать laba1488.cpp?Тут половина вопросов всегда была по банальной ньюфажной хуете типа ошибок с типами и вечным циклам в вечных рекурсиях, а другая половина - сортировки массивов, графики и криво скрепленные проджекты.Ты лучше сразу как я говори -"Нет настроения, поэтому занимаюсь хуйней."
>>1392530> Тут половина вопросов всегда была по банальной ньюфажной хуетеДа. Тем не менее, бывают вопросы, на которые сложно ответить сходу.> ошибок с типами и вечным циклам в вечных рекурсияхНаходить хуево описанные ошибки в говнокоде, часто только в его куске, часто на картинке, не имея возможности отладить его и даже просто запустить - охуенная тема.
>>1392534>Находить хуево описанные ошибки в говнокоде, часто только в его куске, часто на картинке, не имея возможности отладить его и даже просто запуститьРазвиваем БЭД ПРАКТИС в себе и ньюфагах.
>>1392517>скопипастилиз головы>поменяв все местамимашинальные ошибки>Пример того же уровнямне, безусловно, льстит приравнение к надмозговости вроде "в зависимости от компилятора", "по десятичному порядку" и т.п., но моя скромность склоняет полагать, что до ТАКОГО я еще не дорос
>>1392591Просто непробивной манямир. Даже для ситреда слишком тупо.Тебе лучше сменить тред, попробуй руби или джс, ну или что там еще для уровня домохозяек есть? :trollface:Я понимаю, что ты, скорее всего, еще студент или вообще школьник, но попробуй хоть иногда пытаться вчитываться/понимать что говорят люди, и что они могли иметь в виду. И тогда ты поймешь, что в том посте здравых мыслей больше, чем в твоем. Ну и по жизни это тебе сильно поможет не остаться лохом последним. Что до компиляторов - я так понимаю, ничем кроме дефолтных шлангов/гсс/вотевер компилира из вижуал студии ты не пользовался?
>>1392606float реализован на уровне архитектуры. Что до остальных "аргументов"... тут, как говорится, наши полномочия - все
>>1392606тем не менее, последовал совету>пытаться вчитыватьсяи заметил, что промазал с "десятичным порядком". Там частица "не", что-то меня зрение подводит сегодня. но все равно ты пидор пиздуй толстить в другое место
>>1392606>здравых мыслей больше, чем в твоемприправленных путанницей про 37 десятичных разрядов против 20 двоичных и т.п. Разумеется, три больших хуя больше, чем два малых, но не комильфо полуправдой ньюфага угощать.
>>1392645Вот это платина, у меня каждый раз дежавю, когда кто-то прилетает с этим вопросом, даже скрины одинаковые лул.это снова ты?
Привет.Почему отправленный питоном struct не хочет понимать Си ?>packet = struct.pack("<5si", b"hello", 5)>socket.send(packet)Это с питона>struct header {char packet; int size}; header>recv(socket, &header, sizeof(header), 0);>printf("%s:%i", header.packer, header.size)Это с СиТипы вроде правильные, но строку он не выводит совсем, а вот число выводит 1391.
>>1393141printf("%c", header.packet)Выводит h, что собственно соответствует пакету.Я так думаю типа мне надо после hello еще и /0 добавить ?Нахуя тогда нужна эта struct ?
Итак. Программа, обрабатывающая 153 килобайта текстовиков, парсящая их и сохраняя в себе данные в виде ассоциативного массива, сожрала 254 мегабайта памяти. Настало время пердолить динамическую память совсем во все поля?
>>1393156А, да, точно пора. Один статический ассоциативный массив сжирает в памяти 64 килобайта. В объекте их 17, что итого нам дает 1088 килобайт ~= мегабайт. Пиздец, чо.
>>1393158А, и поскольку множественные последовательные реаллоки лично у меня пидорасят кучу - память под каждый набор с объектами выделяется на 16 штук за раз, и если подходит к пределу выделенного - удваивается. Выделилось памяти под 192 объекта, итого съело 208 мегабайт, плюс еще ~40 хрен пойми откуда. Оцените масштаб пиздеца.Собственно, аноны - что делать и как быть? Не очень вдохновляет необходимость писать выделение памяти для каждого чиха, и не забывать освобождать при этом, но, видимо, придется.
>>1393164>поскольку множественные последовательные реаллоки лично у меня пидорасят кучу Ты где-то проебался. Скомпиль с санитайзером.
>>1393141>>1393149100% добавляется пэддинг между char и int в сишной структуре. Нужен pragma pack. Насчёт питона не знаю. И, да, /0 нужен.
>>1393168Санитайзер кланга умеет в венду вроде. Да и если без винапи твоя прога, то портануть на линукс проблем не должно быть.
>>1393203Да не критично, винапи только для получения списка файлов в папке используется. Но пока переписал, вроде не падает. Хотя помню, как в отладчике сразу SIGSEGV выпадал при входе в реаллок эдак пятый-седьмой подряд.
>>1392645короче, обертка scanf("", ...) ведет себя, какfflush(stdout);fscanf(stdin, "", ...);На твоих скринах явно ЧСВ автора книги. Непоследовательное объяснение, чтоб вводить искусственные условности и выглядеть гуру философии Си. Сначала надо про fwrite(), потом про fflush(), потом про fprintf(), потом про printf() ящитаю. Раннее ознакомление с последним допустимо для вката в хелловорлды, но когда о буферизации речь заходит раньше, чем о месте printf в иерархии fprintf, fwrite и т.д., это ИМХО маразм. Путанница-хуютанница.
>>1393239> На твоих скринах явно ЧСВ автора книгиОдин из авторов книги - Деннис Ричи. Кому же, как не ему быть гуру философии Си?
>>1393141Про паддинг сказали, не сказали, что должно быть char packet[5], а не просто char packet.>>1393149> Я так думаю типа мне надо после hello еще и /0 добавить ?Можно добавить, можно printf("%.5s\n", header.packet);
>>1393248впрочем, все может быть. Иногда это и норм с точки зрения послойного наложения знаний. Архитектура мозга такое эффективнее усваивает. Просто мы сильны задним умом, и когда сам шаришь, но не педагог, то хочется максимальной последовательности. По ходу, не стоило писать так поздно ночью, какая-то токсик хуйня получилась.
>>1393239чел, спасибо за ответ. Проблема в том что прата дает все эти fflush и fscanf в 13 главе вроде а мне до них еще дохуище, лучше будь добр скажи достаточно ли пока понимания этих функций по принципу черного ящика. ну мол выводят или вводят они и пока достаточно, потом когда с файлами разбираться буду ясень дуб столкнусь со всей этой хуйней, просто сейчас для меня весь вывод представляется просто как тупо вывод на экран а ввод это отправка в некую пиздень введенных символов включая enter и последующее считывание оттуда функциями scanf или getchar и тд и тп. Нахуй ваще эта буферизация?
>>1393367спасибо, анон. А то у меня уже разгорелся внутренний конфликт между уважением к Кернигану и Ритчи - авторам книги всей моей жизни - и негативным впечатлением от русифицированного фрагмента в треде. Не зря засомневался по поводу "Данные в языке C | 113", память не подвела.>это пратамногое объясняет
>>1394752Видимо нельзя. Видимо переменная лежит в регистрах SSE/FPU, а зарезервированное на стеке пространство не используется (а к моменту выхода из функции стековый фрейм вообще уничтожается). Но это просто предположения. Вообще, чего ты у нас спрашиваешь, вон там на твоем же скриншоте ссылка "known bugs/limitations".