Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь 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Прошлые треды:- https://arhivach.org/thread/106153/- https://arhivach.org/thread/131949/- https://arhivach.org/thread/140570/- https://arhivach.org/thread/153698/- https://arhivach.org/thread/155908/- https://arhivach.org/thread/173837/- https://arhivach.org/thread/180461/- https://arhivach.org/thread/182958/- https://arhivach.org/thread/188294/- https://arhivach.org/thread/193780/- https://arhivach.org/thread/198868/- https://arhivach.org/thread/206632/- https://arhivach.org/thread/211714/- https://arhivach.org/thread/217128/- https://arhivach.org/thread/223224/- https://arhivach.org/thread/235327/- https://arhivach.org/thread/237852/- https://arhivach.org/thread/243867/Шапка: http://piratepad.net/bJ1SdmkZyu
>>946603 (OP)Почему нейроночки пишут на всяком говне а не на C?
>>946609Потому что заебешься.
Скиньте че интересного почитать из русскоязычной литературы
>>946629Лукьяненко
>>946609Потому что C не работает на GPU, а работает "всякое говно" вроде CUDA и OpenCL
>>946632Дак CUDA это C/Fortran
>>946633Дак OpenCL тоже much C-likeЗначит пишут на C
>>946634Кстати, где можно новичку найти учебники по OpenCL на русском? А то по CUDA, вон, академики из МГУ пишут книги, а по OpenCL нет такого вот всего...
Какую библиотеку использовать чтобы в маздае создавать окно и пересылать на него отдельные пиксели и png-картинки?
Хелп, всё описание проблемы тут:http://pastebin.com/Cfgis7DsПикрил вот:
>>946661> Ну и заполняем m[0]...m[count] элементами am[].Я имел в виду до m[count-1]
>>946644WinAPI
>>946638>на русскомНе нужно.
>>946668Кек, да на аглицком-то толковых нет, просто разбросанная по интернету документация, которая целостна в голове у 1.5 пердоликов
>>946670Хотя не, я обосрался
Дайте, пожалуйста, учебник или руководство по WinApi. А то я из всей информации смог нарыть лишь то что devcpp предлагает. Пример окна. А в гугле эти пислоглоты предлагают мне использовать c++. ЧТО ЗА ИДИТО ПРИДУМАЛ ТАК НАЗВАТЬ ЯЗЫК?!?!
>>946661Отбой, функция отрабатывает нормально. Дело где-то в другом месте...
>>946630Зачем вы тгавите?
>>946661Короче, трабла в том, что я в функцию передаю массив int m[], затем m меняю, а в main изменения не передаются.Как передать?
>>946682По ссылке, дебил.
>>946685http//::::::::::?
>>946686
>>946685>>946682Оба ебанутые.Во-первых не по ссылке, а по указателю.Во-вторых:Параметр m - должен быть указателем на ДИНАМИЧЕСКУЮ память. Т.е. ты не можешь написать>int m[]={43 25 45 13 27 41};Сперва ты должен сделать что-то вроде:int m = malloc( sizeof(int) 6)Потом проинициализировать значениями.Да и вообщше привиди полный код с main(). У тебя там труха полная, даже лень разбирать.Читани сначала оп-пик.
>>946850> int m[]={43 25 45 13 27 41};Таковым и является. В main создан динамический массив, а вот эту вот строку я написал сам, чтобы показать, какой, например, массив поступает.
>>946888Короче, проблема решена.А в догонку вопрос.Если я передаю массив в функцию, я по сути передаю указатель на первый элемент массива.И менять я сам указатель не могу же в функции, верно?
>>946896Можешь делать с указателем что хочешь. конечно если это не *const Ты можешь присвоить этому указателю новое значение. Однако это значение не вернётся обраттно в вызывающую ф-цию.Чтобы вернуть значение новго указателя из ф-ции ты должен передать указатель на указатель.В твоём случае realloc - вероятнее всего вернёт новый указатель и ты долже вернуть его обратно.Следовательно ты должен предевать не m[] а указатель на m[].
>>946911Спасибо. Всё мне разъяснил
>>946673Пикрил, не смотри что 95, дает базу и многое до сих пор актуально на NT-системах, просто параллельно сверяйся с msdn.
>>946665А можно что-то попроще? Чтобы я мог создать окно выбранного размера и рисовать там пиксели, линии, прямоугольники, дуги, многоугольники, эллипсы. Или хотя бы отдельные пиксели.
>>946962Спасибо, аноний. То что пытался найти на всяких сайтах 2 часа и не нашёл нашёл в этой книге за первые 10 минут.
>>946964Выбирай любую C-либу для гуя: gtkmm, sdl и прочие.
>>946962>Windows 95>актуально на NT-системах
Ребят, выручайте, как работать с графикой, имею следующее:> C (чистый, pure, бедняжка:'c)> x64-разрядную шиндуАлсо, пытался в OpenGL и Direct3D, но ниасилилАлсо2, работать надо с 2D, нужна будет просто статичная картинка (от расчетов)
>>946850>по указателю.Нет такого. Есть по значению и по ссылке (в C++)
>>947039С каких двух букв начинается название файловой системы винды?
>>947060Вверху информация. Можешь WinApi использовать. В книге, которая выше сразу пример рисования текста. А тут http://www.codenet.ru/progr/delphi/WinAPI/ есть справочник функций.Или sdl попробуй.
>>947093ЖИ
>>946603 (OP)Только что узнал что в си есть goto. В курсах такого не говорили. Просто подумал, а вдруг в си тоже есть goto? И оказалось да. Оказывается си не такой уж и плохой, по сравнению с ассемблером. Это многое упростит.
>>947116У gcc еще и jump tables есть:https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
Хотелось бы увидеть примеры реальных программ. Пока смог найти только исходники старых игр (DOOM, квэйк и т.п.). Но есть ли что поновее (не игры)? Хотя бы список программ, где часть написана на чистом си не подкинете?
>>947129>Хотя бы список программ, где часть написана на чистом си не подкинете? Репу GNOME на github смотри
>>946681Тогда Пелевина.
Написал свою первую программу на Си. http://ideone.com/FwiY3m Крутота.>>946629Я изучаю по "C для программистов с введением в C11".
>>94696210 прошло с моей сознательности, а это говно всю советуют. хорошо что я решил, что лучше линупс, чем отсосать фуллбловн у винап.
>>947060glut
>>947084> C++Аташол
сап, анон, есть два сту... кхех... настольная приложуха. Динамический лексический словарь, который пополняется юзверем. Работать приложуха должна фоном. Иногда на некоторые слова приложуха тригерится и выкидывает юзверю куски си-кода. И всё это говно должно неприрывно работать и перекомпилироваться во время выполнения. Так, как во время фонового выполнения уже кодер вносит патчи и всякие фичи. Внимание, знатоки, вопрос. Сколько хуё... кхм... Как GCC заставить этот код постоянно компилироваться "на лету"? Видел, в одной статье как с помощью malloc() код сконверченный в поток байтов, запиханных в массив знаков, запускали в JIT. Или же проще искать сторонние интерпритаторы для си, которые помогут в этом случае. Короче, дайте линк на годное чтиво, особенно по компиляторам. Или лучше искать документацию GCC? И куда тогда смотреть, чтобы достичь моего эффекта?
>>946673Фень Юань (GUI) и Рихтер (не GUI) все еще актуальны. Но если ты тот, кто выше про окно и png спрашивал, бери SDL2 и не выделывайся.
>>947233Для Си есть libtcc, но лучше прикрути нормальный скриптовый язык. Какой-нибудь lua, например.
>>947268чаю
>>947196OpenGL ~ gluthalp mи понять это
сап, анон. Я искренне не понимаю, почему у людей горит с сишных указателей. По-моему это чуть ли не гениальнейшая вещь, которой Си может похвастаться. Это ведь круто, когда ты должен сам контролить активные области, а не полагаться на транслятор, в надежде, что он выполнит так как надо. Хотя я сам и не до конца понимаю и не разбираюсь в указателях, но это однозначно куртая фича по моему скромному мнению. Это ведь круто, что одна переменная может иметь кучу различных имён, указывающих на неё. Если память кодера коротенькая и он просто не помнит название переменной, то просто можно вызывать её по синонимам-указателям. Хотя, это не уникальная вещь, это лишь одно из практических применений указателей. В общем, я каждый раз недоумеваю, когда кто-то бугуртит на указатели.
>>947060>работать надо с 2D, нужна будет просто статичная картинка (от расчетов) Используй SDL, вот тебе туториал: http://lazyfoo.net/tutorials/SDL/
>>947699В Си нет других удобных указателей, кроме обычных указателей (адрес места хранения вот сейчас). В крестах можно придать указателю нужные свойства через операторы и конструкторы/деструкторы, в Сях - только через громоздкие вызовы процедур.Представь себе, что ты передаёшь указатель на большой массив в процедуру, и эта процедура созраняет его в статичной переменной для вычислений в будущем (для сглаживания, например). Потом ты как-то меняешь свою программу (и она состоит из 10000 строк, например), и где-то между вызовами этой функции ты трёшь этот массив, указатель на который где-то сохранён. Потом ты вызываешь эту процедуру и получаешь Undefined Behaviour, потому что данных в этом месте хранения уже нет. Или ты делаешь realloc, и данные могут быть в другом месте.Указатели - это гениальнейшая вещь, только в других языках они лучше и выразительнее, чем "адрес места хранения вот сейчас".
>>947775> Или ты делаешь realloc, и данные могут быть в другом месте.И тоже получаешь UB, разумеется.
>>947268а можно из кода делать системные вызовы для компиляции? Я так один раз сделал, у меня комп повис. Или можно оформить отдельный код, который компилирует мой изначальный код. Хотя по сути это и будет обычный скрипт.
>>947781луа для того и нужен, чтобы ничего не компилировать динамически. везде где статика там си, если есть динамические сценарии, то можно юзать луа, которые интерпретируемый.
>>947781если изменять код на лету, это типичный морф как в вирусах, если компилить либу и подключать на лету, то придется приложение перезапускать, чтобы все в памяти отобразилось, либо лепить велосипед которые на лету будет секцию линка в памяти править на лету. Лучше интерпретатор пускать, это выбор всего геймдева даже.
>>947787>Лучше интерпретатор пускатьвремя написать свой lisp
>>947706Непонимаю. Сделал как в туториале, но какая то ошибка, которую я непонимаю.
>>947706Чувак, мне нужен C, а не C++
>>947817Ты либы не слинковал, с виду. На ворнинги похуй.
>>947876Ты ебанутый?
>>947883Алеша, ты не в курсе, что крестовый рантайм спокойно влезает только в разработанное очко твоей мамаши, а всякий embed посыпется нахуй от таких раскладов?
>>947903>sdl>крестовый рантаймСкажи мне, ты ебанутый?
>>946603 (OP)Мне кажется или легче на ассемблере написать операционную систему и там уже программировать на си, чем на WinAPI, SDL, OpenGL и тд?
>>947988Покажется же такое. И что ты вложил в "ОС"?
>>947988Тебе кажется. Если ты не осилил простые API, то ОС ты тем более не осилишь.
>>947992Загрузчик ОС, который переводит её в защищённый режим. А дальше уже идёт небольшая графическая состовляющая, позволяющая запустить одну программу, которая может повлиять на весь компьютер даже стерть загрузчик с жёсткого диска и просматривать файлы через программы и просто просматриватель файлов.
Наверное всё же легче научиться проектировать и создавать процессоры, которые будут использоваться под одну задачу.
>>948014Наркоман
>>948016Дак и сейчас не все же процессоры общего назначения
>>948017Я почти перешёл в защищённый режим но не получилось. И не понятно почему. x86-64 для пидоров.Буду переходить на ARM.>>946603 (OP)Я похоже придумал как реализовать свою программу. Файл .msfso превращу в .bmp и выведу через функцию WinAPI. И никаких SDL не надо.Только вот потом мне надо будет организовать вставку видео и аудио. Можно ли в WinAPI сделать так? Чтобы по нажатию в некоторой области окна воспроизвелось видео или аудиофайл.
>>947775Ебать ты долбоеб. Кто ж сука так делает это был риторический вопрос, ответ см выше?
>>948023Лучше сразу прикрути к своему окну WebKit браузер.
>>948023>на ARMнахуй ты здесь нужен
>>948016Или сделать универсальный процессор, конечно всегда лучше специфическое устройство, но есть устройства с широким спектром задачь, ПК например.Вот для таких устройств ARM IBM AMD Qualcom решили разработать гибридную архитектуру, каждая архитектура для чего-то хороша, вот и решили повыкидывать мусор из amd64 POWER9 arm64 так чтобы остались только сильные стороны и объединить это в одной системе.
>>947039Думаешь, там за 20 лет апи менялось? Да нихуя.
>>948210И как сие чудо назвается?
>>948245Менялось. Появлялись новые API-функции, и в серьезных проектах ими пользуются. А вот хелловорлды можно спокойно по .hlp-файлам от Windows 95 писать, все будет работать, это вам не линукс.
>>947129https://github.com/torvalds/linuxНе благодари
>>946603 (OP)uint8_t num = 0xfe; //254uint32_t ip_v4 = 0xc0a8d301; //192.168.211.1((uint8_t *)&ip_v4)[1] = num;Ананасы, что скажете о таком коде? Опасно делать такое приведение или нет? знаю, что можно всё сделать с помощью битовых масок, но такой код больше нравится
>>948354Про union не слышал? Как только сокеты сделали уже стали юнионом куски ip устанавливать вместо твоей нечитаемой каши.
>>948354>>948409Только с endianness будет проблема, но в твоем примере тоже самое (читай, используй библиотечную функцию).https://ideone.com/GnlMuk
>>948245Алё, болезный, 95-ый шиндовс не на NT-ядре. И Win32 API (который кстати появился раньше Win95) там кастрированый.
>>948409Да мне-то всего лишь один октет сменить надо, поэтому объявление юниона выглядело бы излишним (насколько я понял, что юнионы, что приведения в моем коде имеют абсолютно тот же смысл для компилятора).
Актуально ли учить C в 2017? Какие перспективы трудоустройства?
>>948622ну если у тебя есть вышка по специальности, плюс несколько лет опыта работы по профилю то сможешь устроится на более-менее норм работуно получать все равно будешь примерно на 30% явашника или вебмакаки на аналогичной позициивкатывальщикам же абсолютно нечего здесь делать
>>948622Какие задачи тебе интересны? Микроконтроллеры и ембеддед? Машинное обучение, анализ данных? Энтерпрайз? Геймдев? Веб-приложения? Ещё дохуя всего не перечислил.Отсюда и надо смотреть.Если хочешь именно денег, то тут нехуй делать, имхо.
>>948622Си знать обязан каждый. Поэтому учи.Изучи только Си - ты никому не нужен.Чтобы устроиться ты должен освоить охеренный стек соопуствующих технологий. А какие именно технологии - зависит то задач и к чему у тебя лежит душа.
>>948622Да.
А можно как-то добиться нуля в таком выражении? У меня всё пидорасит из-за этого. Сигфолты доебали.
>>948640>вкатывальщикамА вот щас обидно было. Где же скилзы прокачать, как не выслушивая говно от анонов с двача?
>>948835Ты в начальной школе учился? Откуда в твоем выражении может взяться ноль? Если хочешь сделать saturated subtraction - сделай явным образом, через if. Какого хуя ты unsigned для отрицательных чисел используешь?
>>948056Нет, ты.
>>948835Какого ляда ты используешь разные флаги для одной и той же переменной? Более тоо, %u - это для unsigned int, а не для uint32_t, ты обосрался два раза.
>>948835Неудачный выбор языка. Попробуй JavaScript, он тебе в самый раз подойдет.
>>947060Лучше SDL ничего не придумано. Бери 2 версию, она и через OpenGL, и через Direct3D может 2D графику рисовать. Первая только программно.>>947876Кресты там абсолютно не нужны.См. примеры: http://www.willusher.io/pages/sdl2/Пикрелейтед выводит пустое черное окно.
>>948948Придумано- sfml
>>948835через if
Какого фига в первом случае (первые 2 пика) участок кода работает некорректно, а во втором случае (последние 2 пика) корректно? Это баг компилятора или я чего то не понимаю?Компилятор TDM-GCC 4.9.2 64-bit Release
Долбёбина, выучи приоритеты.(sch & sch1) == 0И вообще так пишут только школьники!(sch & sch1)sch1 = sch1/2sch1 >>= 1
>>948876> Какого хуя ты unsigned для отрицательных чисел используешь?На то там и unsigned, чтобы отрицательных чисел не было блджад.>>948908Да иди ты нахуй, %u в данном случае справляется нормально, это тестовый пример. В реальной жизни я выведу stdint'овыми писечками.>>948984Короче ясно.
>>948876И ещё:> Откуда в твоем выражении может взяться ноль?Попробуй поприсваивать разные значения переменной с типом _Bool.
>>948835>А можно как-то добиться нуля в таком выражении?что это значит?
>>9490205 - 4 = 15 - 5 = 05 - 6 = -1 0Все отрицательные к нулю сгонять, unsigned же.
>>949026ну и трахайся тогда со старшим битом. можно ебучую макаронину заделать, или перевести старший бит в младший и обратится к массивуuint32 a[2] = { -1, 0 } ; b &= a[ну ты понял] ;
>>949028Блядь, да мне простой способ нужен а не этот пиздец, это базовые вещи, хочу логики.
>>949030какие, нахуй, базовые вещи, где это видано чтобы отрицательные числа в ноль ухуячивались?
>>949031А где это видано, чтобы unsigned содержал в себе отрицательные числа? И, опять же, посмотри на _Bool.
>>948984А как конкретно должен выглядить if?Так: if(var < 0) или так: if(var <= -1) не работает.
>>949026>Все отрицательные к нулю сгонятьЕбать ты колхозник по образу мысли.Лучше на выпасе, после обеда читни что-нибудь про кампуктеры.
>>949039АХАХАХАХСъеби нахуй с борды!Ахахах АХАХАХА
>>948985С моей башни очень похоже на ундефайнд бехавиоур где-то в коде до этого.можешь надеть ещё одну шапочку из фольги - добавь прямо в условие ифа принтф через запятую, типаif (printf("%i",sch&sch1, sch&sch1==0), sch&sch1==0)
>>949032>А где это видано, чтобы unsigned содержал в себе отрицательные числа?1) undefined behaviour2) ты выводишь беззнаковое через знаковый флаг
>>949069А, уже ответили. >>949000
>>949048>>949049Хватит меня травить.>>949070> ты выводишь беззнаковое через знаковый флагЯ и через %u выводил, там мусор. Вероятно и в сравнении в if'е тоже сравнивается мусор. Нет чтобы так сразу и написать, но хуй, обязательно надо "ГАГАГА НУ ТЫ ДАУН".
>>949070>undefined behaviourнет.
>>949082Иди читай про способы представления чисел в кампуктере.Школьник-вкатыватель?
>>949085А что? implementation-defined?>>949082>Вероятно и в сравнении в if'е тоже сравнивается мусор.Слабо положить разность в больший знаковый тип?
>>949095>А что? implementation-defined?и знаковый и не знаковый полностью идентичны.
>>949082> там мусорАаа! Оно же просто по кругу, с конца идёт. Минуса-то нет. Теперь понятно.
>>949103Покажи мне место в стандарте C, в котором это написано.
>>949109ну, бинарно. значение может быть разное, в результате обеззначивания - 3 варианта, описаны в с99.
>>949105Ебать, да ты траллишь!Съеби нахуй, школьник
>>949115Третий раз за день меня называют школьником и просят съебать. Грустно всё это, я ведь просто немного туплю. Все тупят. Каждый может что-то забыть, не додуматься сразу. Сонливость, плохой день, просто не пошло, всякое бывает. Всеж мы люди, в конце-то концов, а вы так набрасываетесь на бедного ньюфага.Надеюсь это твои Семёны.
>>949152Я сегодня из-за невнимательности где-то час не мог понять в чём проблема. Я делаю свой формат картинок чтобы не пользоваться чужим и непонятным png, но и чтобы не пользоваться громоздским bmp. И я забыл что вчера после сигнатуры начал добавлять 4 байта с комментарием, обозначающем версию. Но теперь понял и уже почти всё нормально.
>>94917312 битные цвета?
Кто придумал pass argument by value?Какого хуя? Зачем оверхед этот нужен?Надо на поинтерах все писать.
>>949431> оверхедПоинтер - это 2-3 инструкции, аргумент из стека - одна.
>>949431Аргумент из стека можно использовать (менять), а указатель надо1) разыменовать2) выделить место под переменную, на которую он указывает, если хочется менять её.
>>9494313) если программа многопоточная, скопировать с тек всё равно придётся, так как может ёбнуть
>>949433Асемблер не знаю, погуглю об этом.>>949562Обычно ведь не приходится менять, а если надо то есть пасс бай value.>>949563Ну да, надо учитывать все.
>>949431Дебил? Если мне не надо менять значение? Про сайд-эффекты слышал?>Асемблер не знаюВпрочем, все понятно.
>>949587Если значение менять не надо то не меняй блядь, это же С.А о лишних инструкциях хотел бы подробнее узнать, не гуглится, ну а структуры само собой лучше указателем передавать.
>>949590> А о лишних инструкциях хотел бы подробнее узнать, не гуглитсяgcc -S file.c или https://godbolt.org/
>>949590>Если значение менять не надо то не меняй блядь, это же С.Ты реально собрался делать каждый раз локальную копию int/float/double-переменных, переданных в функцию?
>>949635Нет конечно, можно и по значению передать.
>>946603 (OP)Пишу игровой движок с минимумом зависимостей (только OpenGL + WinAPI/Cococa/X-Window, только хардкор), базовый функционал уже готов, собираюсь переезжать на ГитХаб. Есть вопросы по стилю:1) Зашкварно ли использование строк вместо enum-ов в качестве аргументов функций? Делаю API одновременно и для C, и для Lua, хотелось бы гомогенности в интерфейсах.2) Зашкварно ли использование макросов-оберток над функциями?Спасибо.
>>949684> использование строк вместо enum-овСложный вопрос. Аргументы против: с enum нет нормального контроля типов, но есть защита хотя бы от опечаток, со строками нет. Плюс тормоза при сравнении строк.> Зашкварно ли использование макросов-оберток над функциями?Нет, если макрос простой, ты можешь обосновать его существование, и можешь обосновать, почему это не static inline функция.
На сколько я понял, в си нет типов данных занимающих меньше 8 бит т.е. 1 байта. Почему? В чём проблема запилить такой тип данных? Возможно ли это?
>>949709A L I G N M E N TLIGNMENT
>>949709Есть битовые поля.
>>949684>OpenGL>XТак говно ж мамонта, ему уже сколько, 25 лет, пиши на Vulkan + Wayland diplay server protocol.
>>949709Минимально адресуемая единица - 1 байт. Хочешь ворочать отдельными битами - используй бытовые операции. Тчк.
>В чём проблема запилить такой тип данных? Возможно ли это? В архитектуре компьютера. Память адресуется побайтово.
>>949709>В чём проблема запилить такой тип данных?Нельзя будет адресовать его машинным адресом. Для адресации такого объекта придётся перепиливать указатели и каждый раз их менять перед обращением к ЦП - и они будут занимать больше места (3 бита на адресацию битов и ещё сколько-то байт на выравнивание, если ты не совсем поехал и не будешь паковать вообще все объекты с дробным размером).
>>949814Можно хоть триты запилить (в другом языке), но Сишечка создана так, чтобы быть максимально ближе к железу (при условии сохранения портабельности).
>>949824Я бы посмотрел на Си в мире троичных ЭВМ.
>>949709С текушими процессорами невозможно. Нет у каждого бита своего адреса, и не нужно это. Есть битовые поля.>>949830Троичных пока не изобрели.
>>949833> Троичных пока не изобрели.Ньюфаг штоле?
>>949861хуефаг, если бы они были то их бы и использовали. Можно наколхозить с потерями производительности из обычных транзисторов, но смысла в этом нет. И сама информация может только в бинарном виде хранится, еще далеко до всего этого.
>>949862> сама информация может только в бинарном виде хранитсяЯ же говорю, ньюфаг. Не позорься. Погугли про MLC флеш память чтоли, например.
>>949878Либо ты можешь объяснить, где именно в MLC троичность, либо пиздобол.Все существующие алгоритмы сделаны для двоичной логики. Их можно напрямую перенести на троичную без использования третьего состояния битов, но нахрен это?
>>949833Сетунь жи есть, совок использовал. Но там троичность за счет специфичности элементной базы. Правда, она была дешевле и производительнее.
>>949904Пидорахены не могут в продакшн, поэтому даже если идеи годные есть все по пизде идет. Давно пора сдать СНГ в рабство США.
>>949904>т.е. один трит записывался в два двоичных разряда, четвёртое состояние двух двоичных разрядов не использовалось.Больше на обосрамс похоже.
>>949931Работало же. Но долбоебы загубили дешевую массовую ЭВМ для предприятий.
>>949934Почитал статью о троичных ЭОМ, годнота оказывается. В 2007 последнюю сделали. Проблема то в том что эти элементы не сожмешь до 10нм, думаю начнут считать на молекулах и атомах тогда дойдет дело и до 10тичной системы счисления, если до 36ричной то идеально вообще.Квантовые компьютеры уже пытаются делай айбиэм и дивейв, но кьюбиты это немного не то что нужно в повседневних задачах.
>>949934>Работало же.Даже если работало, получение троичной логики путём отрезания четвёртого состояния никаких преимуществ по сравнению с четверичной машиной не даёт.
>>946603 (OP)Сап, /пр, думаю тут есть те кто и на плюсах пишет, с другом один вариант, поделился кодом, только пишет он на плюсах, я же на простом си, проблема только с функцией, как преобразовать int&?
>>949939Думаешь что самый умный и разбираешься в схемотехнике лучше разработчиков микросхем?Даже если допустить, что в процессорах уперлись в двоичную логику не из соображений схемотехники, то как быть с другими цифровыми устройствами? Например АЦП, ЦАП, цифровые фильтры?>>949934Таким же образом можешь взять FPGA и сделать себе троичный компьютер. Цена вопроса - 100$-200$
>>949897> Либо ты можешь объяснить, где именно в MLC троичность, либо пиздобол.Ты сказал про информацию в бинарном виде, я тебе показал реально существующий формат хранения, где более двух логических уровней, т.е., не бинарный вид. Где я пиздобол?
>>950033int& - это ссылка, она же скрытый указатель на int. Все дереференсы внутри функции компилятор делает автоматически. Соответственно, тебе нужно заменить & на звездочку и проставить звездочки перед каждым использованием n1 и n2.
>>950068Ты пиздабол в том, что уровней там 2^n, и никакой врождённой троичности там нет.
>>950113Там 2^n, потому что это нужно для практического применения, и только. Если понадобится 3, будет 3, никаких принципиальных сложностей в этом нет.
>>946603 (OP)Блять помогите выделить 4 гигабайта памяти в программе, напишите мне простой хеллоу ворд с этим, я уже неделю ебусь, не могу выделить больше 1го. Самое ебаное что я не могу во-первых перемножить тысячи друг на друга, у меня получается ноь, НОЛЬ КАРЛ, а даже если написать одной цифрой размер то больше 1го гига система мне не выдаёт.
>>950129У тебя 32-битная или 64-битная система? Ты не можешь записать цифру в 4 гига в 32-битной переменной, будет вот этот самый ноль. Ты не можешь выделить 4 гига непрерывным куском (без PAE) в 32-битном коде, тебе не хватит адресного пространства - оно всего 4 гига, и даже если предположить, что тебе доступны все 4, есть еще твоя программа, которой тоже занимает какие-то адреса, деля 4 гига на сколько-то до, и сколько-то после. На 64-битной системе память вполне выделится, если только у менеджера кучи (у реализации malloc()) нет каких-либо ограничений на размер объекта.
>>949904>>949934Сетунь и другие разработки закрыли из-за того что нельзя пиздить софт у пиндосов.
>>950120Там может храниться три "уровня" только в том случае, если ты выбросишь один "уровень". Никто в зздравом уме так делать не будет, это пустая трата ресурсов.На кой ляд нужно получать троичную логику путём обрезания четверичной? КОМУ ЭТО НАДО?
>>948976>C (чистый, pureЧитай внимательнее, тупой крестодаун.
>>950141Очень правильно подметил - без PAE. На 2000, емнип, можно выделять до 36 ГБ в 32-битной ОС.
>>950174> Там может храниться три "уровня" только в том случае, если ты выбросишь один "уровень"Нет. Допустим, у тебя есть минимальный сигнал 0 и максимальный n. Ты можешь разбить получившийся диапазон на любое количество поддиапазонов m. Центр каждого поддиапазона с некоторым допустимым отклонением и будет логическим уровнем. Смотри пик. Причем m не обязано быть степенью двойки или четным числом, можно сделать m=3, ничего никуда обрезать не нужно. Но с ростом m растут требования к точности, становится сложнее избегать неоднозначностей, уменьшается надежность, поэтому когда тебе нужны гарантии, MLC сосет у SLC.
>>950207Спасибо, понял. Но то, что все кодеки, сжатия, кодировки и вообще всё работает с двоичными данными - это факт. Пока не будет разработан новый набор алгоритмов, которые работают быстрее на троичной логике (и они должны будут стать популярны), это всё нинужно.
Списывал одну прогу. Списал, работает, но не так как надо. ДЕБАГ@@@Прошло 3 часа, это говно по прежнему не работает. Муками и болью я дошёл до одного цикла, в котором, предположительно, была неисправность. Смотрю на свой цикл, смотрю на цикл исходной проги. Мой цикл ничем не отличается от того цикла, которой я пизжу. Ладно, проблема не в нём. ДЕБАГ@@@Прошло ещё 3 часа, ничего не изменилось, это говно не работает. Код уже как-то не пишется, голова не думает, я просто лежу на столике. Волею судеб скопипастил цикл из исходной проги себе в код. Вывожу им и его функцией вывода — вроде всё норм. Но моя прога и та, которую я списываю выводят информацию несколько по разному. Предположил, что обсёр в моей функции вывода инфы. ДЕБАГ@@@Прошёл ещё час, я не знаю в чём проблема. Функция исправна, всё вроде должно быть норм. На мониторе два ёбаных цикла, я всё ещё на том же месте, хех... Смотрю на них — полностью одинаковые. Полностью. На хуй мне два цикла? Делать всё равно нечего, займусь чисткой кода. Стёр свой цикл, свою функцию вывода перенёс в скопипизженный цикл. Закрываю вим, компиляю. ДЕБА... Стоп, ЧЁ БЛЯДЬ? Всё работает как должно. Неисправность таки была в моём цикле! Но... Они же были полностью одинаковые. ПИЗДАА самое обидное-то то, что я не могу посмотреть где в моём цикле был фейл, так как вим был закрыт и история проебланилась. Вот такая история. Исходная прога выводила информацию(изображение) в терминал, символами, а моя работала с пикселями на экране. Это так, уточнение.
>>950233Ибо нехуй копипастить.
>>950267Наоборот же. Написанный мной цикл не работал, а скопипасщенный работал идеально. Вывод: Всегда нужно копипастить.
>>950077Если честно, я не понял, до этого не использовал int, можешь подсказать где конкретно ставить?
>>950427Ебучая разметка.Если честно, я не понял, до этого не использовал int*, можешь подсказать, где конкретно звездочки поставить?
>>950427>>950428Чтобы получить указатель на lvalue, поставь & перед lvalue.
>>950433Поставить &? Мне анон >>950077 про звездочки писал.Мне просто нужно код из плюсов в обычный си перевести
>>950427Ну почитай ты какую-нибудь книгу про указатели уже. Там всего два варианта. Или у тебя адрес в памяти. Или у тебя кампуктер читает значение, которое лежит по этому адресу памяти.Угадай какое действие называется разыменование?
Блять, как я люблю передавать в функцию указатель на двухмерный массив. Постоянно переизобретать приходится.
>>950440Обязательно читать? Если я этот код в простому коду си приведу, то выполню 70% лабы, а я уже заебался их делать каждую неделю по новой программе, анон, помоги пожалуйста, просто покажи где мне * ставить.
>>950436void frag (int звёздочка fug) { ........ }main(){int звёздочка fag;int fig;frag(fag);frag(&fig);}
>>950492Дарю ЗВЕЗДОЧКИ всем ITT:××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
>>950530Лучше бы пездочки подарил
>>947060-юзер опять вернулсяПоставил CodeBlocks, поставил на него CSFML (по этому тутору: http://www.sfml-dev.org/tutorials/2.4/start-cb.php)Создал пустой проект, прилинковал хуйню по этому же туторуВ проект закинул этот код (http://transit.iut2.upmf-grenoble.fr/doc/libcsfml-doc/html/)Не копмилился из-за функций со звуком, убрал, скомпилолосьИ вот нихуяРугается на функцию sfRenderWindow_clear() перед компилом ее комментирую, ЧТОБЫХОТЬЧТОТОПосле компила кода открывается ебанаяблять консоль и ошибка
>>950715Если раскомментировать
>>950716а линковать?
>>950715Библиотеки слинковал? Юзай SDL2 лучше
>>950721>>950719Все, что делал в настройках проектаКстати, библиотеки с третьего пика он не находит, даже если указывать прямой адресA SDL2 годен для чистого С?
>>950723Да, у SDL2 сишный апи.
>>950723Ясен хрен. Для Си и сделано.
>>950732Так ты ответь, что у меня не так D:У меня даже окно не открывается после компиляции>>950730Можешь подкинуть туторы по SDL2 именно на чистом Си?Никак не могу найти, везде для С++
>>950733http://lazyfoo.net/SDL_tutorials/
>>950737Не то.http://lazyfoo.net/tutorials/SDL/index.php
>>950733Алсо, попробовал сейчас этот SDL2 (даже на с++) и neehooя не работаетЛибо я рукожоплю с линковкой (ничего в ней не понимаю, лол), либо это из-за х64-винды
>>950739Так я про него и говорил, он для с++
>>950742Лолшто? Для Си там.
>>950740
>>950744Энивей оно не запускается D:Тут показал >>950740
>>950742Ну и да. я в глаза долблюсь и туториал для плюсов. В любом случае, в самом SDL2 ничего плюсоспецифичного нет, у меня на обычном Си нормально работает.
>>950746>>950749Ну никак не получается, такое ощущение, что я где-то проебался, даже на плюсах не выходит
>>950751Почему не #include "SDL2/SDL.h"?А так в душе неебу, могу скинуть свой проект в аррхиве.
>>950758Потому что прилинковал вплотную до заголовковДа, будь добр, скинь
>>950762https://drive.google.com/open?id=0B-r2vVph6iuFM0tOYWxxNDFVeU0
>>950767Все просто, там используется 32-битный mingw, поэтому тебе надо 32-битную же SDL2. Помести из lib/x86 библиотеки SDL2.dll, SDL2_image.dll, libpng16-16.dll и zlib1.dll. Тогда появится окно с синим экраном.
>>950740Попробуй запустить собранный .exe без IDE, из Explorer. Попробуй докинуть DLL-ки в папку с .exe.
>>950767Хмм, а где брать SDL2_image.dll? И куда его потом класть?
>>950782На сайте автора SDL, лучше скачать сразу полный комплект:https://www.libsdl.org/projects/SDL_image/https://www.libsdl.org/projects/SDL_mixer/https://www.libsdl.org/projects/SDL_net/https://www.libsdl.org/projects/SDL_ttf/Класть в каталог с EXE-шником.
>>950790Все равно блятьблятьблять
>>950795Ты точно из lib\x86 библиотеки положил? Такое с 64-битными будет выскакивать.
>>950802Подтверждаю, закинул х32 - заработало в отдельной папке.Автор проги
>>950803Пик отклеился.
>>950804Да в пизду, блять, снес сейчас всё нахойКороче, вопрос открытВинда (х64), чистый Си, что юзать для 2д-графики и как, блять?
>>950812SDL2.
>>950817Без SDL/SDL2, пожалуйста D:
>>950812ачко тваей мамашки юзай бббггеееее
>>950829Что за бге? Или это типа бгееее? да блят гшщфцпждр45р
>>950830Ебал тибя и весь твой род-урод в рот, хехе, малалетний лапоть. Иди нахуй, пицца остынет, хуйло ты.
>>950812Поставь нормальную студию вместо этого кривой недо-IDE с кривым портом GCC. В ней все успешно собирается.
>>950872Не слушай этого пидора.Только открытые инструменты, только голый make только молодось, только хардкор!Можешь юзанть Эклипс, он гибче и удобнее, кодблок можешь юзать для создания скетчей или потестить чего
>>950872Какого хрена ей еще надо, непонятно.
>>950874Пидор твой отец членодевка, а этот кодоблокс в очко себе засунь, хуесос.make-то как раз все норм собирается
>>950876Стесняюсь спросить, а компилятор точно x86-64?
>>950876И инклуды ты куда дел? Они точно инклудятся?
>>950876Охуеваю с того что больше половины копротивляются с виндой, для прогинга она не годится.
>>951109Это единственный неосилятор итт. Винда гораздо лучше годится для коденка - в винде есть нормальные отладчики и вижуал студия, а в линуксе только жцц.
>>951109Зато для пердолинга годится. Как и С, азазахаха!
>>951398>винде есть нормальные отладчикиЕдинственный CDB и то в VS, в которой нет С11 и С99, а есть только кресты.
>>951463Чего из C11 нет в VS?
>>951398No, it's not.GCC дает хороший вывод о ошибках, есть gdb, есть clang, есть хуева туча компиляторов, и все можно потестить с помошью make или баш скрипта.clang часто вообще пишет как это фиксить.В винде в отладчики не смотят, особенно утята, да и выдают выхлоп такой себе.Ну и уебищный гуй размывает понятие о том как вообще устроен свой код.
>>951483> есть gdbДля тех, кто хочет потратить 5 минут на ввод команд (вместо того, чтобы быстро глазками посмотреть код прямо в студии или дизасм в каком-нибудь x64dbg) в винде есть windbg, есть упомянутый cdb, да и gdb никуда не делся. В общем, есть выбор, и есть отладчики с GUI.> В винде в отладчики не смотят, особенно утятаВ винде как раз можно без проблем что-нибудь отладить, как свое, так и чужое, с символами и без. В линуксе из-за отстутствия вменяемых отладчиков большинство отлаживается printf-ами и git bisect-ом. Мало кто умеет хорошо пользоваться gdb, еще меньше тех, кто может нормально отладить в gdb stripped бинарники.
>>951467_Generic
>>951490>GUIвот понять не могу, нахуй вы в этот ред заходите?
>>951493Ок, уел. Оно все равно практически неюзабельное. Но все нормальные фичи из C99/C11 давно есть.>>951502Мне Си нужен для решения конкретных практических задач, и мне похуй, где именно я буду их решать, лишь бы это было быстро и качественно. А тебе, видимо, только ради "мам, смотри, я пердолюсь в консольку! мам, я вывел хелловорлд! я какир, мам!".
>>951493>>951504Впрочем, при желании VS компилирует и _Generic. Хоть и несколько охуевает от себя самой.
>>951483Но самый главный плюс линукса как платформы для разработки в том, что там нет винды.Нет, серьёзно, в винде я постоянно пердолюсь в какие-то базовые вещи, которые везде есть из коробки. Такое чувство, что ОС мешает мне пользоваться программами, попутно разваливаясь, в связи с чем возникает необходимость подпирать её довольно уродливыми костылями.В 2017 году винда нужна исключительно как зависимость для кадов и игорей, для всего остально существует мак или прыщи. Тащемта что угодно можно поставить, только бы без винды. Это продукт созданный для заработка денег, из-за чего в него постоянно лепили (опять же) костыли, много костылей, только бы внешне он выглядело нормально, а что под капотом все срать хотели, это никому не нужно.
>>951525Под линукс есть IDE для сишки, которые не выглядят всрато?
>>951533Eclipse (бесплатно), CLion (платно).
>>951525> в винде я постоянно пердолюсьТак осиль уже винду, перестань пердолиться и начни жить!
Чем можно измерить время работы программ (время очень малое)?
>>951533QtCreator, CLion.Все остальное можно даже не рассматривать
>>951748Очень малое время можно измерить в очень малых единицах измерения времени.
>>951797Sloved by /pr/
>>951509Ну ты видимо используешь clang/C2, а я не хочу его использовать.
>>951748Миллисекундами. Запускай много раз, бери минимальное или общее.
>>951820Не, зачем вы так меня тралити?
http://faehnri.ch/how-c-is-not-a-subset-of-cpp/
>>951748time laba3
>>951767emacs.
>>951883не пытайся научить обезьяну разговаривать, будь выше этого.
>>951525Реклама в проводнике и дубликаты программ наше все. Кады и триде вообще давно на линукс перекатилось.
>>95014164, но щас поглядел битность у самой программы 64
>>951830ничего нового.
>>951885Антохи что лучше Cmake или Qmake для Qt5 параши разумеется?
>>951893Надо чтобы работало онли фор Linux.
>>951894Уебывай в крестотред.
>>951895Можно же и на C писать.
>>951896Нет, под Qt нельзя писать на Си. Вали.
>>951897А под GTK3?
почему нижний выдает ошибку сегментации?
>>951990Ты бы еще серым по белому код рисовал."string literal" - это не char ∗, а const char ∗. В верхнем варианте ты создаешь массив s1 и копируешь в него строку (при инициализации), поэтому все ок. В нижнем варианте ты ссылаешься на сам литерал, strtok пытается его модифицировать, а компилятор вполне мог сделать его ридонли.
Аноны а зачем clang and gcc на плюсах пишут? Почему говорили что зря так делали? И действительно ли надо компилятору ООП и темплейты и прочая хрень? Теперь если gcc без поддержки плюсов собирать то он потом и сам себя не соберет.
>>952063Не стоит вскрывать эту тему.
>>951990спс. а можно как нибудь указать что он не ридонли?
>>952091Модификация строкового литерала - undefined behavior, так что просто не нужно этого делать. Видишь строку в кавычках, подразумеваешь char const * const.
>>952091объявляй в глобальной видимости. s[] = "sadsadasd". компилятор же не будет дублировать строчку?
Раз уж тут за OpenGL начали пояснять, то продублирую свой вопрос из /gd/:Есть вопрос по блендингу - появилась какая-то непонятная для меня вещь:Сначала включаю glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), рендерю свет. Потом - glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA) и рендерю соника - но вокруг него вдруг появляется какая-то левая рамка, причем разная для разных изображений.Знаю, что двухмерный свет надо делать по-другому - сначала рендерятся предметы, затем отдельный черный фреймбуфер для сплошной тени, потом из него вырезаются кружки света, и уже потом он рендерится поверх всего остального. Но все равно интересно, отчего такое происходит.Хоть в какую сторону копать?
>>952214Только не обязательно глобальную переменную городить: static char s1[] = "foo"; вполне себе дает модифицируемую строчку без накладных расходов на инициализацию.
Поясните по хардкору, каким образом функция realloc выбирает ячейки? Или же ячейки выбирают тебя?
>>952631В простейшем случае у менеджера кучи есть список блоков (адрес, размер, статус), причем свободные блоки склеиваются. Если следующий за твоим блок свободен, и он достаточного размера, realloc() просто отрезает от него нужный кусок в пользу твоего. Если нет, она идет по списку и ищет (первый попавшийся или, например, наимешьший) подходящий свободный блок. Обычно списков несколько, а дескрипторы блоков более сложные. Если ты не об этом, тогда уточни вопрос.
Когда я программировал на линуксе в gedit с помощью кланга и консолечки я мог просто в папку с исходным файлом добавлять библиотеки, которые мне нужны и подключать их. А когда я начал в виндовс программировать, с помощью DecCpp но на си я не могу так сделать. Надо какие то либы подключать или что там. Так как сделать так чтобы я библиотеки (.h файлы), которые будут находится в папке с проектом мог подключать?
Раз уж тут за OpenGL начали пояснять, то продублирую свой вопрос из /gd/:Как загрузить текстуру так, чтобы загружать не из отдельного файла, а из кода? То есть я напишу хекс код картинки и она будет загружена в текстуру? как это сделать?
>>953002Идешь в свойства проекта, указываешь директории с инклудами и либами. Инклуды инклудишь через #include <file.h>, дополнительные либы указываешь в поле для дополнительных либ.> которые будут находится в папке с проектом мог подключать?#include "file.h">>953003> То есть я напишу хекс код картинки и она будет загружена в текстуру?Абсолютно так же, как и из файла, через glTexImage2D создается текстура, в последнем параметре адрес твоего массива с картинкой. Если нужно конкретнее, пости компилирующийся хелловорлд.
>>951533Угу, Xcode.>>953003Очень просто. Картинка у тебя УЖЕ в памяти (в виде массива unsigned char, но могут и иных типов) просто кидаешь её указатель в OpenGL. Правда, ещё нужно её параметры правильно. Размеры, глубину пикселей, их тип (RGB, RGBA и прочие). Пример:float pixels[] = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f};glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels);Хуле не ясного?
>>953024>>953009Спасибо, теперь у меня всё почти получилось.
>>946603 (OP)Сап ананасы, вкатился нуфаг. Дали задание:найти количество отрицательных элементов массива и вставить найденное кол-во перед первым в массиве отрицательным числом. Я написал какую-то поеботу, которая ищет сами элементы, но не могу додуматься, как вывести их кол-во. Прошу подсказки, пик прилагаю.
>>954309Заведи счетчик, положи в него 0, а когда найдешь отрицательный элемент, прибавь к счетчику 1. После цикла выведи счетчик.
Чет я не понял, кланг прямо из коробки в 2017 еще установить нельзя что-ли, собирать обязательно? Попытался хеловорд запустить с него, а он полез куда-то в инклуды визуал студии, что это было?
>>954352Ну вроде работает, но все равно не понимаю, нахуя он лезет куда-то в тулкиты которые вместе с визуалкой установились?
>>954351Что за счетчик? Пытался нагуглить, но нашёл таковой только в c++.
>>954406Всё, вроде бы понял, даже получилось. Но как сделать элегантней, под один цикл не получается вывести?
>>954444if (условие) {выражение1;выражение 2;нутыпони;}
>>954450Ок, уяснил. Еще вопрос, написано сделать "Вставка найденного количества перед первым в массиве отрицательным числом ", что это значит?
>>954502UPD: Т.е. мне нужно вывести все элементы массива и как-то пропихнуть перед первым отрицательным элементом моё число S. Как это сделать?
>>954509тебе нужен динамический массив.
>>954515хотя... проще будет создать еще один массив размером n+1 и последовательно копировать данные как тебе надо
Есть динамический массив. Я могу из него вырезать в центре кусок, прикрутить в конце другой, при этом не проебав все данные?
>>954628ты совсем плох.
>>954852Перефразирую. Через realloc() не проебутся данные в массиыве, если я его увеличиваю/уменьшаю?
>>954863RTFM.http://en.cppreference.com/w/c/memory/realloc
>>954863Если realloc() увеличивает размер объекта, то сохраняется (копируется) то, что было, а остальное тебе нужно инициализировать самому. Если размер объекта уменьшается, данные обрежутся. И не забывай про то, что адрес объекта смениться может.
>>954871Вот, именно то. Т.е при уменьшении размера данные в начале не повредит? Это именно то,что я и хотел, спасибо.
То, что scanf %d будет возвращать ноль, если получит только символы и будет возвращать -INT_MAX, если получит число вне int, это твёрдо и чётко, можно проверки делать, опираясь на это?
>>956169Да. Только не -INT_MAX, а EOF. Но лучше парсить ручками через strtol и прочие strto*. scanf подходит только для лаб.
>>956175Мне просто надо считать число, а введена может быть любая белиберда.Я не понимаю, почему происходит пикрил.Сначала scanf грит, что всё норм, возвращает 1 и число 23, хотя там "23у35".А потом она начинает без ожидания ввода считывать что попало, у меня так при проверках бесконечно циклится сообщение, что введено не то.
>>956201Т.е. если я пишу while (scanf("%d", &c)!=1) { printf ("Eshe raz, plz\n"); } то у меня просто циклится сообщение printf.
>>956204> то у меня просто циклится сообщение printf.Потому что scanf не с чем конец строки (для нее это whitespace) матчить - добавь пробел или \n (похуй) в шаблон scanf. А лучше не ебать себе мозг хуйней, сдизайненной для студентов и рептилоидов, и явно сделать fgets и strtol, проверяя ошибки.
>>956175>scanf подходит только для лабsscanf'ом так удобно из строки достать значения, в одну строчку. Через strtol надо городить огород из условий. У меня иногда возникает необходимость распарсить текст на няшной, есть какие-то готовые инструменты, чтобы самому не заниматься велосипедостроением? Пытался mpc использовать для этого, но так и не смог разобраться, вроде похоже на скрипт для flex, но не то. Можно использовать flex/bison для сложных случаев, но для более простого хотелось бы что-то попроще.
Почему говорит что возвращаемый тип неправильный?
>>956277Кто говорит? Как говорит?
>>956277У меня GCC 5.3.0 собирается это без ошибок и предупреждений.
>>956295Может быть, он stdlib забыл подключить, хуй знает.
>>956295GCC 5.4.1Смотрю у тебя тоже Geany который умер и не развивается из-за всяких модных саблаймов
>>956468Блять, скинь полный компилирующийся код на ideone, зачем нам твои скриншоты?
>>956474Хм, Clang 4.0 ничего не говорит http://ideone.com/kYgRPy а GCC 6.3 вообще не компилится http://ideone.com/aHWlYPЗначит проблема в последних версиях GCC 5 и 6
>>9564781) Huita - тайпдеф для безымянной структуры.2) Функция huita_new возвращает указатель на struct Huita.3) А по факту возвращает указатель на безымянную структуру типа Huita.Конечно же, компилятор ругается. Если ты хочешь использовать struct- и typedef- имена взаимозаменяемо, сделай typedef struct Huita { ... } Huita;
Давно не посещал этот тред, но думаю несколько Анонов меня должны помнить.Я не забросил и до сих пор пишу свой GUI-тулкит. Раньше я делал GTK-подобной тулкит, с объектами, но относительно недавно в глаза бросился нукляр и я захотел запилить что-то вроде него, но не такое глючное и более подходящее для моих задач. Нукляр это функциональщина, если кто не знает. while(true){ if(create_button() == 1) printf("press"); } Никаких объектов.Всё шло тащемта хорошо, но возникла необходимость кэшировать результаты вычислений, чтобы мой высер не тупил как чёрт знает что.Простой пример: Есть виджет "button", кнопка. Кнопка может принимать множество состояний — нажатие, отжатие, align, обычное состояние etc. Допустим тулкит рисует первый кадр в котором кнопка находится в обычном своём состоянии. Тулкит трудился, считал, срал на битмап и вот она кнопочка. Заебись.Второй кадр. По хорошему стоит узнать, не изменилось ли состояние кнопки, и если не изменилось, то просто скопировать часть готового битмапа в новый кадр. На словах это просто, но как сделать что-то подобное без объектов непонятно. У меня ведь нет никакой информации о том, что было с этой, конкретной кнопкой в прошлом кадре. Ну и с чем мне сравнивать?Если бы у меня было что-то вроде GTK, с объектами, то всё было бы действительно просто. В функцию отрисовки кнопки прилетает указатель на объект button, в котором хранится вся информация именно о этой кнопке, о том, что было с ней в предыдущем кадре, о том, что с ней сейчас, и на основе этого легко понять нужно ли брать готовую картинку из предыдущего кадра или нарисовать по новой. ИРЛ всё совершенно иначе, всё вышесказанное простое упрощение, главное что смысл понятен. А если объектов нет, то как?*Надеюсь этот текст хоть кто-то понял. Тут вроде были понимающие в GTK люди, да и нукляроёбы тоже были.%%Алсо, почему нукляр взлетел? Он же ничего не кэширует и рисует с нуля каждый кадр, это долго. Я понимаю, что его в основном использует с OpenGL и т.п. штуками, но блядь, всё равно не круто.
>>956737>Надеюсь этот текст хоть кто-то понял. Тут вроде были понимающие в GTK люди, да и нукляроёбы тоже были.Тут есть даже я, разобравший Иксы и Presentation Manager и заново их собравший, как Никола Тесла собирал и разбирал электромоторы в уме, и так несколько раз. Очень просто они устроены, не нужны там некокие «объекты-субъекты», каждое окно и каждое поле ввода получает сообщение "paint" через обыкновенную очередь сообщений (не сокет и не пайп, они там тоже нинужны) и вызывает функции вроде «ставь точку вон туда» с координатами, и только-то.Ты бы лучше вот подумал, на кой хер нам ещё один новый GUI-тулкит и куда нам его, солить?.. Их десятки, а будут сотни, и всё, что тут можнозделоть — дать им растровую сетку (по одной для каждого окна верхнего уровня) и пусть на ней и рисуют.
>>956742> каждое окно и каждое поле ввода получает сообщение "paint" через обыкновенную очередь сообщений (не сокет и не пайп, они там тоже нинужны) и вызывает функции вроде «ставь точку вон туда» с координатами, и только-то.Стоп-стоп-стоп. Либо я тебя неправильно понял, либо ты описал функцию отрисовки.У меня есть линия. Горизонтальная. На 10 пикселей. Чтобы такую нарисовать нужно поставить 10 точек, 10 итераций цикла. Можно конечно 120 раз в секунду ебашить по 10 итераций, но линия-то как была, так и есть, ничего не меняется. В таком случае гораздо производительнее, условно говоря, вместо 10 итераций выполнять один memcpy. Но в моей ситуации эта линия может измениться, цвет поменять, ещё что, и memcpy тут не обойтись, нужно заново пройти 10 итераций и нарисовать линию запрошенную изменениями, и потом опять до момента изменения копировать память. Проблема тут в том, что без объектов тулкит не может узнать поменялась ли линия, т.к. он не знает что было с ней в прошлом кадре.Если я тебя просто неправильно понял, то опиши свою мысль нагляднее, пожалуйста.> на кой хер нам> намМне. Я хочу написать то, на чём мне будет удобно писать свои хотелки. GTK говно, нукляр баговый и не для моих целей. В остальном у нас есть груда крестоговна и различные обвязки.
>>956737> А если объектов нет, то как?Создавай глобальную переменную для каждой кнопки и там храни.
>>956752>Либо я тебя неправильно понял, либо ты описал функцию отрисовки.Попробую ещё раз на примере сетевых протоколов, где несколько слоёв.1. Драйвер видеокарты: это он переключает кадры, это он работает с видеобуфером, о чём никто кроме него даже и не знает.2. Оконный менеджер: он создаёт области разделяемой памяти (они же растровые сетки) и выдаёт их окнам по запросу. Важно, что он никогда не ждёт никого из тех, кому выдаёт разделяемую память, вместо этого они присылают ему запросы, а он отвечает на них, и иногда (возможно) бросает на верхний уровень краткие уведомления — но никогда и никого не ждёт, чтобы не зависнуть вместе с какой-нибудь Мозиллой-Тормозиллой. Думаю, что книги Таненбаума тут помогли бы, но в общем, эти возможности есть в современных ОС уже наверное во всех.3. Служебный поток в каждой проге: отправляет "send"-запросы на низкий уровень, получает от него растровые сетки и возвращает их назад — и вопреки стереотипам, это работает ни разу не медленно, поскольку на отображение страниц памяти расходуется очень немного времени и тактов процессора.4. Поток отрисовки, он же поток обработки сообщений: у него своя очередь, куда ему последовательно ставят задания и уведомления о том, что произошло, будь то нажатие на клавишу или сигнал от таймера или сообщение "paint". Он ставит точки на растровой сетке и ничего даже о ней не знает. Зато у него есть шрифты, цветовая палитра (тут сто миллионов цветов, если мало, добавим ещё), штриховки-закраски, границы отсечения, границы им нарисованного и т.д.д.д.д.д.5. Тулкит, фреймвор, C++ и браузер. Ещё встроенная СУБД с хранимыми поцедурами и куча ключевых слов, "лет", "муд", "фн", "твюэйт", "патирнь", "салюжяньсь".6. Скриптовый езыг поверх всего етово.7. Самый последний XML.8. Таблица стилей.9..........10.....11......>У меня есть линия. Горизонтальная. На 10 пикселей. Чтобы такую нарисовать нужно поставить 10 точек, 10 итераций цикла. Не ставь точку, если на растровой сетке она уже стоит, не терзай кеш процессора.>Можно конечно 120 раз в секунду ебашить по 10 итераций, но линия-то как была, так и есть, ничего не меняется. Этим пусть занимаетьса драйвер видеокарты, сколько там у него кадров-в-секунду.>В таком случае гораздо производительнее, условно говоря, вместо 10 итераций выполнять один memcpy. Вне видеодрайвера? Ни разу не будет выполнено ни одной memcpy.>Но в моей ситуации эта линия может измениться, цвет поменять, ещё что, Тогда у тебя поток отрисовки, он же поток обработки сообщения, вытащит из очереди сообщение "paint" и начнёт рисовать.>и memcpy тут не обойтись, нужно заново пройти 10 итераций и нарисовать линию запрошенную изменениями, Ну и что, поставь границы отсечения и не будет он рисовать за ними.>и потом опять до момента изменения копировать память. Выше видеодрайвера не надо копировать память. Потом, когда-нибудь, он получит сообщение от кококонного менеджера (и зачем я всё это пишу, а?) и перенесёт изменённый прямоугольник в видеопамять. Это никого на верхнем уровне волновать не должно.>Проблема тут в том, что без объектов тулкит не может узнать поменялась ли линия, т.к. он не знает что было с ней в прошлом кадре.Объекты вам принёс великий маг и чародей Бэльгэйц чтоб вы сидели тихо и не рыпались и не смели никуда мигрировать с маздаЯ.Объекты под люнюфьсь — это вообще такой трешак, что ни в сказске скозать ни пером описать, вот правду говорят, у семи нянек дитя без глазу.>Если я тебя просто неправильно понял, то опиши свою мысль нагляднее, пожалуйста.БРОСЬ КАКУ!!!IRL, классы объектов — это всего лишь правила доступа к данным, то есть контракты только и всего.
>>956761Это называется window handle.
>>956761Не выйдет. Мой тулкит работает следующим образом. Есть цикл и в нём весь рантайм(это в пользовательской программе):int main(void){while(true){draw_button("button1");draw_button("button2");draw_button("button3");}}Довольно грубый пример. И вот я записываю каждую кнопку в свою глобальную переменную и ориентируюсь на неё. Круто? Да. Но крутость продолжается до тех пор, пока в цикл кто-то не добавит какое-нибудь условие вроде:...if(shit == 1) {draw_button("button2.5");} ...В кишках тулкита всё пойдёт по пизде, т.к. всегда летели три кнопки, а сейчас внезапно четвёртая пришла. Что с ней делать? Откуда она? Я ведь не могу контролировать цикл вне своего тулкита.Если прикрутить сюда объекты, то это тоже ничего не решит, всё в любом случае будет пидорасить. А для того, чтобы не пидорасило, нужно чтобы в пользовательской проге всё определялось один раз и после всем заправлял тулкит, как в GTK:int main(void){draw_button("button1");draw_button("button2");draw_button("button3");toolkit_main_loop();}Привет каллбекам и прочей параше.>>956762Ты описываешь какую-то низкоуровщину, с которой мне и работать не придётся, а я не могу тебя понять, связи не вижу.Всё что у меня есть это bitpixmap так же они называются?. Указатель на память, куда я пишу данные, из которых образуются пиксели. Для простоты создана функция draw_point(x, y).> Не ставь точку, если на растровой сетке она уже стоитУ нас недопонимание друг друга. Каждый кадр это:- Очистка пиксмапа- Отрисовка чего-либо на него- Скармливание пиксмапа бэкенду отрисовки (иксы/валеный/etc)А потом заново. В такой ситуации место установки следующей точки всегда равняется нулю, там ничего нет. А если я не буду очищать пиксам, то при анимации виджетов будут артефакты. В любом случае нужно всё тереть.> Этим пусть занимаетьса драйвер видеокарты> Вне видеодрайвера?НЕТУ ДРАЙВЕРА ВИДЕОКАРТЫЕсть пиксмап и всё.> Ну и что, поставь границы отсечения и не будет он рисовать за ними.Я... Наверно... Другое имел в виду. Голова уже болеть начинает.Слушай. Я, бля, нихуя тебя не понимаю. Я тут велосипедирую графический тулкит а не графический сервер. Возможно всем этим ты хотел донести до меня великую истину, но я её не уловил. Можно толще? Вот пиксмап у меня есть. Всё. Больше ничего нет. Аще.
>>956769>Каждый кадр это:>Очистка пиксмапаКак я и думал, в условиях "свободного ПО" дитя оказывается без глазу.>Вот пиксмап у меня есть. Всё. Больше ничего нет. Аще. Там должны быть границы, регионы, прямоугольники и тому подобное.То есть, каждому окну рамки нужны:- Регион, где разрешается рисовать (внутренние границы отсечения)- Регион, где рисовать надо (например, область окна, требующая обновления)- Регион, где рисовать не следует (например, области, перекрытие другими окнами)- Прямоугольник, где разрешается рисовать (внешние границы области рисования)И т.д.Возможно, все они могут быть сведены к двум прямоугольникам и регионам: "прямоугольник, задающий область рисования" и "регион, задающий пробелы в области рисования". И ещё надо запоминать и выдавать на уровень ниже границы того, что действительно было нарисовано. Чтобы облегчить работу графического сервера, видеодрайвера и всех остальных.И ещё нужна очередь сообщений и всё остальное. Твой пример с циклом "while" это называется OpenLook и от этого давно отказались. Примеры как он выглядел и как под него писали код нетрудно найти в Гугле.
>>956774> - Регион, где рисовать надо (например, область окна, требующая обновления)Как понять где требуется обновление? Посмотри на картинку. Это, короче, кадр и новая итерация в пользовательском цикле. На окне размещено куча кнопок, но нажата т.е. требуется обновить только одну, размещённую где-то в средине кода кнопку. И вот, опять же, цикл:while(true){draw_button("button");draw_button("button");draw_button("button");...draw_button("button"); // Вот она!...draw_button("button");draw_button("button");draw_button("button");}Как видишь нужна кнопка в центре и только она, но я никак не могу прыгнуть прямо на неё, мне сначала нужно отрисовать все предыдущие кнопки. Чтобы оптимизировать всё это дело желательно как-то проверять в функции draw_button поменялось ли в неё что-то с прошлого кадра, и если не поменялось, то достаточно просто скопировать уже просчитанный результат из этого самого предыдущего кадра, не просчитывая всё повторно. Вот не получается узнать поменялась ли.> OpenLookСпасибо, буду постигать.
>>956781Картинку забыл.
>>956769Или ты делаешь никому не нужное неудобное stateless-говно (хайп вокруг nuklear скоро кончится), или ты делаешь объекты и колбеки. Или ты делаешь еще большее говно, давая контролам уникальные айди и создавая внутри объекты по требованию. Колбеков не будет, но это единственное преимущество. Можешь еще адрес возврата получать вместо id, лол.
>>956783Как сложно жить.
>>956781>нужна кнопка в центре и только она, но я никак не могу прыгнуть прямо на неё, мне сначала нужно отрисовать все предыдущие кнопкиNYET.Каждая кнопка это окно, а у каждого окна есть границы.Действия мышкой над этими границами приведут к тому, что в окно будет направлено сообщение "мышь нажата".Обработчик сообщений для окна выберет это сообщение из очереди и затем начнёт рисование в окне. При этом будут заданы границы того, где он может рисовать (ему не разрешат ничего рисовать вне границ окна), а по окончании всех его действий с растровой сеткой будут заданы границы того, где он нарисовал.Растровая сетка будет возвращена оконной оболочке вместе с границами нарисованного.Драйвер устройства перенесёт нарисованное в видеопамять.>Вот не получается узнать поменялась ли.Графическая среда сохраняет состояние, вот этот >>956783 анонимус прав.
>>956801Так вы о разных вещах говорите. Он говорит о stateless-GUI, который каждый кадр реквестит отрисовку всего нужного на текущий момент GUI (может так случиться, что это каждый кадр совершенно разный GUI), тулкит придумывает элементам интерфейса прямоугольники, юзает какой-нибудь алгоритм, чтобы придумать layout этим прямоугольникам, срет результатом в видеокарту, а в конце кадра забывает обо всем. Если однажды при отрисовке клик попал в один из прямоугольников - юзер получает клик, если нет - хуй с ним. Весь необходимый стейт (состояние чекбокса, текст и курсор в поле ввода и т.д.), хранит не тулкит, а вызывающий код.
>>956801Да, мы говорим о разных вещах.Честно говоря даже не знаю как поступить. У меня полно хороших задумок хороших программ, но я каждый раз сталкиваюсь с необходимостью написания своего тулкита, и вот я пытаюсь осилить его битый год. Подход нукляра, какой же он охуенный. Я уже думал, что в скором времени таки допишу тулкит и буду заниматься чем-то действительно полезным, но обосрач. И что, опять возвращаться в степь GTK? Меня тошнит от GTK. Аноны, как вы видите идеальный тулкит для гуя? Цели: Простые десктопные приложения. С чего брать пример?
>>956807>С чего брать пример?Попробуй поковырять CLIM, интересная штука.
>>956807Сравни для начала все что есть.На QT+C можно тоже писать. Clutter, SDL, GLFW, EFL смотри.
>>956807ты же уже инвестировал в изучение gtkюзай его
>>956902>На QT+C можно тоже писатьНельзя, дебилушка
>>956980Можно маня, VLC так и написан.
>>957081>VLC так и написанты че, ёбнулся? qt морда на c++ полностью, а работа с видео, стримами, устройствами на C
>>956807Тулкит ненужен.WinAPI.
>>957109Cпермо-маням ничего не нужно.WinAPI и есть тулкит, тупые блядь.
>>957108Ну так тоже вариант.
>>956902> Сравни для начала все что есть.GTK и QT? В общем они одинаковые. Я много чего крутил в руках, но всё оно либо одинаковое, либо укуренное.> Clutter, SDL, GLFW, EFL смотри.Это же бэкенды отрисовки, что там смотреть.В целом мне нужен концепт размещения виджетов на экран. В GTK есть пакование в боксы и grid(в 3.0+), ни то ни другое мне не показалось приятным, а если я сделаю свой GTK но с размещением как в нукляре, то это, вероятно, будет совсем пиздец. Что делать — хуй знает.
Как конпелируют минимальные экзешники?
>>957165Под винду? Выкидываешь рантайм (или компилируешь с динамическим хотя бы), втыкаешь кастомную точку входа, мержишь секции, профит.
>>957165strip -s /usr/bin/*
>>957175А теперь сделай hexdump и посмотри, сколько говна гцц оставил тебе на покушать.
>>957144EFL это либы для интерфейсов
>>957144>ни то ни другое мне не показалось приятныма мне наоборот понравился подход, когда компонент занимает все место в контейнере
>>957181А теперь собери clangом или чем угодно другим, и покушай.
>>957144Короче накидал пикрел, буду ориентироваться на него. Надеюсь будет удобно.
Аноны, с какой платы начать изучать микроконтроллеры? Слышал, что советуют stm32l-discovery, но не слишком она старая? Все таки лет 7 уже прошло(или сколько там), или в мире микроконтроллеров не так все быстро меняется?
Анон, есть один вопрос: Если бы тебе ресетнули все проффесиональные знания, и оставили лишь знания об источниках знаний, учебниках, курсах и подобном, какие учебники годнота, какие мусор. Какой список учебников по математике ты составил бы для средней школы? Просто я подозреваю, что я мыслю о математических процессах очень неэффективно и неправильно. Хочу поправить фундамент, так сказать. Особенно интересует есть ли годные англоязычные учебники по математике переведенные на русский?
>>957281матанопетух, уймись
>>957281>переведенные на русскийharharharharhar
Аноны, ковыряясь в писечке обнаружил:result->top = !!(table->frame & TABLE_FRAME_ABOVE);зачем двойное отрицание, в чем тайный смысл?
>>957470Привести 0 или n к 0 или 1.& - это побитовый оператор, смысл выражения в выделении одного или нескольких битов по маске, а потом к проверке, был ли хотя бы один из этих битов ненулевой. Более традиционная форма:(value & FLAGS) != 0 (проверить, установлены или нет один или несколько битов FLAGS) или (value & FLAGS) == FLAGS (когда нужно убедиться, что все биты FLAGS были установлены).
>>957473Это понятно, но ведь достаточно записать как:result->top = (table->frame & TABLE_FRAME_ABOVE);
>>957476Видимо, не понятно. Смотри, пусть:table->frame = 0x5023;#define TABLE_FRAME_ABOVE 0x1000тогда table->frame & TABLE_FRAME_ABOVE выдаст 0x1000, а !!0x1000 выдаст 1. Если бы не было !!, мы бы присвоили в result->top 0 или 0x1000, а с !! присваиваем или 0, или 1. Когда у тебя int предназначенный для хранения bool, очень удобно, когда там не лежат странные ненулевые значения. В С99 появился bool, он при присваивании к нему автоматически преобразует значение к 0 или 1, а тут, видимо, старый код или разработчики по какой-то причине не хотели настоящий bool.
>>957477да, верно код старый. все понятно, скорее там бул в структуре размером с байта и это позволяет избежать переполнения. хитро сука, не то что нынешнее племя.
>>957482Почему хитро-то? (n & mask) != 0 - вообще идиома, а !! любят в JS.
>>957484двойное отрицание для кастинга мне еще не встречалось, возьму на заметку.
з.ы. я вот так обычно >>957476
>>957272>не слишком она стараязаебись же для вкатывания, как минимум можно много инфы нарыть и готовых примеров.Алсо некоторые диды до сих пор на 8051 быдлокодят в радаче даже тред есть, да и на вакансии натыкался, где требовался опыт ковыряния в этом говне динозавров
>>957477>автоматически преобразует значение к 0 или 1Почему, кстати, 1, а не все единицы, так же удобнее?
>>957509Потому что сделать n * bool иногда хочется, а все единицы позволяют только для branchless conditional assignment делать, когда битность совпадает. В общем реже оно нужно и ненадежно.
>>957272Нахуй тебе дискавери. Возьми аналог за 100 рублей с али, достаточно, чтобы начать вкатываться.
>>957513>сделать n * bool иногда хочетсяНу так можно n & bool сделать.
>>957517Можно, но я имел в виду неявные умножения/сдвиги в коде типа const char *something[] = { "foo", "bar" }; puts(something[some_bool]);
Посоветуйте книг по архитектуре процессора(Таненбаума уже почитал). И вообще, в каком направлении развиваться(стоит ли, например, ебаться с ардуионо или другими железками), чтобы взяли, скажем в интел/амуде/гнусмас, и в будущем заниматься разработкой архитектуры для новых процессоров(ну или чем-то таким, связанным с процессорами - мб эмуляция/виртуализация). Щас студентота, неплохо знаю асссемблер и си(++), но опыта с микроконтроллерами не было
>>957532Очевидные Хэррисы про железо (ISBN 978-0-12-394424-5) и Хеннесси/Паттерсон про высокий уровень и ISA (ISBN 978-0-12-383872-8). Начинать с последней, читать обе.
>>957532Алсо, у меня есть вот такой случайный набор букв и цифр, он подустарел, но может чего найдешь еще там: 8E2AD03BC44EBBA5DBCFC7ADBB1779BC53644166
>>957532>чтобы взяли, скажем в интел/амуде/гнусмас, и в будущем заниматься разработкой архитектуры для новых процессоровуф, так и чувствую твое разочарование лет через десять :D
>>957281http://4chan-science.wikia.com/wiki/Mathematicshttp://4chan-science.wikia.com/wiki/Math_Textbook_RecommendationsВ этом списке есть книги, которые сначала были написаны на русском, а потом были переведены на английский. Так что некоторые книги можно и на русском прочитать, но большинство годной литературы пишется на английском и не переводится на русский.
>>957546Чому так?
>>957532Что сейчас не хватает процессорам так это инструкций и гибридности, для определенной задачи больше подходит определенная архитектура.Не хватает аппаратной реализации строк, массивов, инкрементов, корней/степеней, поддержки разных интеджеров нативно без переобразований.Иди в IBM.
>>956742>Xустаревшее говно, сейчас wayland protocol.
>>946603 (OP)А можно ли среагировать на событие не проверяя состояния в цикле?Сколько ресурсов жрет такой цикл и как минимизировать последствия такого костыля?USB насколько знаю вообще в это не может, ведь это интерфейс для передачи данных а не сигналов, но если бы производители плат покаялись и одумались сделав современную замену ps/2 то как в коде обрабатывалось бы нажатие?Вообще и на низком уровне все на костылях, идет исполнение цикла, если что-то сделал то создается прерывание и обрабатывается.Как учитывая все это потребление процессора 1-2% в простое?
>>957605https://en.wikipedia.org/wiki/Interrupt
>>957600нужно сидеть в консоли под фреймбуфером
>>957626Почему же? Вот уже в 25 федоре вейланд в гноме по дефолту стоит.
>>957642а зачем тебе графические клиент-серверные архитектуры типа вейланда или иксов когда ты сидишь на собственном компе? вот когда понадобится запускать графическую прогу на другом конце шара и отрисовывать ее у себя тогда и пользуй
>>957644А какие есть альтернативы?
>>957646фреймбуфер (ладно, шутка)
Поясните как использовать тулсет Clang/C2 в 2017 студии
>>957598Поставить галочку в инсталляторе, а потом включить в свойствах проекта для нужной билд-конфигурации или для всех.
>>957721>>957775Промахнулся.
>>957626Wayland тоже норм.
>>957814Бля, собери мне ядро!
>>957850Какое железо?
>>957814А как ты на wayland дошел? Что ставил?
>>957872westonВообще на Velox хочу перекатится, пока руки не доходят.
>>957620Но USB то опрашиваются, а не генерируют прерывания, насколько я знаю.
>>957890Конечно опрашиваются, оно же само по себе сигнал не пошлет
>>956742>Тут есть даже я, разобравший Иксы и Presentation Manager и заново их собравшийСложно ли проксировать иксы в виндовой гуй? Все существующие подделки иксов под венду рисуют всё через свои костыли, и не вписываются в стандартный интерфейс.
>>957896Есть qt, gtk, и еще какие=то фреймворки.
Хелуворд по-православному.
Где можно выучить С, чтоб с задачками, а за решение ачивки и прочие звездочки?
>>957926Дай переменным нормальные имена, нехристь!
>>957926>по-православномуПасха Христова определяется очень просто и всегда одинаково:После весеннего равноденствия (20 марта) смотрим когда ближайшее полнолуние (11 апреля) и после него ближайшее воскресенье (16 апреля) и есть день Пасхи Христовой. Но если на этот день попадает празднование жидовского песаха то празднование Светлой Христовой Пасхи переносится на следующее воскресенье. Чтобы не праздновать Восресение Распятого одновременно с распинавшими. В этом году песах в синагоге сатаны празднуется с 11 по 17 апреля. Таким образом день Пасхи Христовой переносится на неделю. День ближайшей Пасхи - 23 апреля. Это правило определения дня Пасхи установлено неизменным первым вселенским собором в Никее. Кто ему не следует на того падает проклятие собора - анафема. Никак не зависит от календарей - принимается во внимание только равноденствие и полнолуние, которым календари абсолютно безразличны - что есть они, что их нет. И не надо стенать, "как мол так, мы на синагогу что ли должны ориентироваться когда нам праздновать нашу Пасху." Именно так, и на синагогу тоже. И из комнаты где идет молитва лучше выйти, если вдруг еретики какие заходят и начинают молиться вместе с вами. И из своего собственного дома лучше выбежать если его кто-то поджог. И христианскую свадьбу лучше перенести если рядом у безбожника-соседа день рождения и музон гремит сатанинский.Но главное не наши рассуждения в данном случае. Главное то, что так установлено отцами - одновременно с жидовским песахом Пасха Христова не празднуется и точка. Итак, ближайшая Пасха 23 апреля. Начало Великого поста соответсвенно выпадает на 6 марта.
>>957938Не хочется добавлять в православный алгоритм расчет богомерзкого песаха. Герман Львович, не по божески это.
>>957875В голом вестоне этого всего нет.
Чего не хватает в C?1. Concurrency. Потому как паралелизм дораха обходится, иногда настолько что однопоточное решение быстрее, в то время как в Go не юзаются потоки операционной системы, избегается оверхед. Строки кажется и не нужны.2. Templates говорят позволяет добится большей оптимизации.
>>958320паралелизм ненужен как и шаблоны
>>958292Чего нет?Если ты о браузерах и файломенеджерах, vlc, mpv. То этого и не должно быть, он может и тебе не нужно.Отдельно ставь.Мозила не может в вейланд.Ozone Chromium может, webkit (epiphany, midori) может.Почти вся Qt5 хуйня работает. GTK3 тоже должно работать, не проверял пока. Я имею в виду приложения в которых не сказано ничего о поддержке вейланда скорее будут работать чем нет.
>>958321Конкуренци это не параллелизм. Паралелизм это когда потоки создаются, что не обезательно для конкуренци.Шаблоны чем плохи? Что лучше?
>>958321И как это не нужен? Скоро в смартфонах по 32 ядра будет на десктопах 16 потоков норма уже.
>>958330хипстеры и это засрут. не каждый алгоритм можно рспаралелить, а запуск процессов есть в любой ос и да, потоки тоже нинужны.>>958328тем, что шаблоны обобщают, а это всегда хуже конкретики.
>>958340Ну насчет шаблонов он частично прав. Когда реализуешь какую-нибудь коллекцию на Си, приходится жертвовать либо производительностью, либо проверкой типов, либо копипастить код. В такие моменты очень хочется шаблоны. Хотя я бы предпочел явную кодогенерацию на этапе компиляции, а не крестовую магию.
>>958376>кодогенерацию Ну а компилятор разве так не делает?
>>958376Интересно, если ли для Си какие-нибудь препроцессоры уровня Nemerle, чтобы обрабатывать AST? Такая штука была бы намного удобнее крестовых шаблонов.
>>958320Мне лично только лямбд не хватает, все остальное норм. Concurrency легко эмулировать сопрограммами (setjmp/longjmp), только задачи нужно переключать вручную.
>>957899Я про родные люнупс аппликухи. В смысле запускаемые под LXSS.
Аноны помогите кто чем может.Задали написать простой 2D шутер, вид сверху на С.Я вообще не епу как это делать читаю ,Прату, вроде решаю простые задачки, но как сделать игру хз? В инете есть только змейка.Покидайте гайдов или примеров каких с комментами (рус\англ) плиз.Хеелп
>>958565SDLDLL
>>958617У местных даунов с ней какие-то проблемы. То ли хэдеры с либами не могут добавить, то ли путают 32-битные и 64-битные версии.Хз, у меня проги на SDL компилились с первого раза и на винде, и в линуксе.
>>946603 (OP)Есть два файла: 1.txt и 2.txtКак мне проверить каждую строку первого файла с каждой стройок второго файла и при совпадении сделать XYZ? Строка номер 1 файла один со строкой 1 2 3 4 5 6....n до конца файла 2. Потом строка номер 2 файла 1 со строкой 1 2 3 4 5 6....n до конца файла 2?Я нашелнабросал такое - но такой алгоритм проверяет первую строку одного файла с первой строкой другого, вторую строку со второй и тд.Если есть исходник такой хуйни - буду рад. В гугле - хуйня подобная моей.http://pastebin.com/bvDd1LLV
>>958627У тебя явно какие-то проблемы с пониманием массивов символов - ты кормишь в fgets один символ массива, а не сам массив. Твоя программа самым простым способом решается так:открыли файлы;while (fgets(первый файл)) {rewind(второй файл); // Перематываем на начало.while (fgets(второй файл)) {if (strcmp(строка1, строка2) == 0) {зделоть;}}}закрыли файлы. Но это ебически неоптимальный способ (зато простой). По идее, стоит прочитать второй файл в память, и сравнивать строки уже с памятью, не перечитывая повторно. Но у понадобится узнать про маллок и указатели хотя бы, а у тебя проблемы даже с массивами.
>>958632>маллок ой нет, нахуй нахуйВопросы оптимальностей и прочих оптимизаций неактуальны. Спасибо большое, я попробую переписать это в код и надеюсь заработает :3
>>958632Если файл 8 гигов то наверно лучше неоптимальный и простой алгоритм юзать?По моему убеждению хуйня все это, все хуйня.Бешешь sha256sum обеих файлов и сравниваешь, вуаля!
>>958641https://en.wikipedia.org/wiki/SHA-1Designers: National Security AgencyВот теперь все ясно.
>>958632> кормишь в fgets один символ массива, а не сам массивА как правильно? fgets(slovovmassive[], ?, ?);
>>958632Алсо - напишите за меня, плеас, за сто рублей на телефон :(
>>958646>>958650Я за тебя написал уже. Все, что тебе оставалось:char stroka1[1024]; // и stroka2 аналогичноиfgets(stroka1, sizeof(stroka1), file1); // и второй fgets аналогичноиstrcmp поправить. И погуглить, какой хедер подключить для strcmp.
>>958622Норм либа, давно в вейланд могет.
while(fgets(file_1)) { for (x=0; x < 5; x++) // { fgets(ch_1[x], sizeof(ch_1), file_1); for (y=0; y < 5; y++) { fgets(ch_2[y], sizeof(ch_2), file_2); if (ch_1[x]==ch_2[y]) printf("\sasai\n",stroka); else printf("ne sasai"); stroka++; }Не робит нихуя твое "пока"
>>958679Да-да, основное предназначение SDL - как раз наименее безболезненно получать контекст опенгл и пользовательский ввод, не разбираясь, что там за очередное говно стоит у пользователя вместо гуя. Все остальные "фичи" этой либы - неюзабельные костыли.
>>958682http://ideone.com/e5TtB4
>>958692Ебануться, спасибо тебе, ты охуенен, благодаря таким как ты мы эволюционируем.Не разобрался с файлами - мне указать вместо массивов два моих файла?
>>958686Ну есть же и фичи какие-то.У меня в supertux кстати опенгл не работает, а должен, но сдл работает.>>958700>Не разобрался с файлами - мне указать вместо массивов два моих файла?Вместо имен файла кинешь туда argv[1] argv[2]
>>958703Спасибо, разобрался, вбил имена файлов.Господи, ты даже не представляешь, как ты мне помог, живи здорово и счастливо
>>958708А теперь возьми исходники cmp.
>>958716Что взять? Непонимат
>>958718Проебался, тебе надо сравнить строки а не одинаковы ли файлы.
>>958725Я понял, что нужно указать (?) файлы и потом в массивы грузить их содержимое -но нахуя, если и так все работает)))0000
>>958741Не понял что ты в виду имел.laba1 file1 file2так вызываешь свою программу.
>>958743Ебать я дно. Я тебя понял, понял почему ты написал именно так. Пиздец я дно. Спасибо тебе большое, ты спас моё ёбааную задницу - я не знаю кто ты такой, но я желаю тебе заработать много денег и жить в счастьи и гармонии. СИ-воды самые лучше. Крестобляди соснули.СПАСИБО!
>>946603 (OP)как называется среда разработки c в вижуал студио
я так и не понял где эта среда
>>958807Ой блять, будто я знаю. install gentoo mingw
>>958818>mingwна английском
Выкиньте нахуй свою вижуалку, в сях она всё равно не нужна, а то потом приходится смотреть код долбоёбов, которые свежие стандарты не знают.
>>958821Даже у меня в школе был mingw. На английском, блядь, угу. Прекрати ныть. Ныть хорошо, но не без толку же.Заодно разберёшься с make и потеряешь рассудок\анальную девственность в таком особом обряде инициации.
где ставить галочки
или не надо
>>958826Метапакеты из basic setup ставь. msys, mingw-base и gcc-g++
все таксори если достал
>>958835Я бы тебя не нанял.
что дальше
>>958838Сфотографируйся с флагом в заднице.
>>958839не заинтерисован
>>958841Ну хотя бы хуй себе на лбу нарисуй.
>>958842не интересно
>>958846Ну и пошёл нахуй тогда, болезный. Пиздец, компилятор поставить не в состоянии.
я должен каждый раз открывать cmd чтобы запустить компиляцию ну нахуй
>>958838Дрочи, компилируй, дрочи, компилируй! Запускай программы! Мусори в пайпы! Открывай сокеты! Сравнивай строки! Вычисляй фибоначчи!Я не знаю, придумай чего-нибудь, короче. Потом будешь с резюме показывать. "Сматрите как я умею."
>>958850 зря ты ты так.3760 у нас в шараге даже вижуала нет кодим на крестах в какой то веб параше cpp.sh так что прошу понять и простить
>>958807Visual C++.
>>958834> msysПосоны берут MSYS2, там pacman, понятный любому арчешкольнику.
>>958850Если ты еще не понял то я хочю вкатится ,а этот дрочь на уровне красноглазия мне еще раноЯ только учюсь
Поставил LLVM compiler не понял как он работает удалилОсталась папка bin ,которая неудаляется потому что она под админомКачал с офф сайта
>>958903Анон, выброси компьютер и иди работать в KFC. Программирование - это не твоё.
Подскажите алгоритм всех перестановок позиций из числа не полного спискаПример 3 из 3, это обычные 3! вариантовНо может быть и 2 из 3:1 2; 2 12 3; 3 23 1; 1 3и.т.д.Нужна генерация мыпы на различные варианты перестановок вплоть до 10 из 20. Чтобы не генерить перестановки при каждом запросе, а просто искать в мапе индекс начало искомого запроса и выдавать под список
>>958905ненужны нам в кфс такие долбоебы
>>958855Поставь Qt 5.6.2 для MinGW, там внутри MinGW и Qt Creator - среда разработки.
>>958927> просто искать в мапе индекс начало искомого запроса и выдавать под списокчто ты пишешь блядь
Поясните пожалуйста про такую запись. (void*)&smth. Я правильно понимаю что мы такой записью приводим указатель на smth к указателю на войд?
>>958987Короче нужно получить массив перестановок для всех вариантовint map[N][20]:{{ 1,0,0....,0}, { 2,,0,0....,0}... { 20,0,0....,0}, { 1,2,0,...,0}, { 2,1,0,...,0}, { 1,3,0,...,0}, { 3,1,0,...,0}, .... { 19,20,0,...,0}, { 20,19,0,...,0}, { 1,2,3,...,0}, { 1,3,2,...,0}, { 2,1,3,...,0},...,{ 3,2,1,...,0}, { 1,2,4,...,0}, { 1,4,2,...,0}, { 2,1,4,...,0},...,{ 4,2,1,...,0}, ... { 18,19,20,...,0}, {18,20,19,...,0}, { 19,18,20,...,0},...,{ 20,19,18,...,0} .... .. { 1,2,3,...,20},....{ 20,19,18,...,1}}
>>959006Да, был: Type smthПолучили его указатель Type p= &smthИ преобразовали его к в void: void pp = (void*)p
>>959013Макаба звёздочки в разметку конвертит
>>958897тут 1 кресты
>>959015Создаешь пустой проект win32 и в свойствах проекта меняешь как написано тут >>957775Затем добавляешь в проект исходный файл с расширением .c и будет тебе С11
>>959006Большое спасибо!
>>958821А ты думаешь, что существуют компиляторы на руснявом?
>>958848Так ты ее не закрывай, дебил
>>958822Clang/C2?
>>958822>свежие стандарты
>>958320>Dmitry>Dmitry>паралелизм >л>позволяет добится>тся
>>959020Выставлять шланг не обязательно, по большей части студия и своим собственным cl код с C11 компилирует нормально.
>>959020>и будет тебе С11Хуй у него за щекой будет, а не C11. В Студии до сих пор только C90.
народ что вы думаете об этом
https://ru.wikipedia.org/wiki/Eclipse_(%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8)
>>959058У тебя устаревшие сведения. C99 полностью (кроме мелких проблем с либами) и всё нужное из C11 есть по дефолту. Полная поддержка при установке фронтенда от clang.
>>959053Недавно пытался скомпилировать с _Generic, cl послал меня нахуй, а clang скомпилировал нормально
>>959089И часто ты компилируешь код с _Generic? Оно плохо определено в стандарте и практически неюзабельно на текущий момент. Возможно, в С21 поправят, уточнят, тогда можно будет начинать использовать.
продвижение есть
>>959113сменил но все равно тоже самое
прошу простить я нубас
>>959117Отсутствие символов для системных либ - это нормально, это не ошибка. Если очень хочешь их (вот только нахуя они нубу?) - можешь погуглить "configure symbol source".
>>959093какой 21? Сам же прекрасно понимаешь, что если прошлые стандарты называются 88, 99, 11, то следующий-то по аналогии должен состоять из двух одинаковых цифр, так что следующий стандарт по определению обязан быть 22.
>>959068А вот мне нравится 2010 студия. Точнее, всё что выше, не ставится на XP.
>>959132А про 14 и будущий 17 вам не доложили?
>>959132C90 блядь.>>959068Вот в этом-то и дело. Написать портабл-код и использовать портабл код в студии с гарантией отсутствия пердолинга не получится, у них в макро заявлена поддержка лишь C++98 (про С не узнавал).На стандарты в МС болт клали.
>>959132Стандарты обзываются по году выпуска, следующий выпуск стандарта намечен ориентировочно на 2021.>>959203> использовать портабл код в студии с гарантией отсутствия пердолинга не получитсяУ меня от тебя _GNU_SOURCE. Не считаю пердолингом создание пары дефайнов под компилятор. Никакого портабл кода все равно не существует, системно-зависимые вещи приходится писать и #ifdef-ать для любой программы сложнее хелловорлда.> у них в макро заявлена поддержка лишь C++98По факту у них почти полная поддержка C++14.
>>946603 (OP)Сап, аноны. Для сортировки разного количества чисел приходиться каждый раз изменять код. Как можно задатьn чисел в файле? Т.е. чтобы код сосчитал все цифры в файле и задал его как n-чисел, дальше сам разберусь.
>>959482Но ведь у тебя код и так считает числа. В 17 строке после цикла k = количество чисел + 2 (вроде бы). Добавь обработку ошибок fscanf в строке 16, и будет точно.
>>959482Ну так передавай первым аргументом в функцию длину массива. Ну или еще есть variadic >>959482arguments
>>959484>>959486А я том, что если в файле будет 51 число, то программа работать не будет, и мне придется менять, задаваемые размеры массива и кол-во вызова функции на 51, как избежать этого?
>>959489Сделай массивы 10000 элементов (по условию) длиной. Иначе тебе придется городить динамическое выделение памяти через malloc (выделяешь 100 элементов, если закончились - делаешь realloc, добавляя еще столько же и т. д.).
>>959491Спасибо, анон. А еще микровопрос, разве консоль имеет ограничение на кол-во строк? А то из 1000 только 295 чисел пишет в файле все нормально, можно ли как-то продолжить запись во второй,третий,... ряд?
>>959489Так динамически выделяй память, в чем проблема то?
>>959505Я это еще не изучал, да уже и без динамического выделения памяти все получилось.
>>959498Не помню, как в десяточке. Попробуй кликнуть правой кнопкой по заголовку консоли и поискать там параметры. Среди прочего там будет размер буфера экрана.> можно ли как-то продолжить запись во второй,третий,... рядНет. Консоль, в простейшем случае (когда ты работаешь с ней через printf, а не в виде окна с символами) - это печатная машинка. Можно вернуться к началу текущей строки (\r), но к предыдущей строке вернуться нельзя никак. Впрочем, ты можешь выводить числа горизонтально - просто убери \n из printf.
>>959489Перелавай массив по указателю бляха.
Анон помоги.http://pastebin.com/MMS3tSLFПервая строка содержит целое число k количество конечных автоматов. Следующие k строк содержат по два целых числаni и mi число состояний и переходов i-го автомата.Выход должен состоять из k строк. На i-й строке выходного файла выведите одно число – нетривиальность i-го автомата.Сделал так как смог. Но хотелось бы сначало ввести кол-во строк потом числа, а только потом конечные результаты. Не пойму как запихнуть в цикл.
Возник вопрос. Имеется динамический массив структур. Причем растет массив через realloc путем добавления 1 элемента. Т.е. сначала просто у меня структура, потом массив из двух, вжух теперь из 3 и поехало.Структура в своем составе имеет интовый массив [32]. Так вышло что по новому заданию массив в структуре может быть 32, 64,128, 150. Вижу 2 решения задать в структуре объединение с 4 массивами и выбирать потом тот размер который нужен (sizeof к структуре всегда будет давать 1 размер). Но загорелась жопа зачем то усложнить и сделать гибкий массив. Но помню читал, что массив из структур в составе которых гибкий массив не есть гуд. Но сделал черновой вариант и все работало. Так как лучше поступить. Через юнион конечно надежнее, но ломает сделать с гибким массивом
>>959618Не усложняй себе жизнь, гибкие массивы норм (мы ведь про Type elements[]; последним элементом структуры, правда?). А вот делать realloc() на один элемент больше - избыточно, лучше выбрать больший шаг хотя в одном из прошлых тредов мы выяснили, что как минимум в линуксе можно и +1 делать, не теряя в производительности.
>>959623Да, про него. Ты прав, реально сейчас наделаю дел, а потом переделывать буду 10 раз. То что добавляю по одному тут опять же требование. Спасибо!
>>959643 (OP)>>959643 (OP)>>959643 (OP)>>959643 (OP)