Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
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)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Задание из K&R. Что он хочет? 123 --> 312, 51231 ->15123 или что? Эта задачка и раздела про побитовые операторы, я ответы понаходил, даже не понял, что они там делают...
>>1754933 Да, только в двоичном. В прошлом треде уже отвечал кому то про это. Прорешай на листочке в столбик и поймешь как с помощью маски (через and), обычных сдвигов, и or сделать.
>>1754979 >>1755340 Спасибо, я как раз скинул в тред. Чому-то не догадался, лел... вообще, маски это впечатляюще, наверное, очень мощный инструмент, хз, используют ли их в повседневности
Ебля с path variables в винде а потом разруливать 100500 опций в конкретно каждой IDE мне не под силу, копипастить не понимая ничего - это уже перебор. Тем более я си дошел пока только до 10й главы у праты. Я даже не нуб, я вообще не человек нахуй.
Все просто, написал батник, прописал в path mingw32, разобрался с make. В пару кликов все компилится, а главное - досконально понимаю что происходит на каждом этапе.
Анончик, спасибо за пример с GDI! Теперь можно и за него взяться.
>>1755672 Что поделаешь, я ещё не готов к ебле с каждой отдельно графической системой, со своим апи и миллионом неочевидных зависимостей только для того, чтобы вывести кружочек. One true way рулит.
>>1755603 Если планируешь работать с mingw, советую поставить msys2. В нём есть пакетный менеджер и куча готовых библиотек в репах для винды. С ним не надо качать по отдельности хуй пойми кем собранные бинарники и ебаться с путями.
Почему с типом char он возвращает -1? С int всё, естественно, нормально работает, но мне интересно. По идее, он приводит массив из char в int в момент передачи массива как аргумента функции. Я знаю, что С передаёт обычные переменные по значению, а массивы -- по указателю или чё-то такое, в общем, оригинал, фактически, но почему вообще там значения изменились? Все числа влезают в char, т.е. старшие биты не обрезаются, сам char это представление чисел фактически, чё он машнит тогда? Объясните, поалуйста
>>1755897 > По идее, он приводит массив из char в int в момент передачи массива как аргумента функции. Ну да и память, которую ты заполнял, как массив чаров размер которых 1 байт, он будет видеть как массив интов, размеров которых 4 байта.
>Seriously, XLib is a load of crap. > >The numerous tiny "off-by-one" errors, the pathetic font handling, absolutely no native support for anything useful forcing you to "reinvent the wheel", "reinvent the engine", "reinvent the car", and if you want it fast, "reinvent the driver". > >It is worse than the Windows GDI API and even slower by definition because of the architecture. > >The only way you will ever make anything decent: write a layer building everything you need from scratch using XLib as little as possible. Anything more than a strict subset and you'll be wasting cycles waiting for your graphics to cross the socket boundary, while the processor switches contexts, and the user is wondering what in the world is taking so long to see an 8bit billboard "fire its laser".
>>1756054 Можно взять Skia/Cairo. Вот, например, линкрандом: https://gitlab.com/cairo/cairo-demos/-/blob/master/X11/cairo-demo.c Все зависит от того, что именно тебе нужно кроме рисования кружочков. Алсо, в винде проще по-быстрому накидать интерфейс (разумеется, если с Qt не сравнивать, но Qt - это уже кресты). анон с кодом для GDI
>>1756071 >>1756054 В целом все векторные графические апи очень сильно друг на друга похожи, ничего нового там не изобрести, отличается лишь инициализация.
>>1756214 > В конечном итоге хочу арканоид свой написать Надо было сразу сказать. Вот как раз для этого лучше взять SDL2, кружочки рисовать в фотошопах/гимпах/whatever заранее, а в игре использовать их уже в виде готовых текстур с прозрачностью. Скорее всего, ты сделаешь атлас типа пикрелейтед, захардкодишь в исходник координаты и будешь брать кусочки из атласа по известным координатам и копировать их во фреймбуфер. Чтобы длинную платформу сделать, берешь концы от короткой, а середину дублируешь несколько раз.
На GDI ты, конечно, тоже можешь такое сделать, но тогда ты через пару дней придешь в тредик с вопросом, почему все мигает, и как сделать двойную буферизацию, а чуть попозже попробуешь сделать что-то более динамичное, чем арканоид и начнешь спрашивать, хули так медленно. Начнешь отрисовывать графику при старте... и в итоге придешь ровно к тем же самым текстурам. Потом упрешься в скорость BitBlt (это копирование изображений), в итоге возьмешь те самые Direct[Draw|2D|3D]/OpenGL, которые используются в качестве бэкендов в SDL2. Такие дела. Но. Я когда-то писал софтрендер с выводом через GDI, было вполне норм. Алсо некая успешно почившая ныне технология Adobe Flash в standalone плеерах тоже успешно использовала GDI, и ничего особо не тормозило. Чтобы реально упереться - надо постараться.
>кружочки рисовать в фотошопах/гимпах/whatever заранее, а в игре использовать их уже в виде готовых текстур с прозрачностью. Скорее всего, ты сделаешь атлас типа пикрелейтед, захардкодишь в исходник координаты и будешь брать кусочки из атласа по известным координатам и копировать их во фреймбуфер. Чтобы длинную платформу сделать, берешь концы от короткой, а середину дублируешь несколько раз Блин, именно так я и думал! Я понятия не имею как это называется, но я посмотрел на ютубе один чувак разбирал Dave1 и там в exe-шнике были все текстуры упакованы со смещением. Я впечатлился. Но спасибо тебе огромное, я хоть начал понимать что за GDI такой, плюс приятно осознавать что я более менее правильно думал.
>в игре использовать их уже в виде готовых текстур с прозрачностью. Скорее всего, ты сделаешь атлас типа пикрелейтед А разве GDI так не умеет?
>>1756355 Там не так много базы и надо. Игрушка как раз хороший учебный проект — сначала пишешь ее в систайле, потом пакуешь шарик игрока и штуки которые надо ломать по классам, потом перестаешь использовать стандартные структуры данных, пихаешь в контейнеры, делаешь маленькую базу данных куда пихаешь хайскоры, по приколу добавляешь пуканье джейсонами/хмлками, потом пишешь установочник.
>>1756373 Я так и собираюсь делать, лол, спасибо! Я имею ввиду что я еще прату не закончил. >пуканье джейсонами/хмлками >темплейты вместо обычных классов А вот сейчас ничего не понял.
>>1756385 >пуканье джейсонами/хмлками Примерно 70% реальной работы современного софтвейр инженера, особенно на бекенде.
>Темплейты вместо обычных классов Стандартные классы и new delete залупу мало кто использует. С помощью темплейтов реализуют такие замечательные вещи как наследование, фабрики, и етц, отсутствующие по дефолту.
>>1756407 >Примерно 70% реальной работы Как и в любой профессии, тащемта, нет? Я например инженер, так именно конструированием я занимаюсь тоже где-то 30% времени. Всё остальное это репорты, бланки, митинги и исправление косяков молодых.
C какого размера стоит обязательно использовать функции? В учебнике для каждого пука вроде ввода и сортировки стали вводить функции длиной в 6-8 строчек. Мне учебную программу длиной в 40-80 строк удобнее писать вообще без дополнительных функций. На них можно забить пока я не пишу "полезный код"?
>>1756807 Нет, потом иначе так и будешь говнокодить. Единственный кейс когда можно не выносить всё в другие функции — это когда этот код _нигде_ не будет переиспользоваться. А всё, что хоть сколько-то можно переиспользовать (сортировки — вообще максимально дженерик хуита для всего) — выносить.
>>1756807 Это индивидуально. У меня в геймдеве строк 10-20. Иногда, внутренний блок цикла может быть 20 строк, тогда в сумме с бойлерплейтом инициализации/цикла будет до 40. Дальше начинает путаться логика, что от чего зависит. Сложно изменять. Также, вынос в функции больше зависит от переиспользования. В учебной программе тебе это незаметно. Но в реальной практике ты захочешь применить этот же алгоритм к другим структурам. Или наоборот, с этими данными провести другую операцию. И вот уже у тебя +80 строк копипаста на ровном месте.
Скажу сразу, я не программист, а просто технический менеджер. По работке пишу простенкьие скрипты для аналитики на питоне, тыкаю данные из бд при помощи sql, немного поддерживаю проектовую админку на js. Думаю, может, мне стоит немного посидеть поучить основы С? Я не планирую когда-либо работать с этим языком, но насколько я слышал от прошаренных типов, С очень понимает в понимании того, как работает компьютер, что вообще такое программирование, как программа взаимодействует с железом, всё вот это вот. Насколько С вообще может мне помочь в плане такой теоретической базы? Или жс/питон уже настолько абстрактны, что никак не связаны с С?
>>1757040 Вообще никак не помогает лол, си под х86 это такая же высокоуровневая прокладка как питон или жс, высоко над уровнем железа. Ты можешь дергать системные пукалки вроде посикс, но сама система для тебя останется таким же черным ящиком, как и в случае с любым другим языком. А вот если ты углубишься в физику, информатику и конкретно реверс — то ты уже поймёшь как работает система, компьютер и конкретно железки внутри, только с изучением си это ничего общего не имеет
Мимо-шел кресточмо джениунли не понимаю почему ньюфаги думают наоборот
>>1757088 Так в жс абстракции слишком высоки, ты тут не char'ами оперируешь, и даже не байтами (хотя в целом можно и ими - есть типизированные масивы сырых данных). В 2020ом строка даже сразу на unicode символы разбивается при проходе по ней циклом, так что не надо выебываться с codepoint'ами. Я слабо представля, что он имел ввиду под пониманием как работает компьтер, потому что для этого и не надо в общем-то языка учить, можно книжки почитать. А если хочется низкого уровня для самообразовани, то ассемблеры куда интереснее и образовательнее, чем си. Си надо выбирать уже чисто из практических соображений.
Аноны, расскажите, как вы вообще программы пишете?
Я схемотехник, код мне по факту нужен только, чтобы гонять байты туды-сюды, и в своей области мне не трудно накатать что-то, что может работать. Но вот я хочу сейчас и прямо сейчас сука написать что-то под винду, как у меня ступор.
Хочу вырасти как системный инженер, для этого нужно уметь больше, чем умею я. Для меня в схемотехнике все довольно просто — есть входной сигнал, есть выходной, колдуй так, чтобы на выходе получилось то, что нужно, используя готовые модули вроде микросхем и так далее. Хочешь больше — колдуй с МК. С горем пополам я в свое время научился делать всякое с дренейками с STM32 используя их ПО и сервис мануалы.
Так к чему я клоню? Я знаю, как сделать у себя в голове проект для какой-нибудь платы, потому что примерно знаю, что должно быть внутри, как это подключается и так далее. То есть я могу представить, КАК это работает, ЧТО для этого нужно и другие подводные. А как блять сделать что-то другое нахуй?
Вот хочу сам себе доказать, что могу. Хочу сделать хуйню чтоб пикчи переводила в пиксель арт. В интернете говорят "Ну вы накидайте там проект на коленке и пишите код". С написанием кода есть тонна учебников, в этом проблемы нет. А как накидать проект то сам? Откуда эту инфу взять? В схемотехнике есть даташиты и сервис мануалы на используемые компоненты, можешь что угодно подобрать. А тут сам ебисб, ток документация на язык и колдуй с ним чо хочешь. Я не нашел нихуя (может плохо поискал) как сделать интересующую меня задачу вот прям сделать.
А даже если бы и нашел, это был бы копипаст чужой реализации, т.к. чтобы доделать туда что-то свое мне нужно было бы взять другой велосипед другого Васи и вставить в этот велосипед. По сути это и есть модульный способ создания чего-то нового, это окей, в схемотехнике также как раз, но как мне при этом все в голове у себя собрать? Откуда я могу знать, что мне должно понадобиться в данной программе? Где про это то прочесть? Хочу писать программы, но не могу.
Кому не влом, напишите хоть тут, как вы видите структуру пиксель арт генератора, хоть с вашего пинка попробую что-то сделать.
>>1757562 >как вы видите структуру пиксель арт генератора Для начала тебе нужен алгоритм уменьшения изображения. Например, простым будет алгоритм k-nearest neighbors (ближайшего соседа).
Ты переводишь изображение в матрицу (двумерный массив) пикселей, затем делишь её на квадраты по n (например, 4 или 9) пикселей. Затем из каждого квадрата ты выбираешь самый популярный цвет пикселя, и переносишь его на новый холст (который в n раз меньше). Если изображение большое - этот шаг можно повторить несколько раз. Готово, ты реализовал уменьшение изображения до пиксель-арта.
Дальше тебе (скорее всего) нужно уменьшить количество цветов. Ты делаешь список самых популярных цветов изображения, затем перекрашиваешь в них менее популярные, у которых разница в оттенке меньше определённого порога. Ещё один вариант - ты создаешь палитру, например, из 256 цветов и округляешь все цвета до значений из этой палитры.
Здесь уже остаются только тривиальные задачи вроде открытия исходных и сохранения получившихся изображений.
>>1757562 Начни с интерфейса, окошки там кнопочки, вид до вид после. Или тебя алгоритм преобразования интересует? Тут наверное берёшь пиксель увеличиваешь размер потом лишнее разрешение режешь.
>>1757599 >>1757610 Похоже на интерполяцию, только наоборот. Я такое делал, когда из датчика на тепловизор 8х8 надо было что-то вывести на 320х240 экран. Разберусь. Так хотя бы что-то продвинется! Спасибо, анон. Надеюсь, что со временем и мне придет понимание структуры программ.
>>1757562 байтоебы творческие импотенты ну хуй знает, формат bmp норм описан даже на википедии, выводить буковы и циферы в консоль, надеюсь умеешь, дальше действительно >колдуй с ним чо хочешь А как ты хотел? И свою фантазию не включать, и чужие велосипеды не пиздить? Противоречиво... Так-то про все есть инфа. Те же основы 3d-графики, а дальше колдуй че хочешь, например.
>>1758896 K&R устарел не слишком сильно, о нововведениях можно прочитать и позже, за вечер. На русском еще много чего есть, тот же Прата, но лучше взять словарь и оригинальное издание. Без английского в программировании делать нечего.
>>1759017 Ты бредишь чтоль? Тебе не нужно переводить на русский названия определений вроде variables или arguments. Если совсем с этим туго, то тебе нужно только непонятные слова перевести в описании этих определений, чтобы понять, что целиком определение значит (milk — жидкость из вымени коровы, ну ты понял). Ну или даже если хочешь и их перевести (чтобы самому было понятнее), переведи и их. Откроешь для себя, что variables в русском языке означает переменная. Все равно будешь везде говорить variables.
Ты ахуеешь, но тебе надо не переводить с английского на русский, а понимать английский текст для программирования, т.к. на нем ты и будешь общаться с машиной (ну или 1С тредис по соседству). Тебе все равно в конечном итоге придется на нем со всеми общаться, начинай уже сейчас (как бы тяжело не было).
Для словаря не знаю, что используют остальные, мне хватает translate.google.com покормил
>>1759027 Ну вот тут недавно спрашивали про задание из K&R про разворот битов чёт как то не помогли эти гуглы. Я попробовал на edx курс по Питону на английском там вообще субтитры гуглем переводил было ощущение что придумываю половину. Вот например boilerplate как первести? Там больше проблем не сопределениями а с действиями.
>>1757040 Водя машину ты ведь не поймешь, как она работает. Бери учебники по теории цепей, затем по схемотехнике, затем пытайся сам делать платы, которые что-то полезное делают.
Поясните, если я буду работать прогером, то у меня будут задачи, над которыми нужно подумать? Типо как в школе с олимпиадными задачами. Или это почти всегда тупа загуглил, написал.
Переписывать/реверсить под грифом и подпиской украденную у доблестными петром и бошировым прошивку какого-нибудь GBU-28AAN "Annihilator" для очередного АНАЛО-ГОВНЕТА? Действительно, мозги нужны.
Типа бабкину плиту-буржуйку заставленную пыхтящими кастрюлями представил? И как бабка с поварежкой на измене суетится бегает, открывает крышки мешает, тут хуяк одна такая кастрюля с борщом с капусткой внучеку убегает кхуям?
Ну и как идиома, вот эта вот плита буржуйка с кастрюлями которые дохуя нужно варить там ингридиенты засыпать применяется к коду, как правило работа с каким-то API.
Яркий пример - графическое API Vulkan, да и DirectX 12 - там нужно 2000 строк только что бы нарисовать сраный треугольник.
>>1759061 Зачем тебе оффлайн словарь в области, которая каждый месяц что-то новое в себя приносит. Гугли и все. В работе программиста огромная доля работы с поисковиками.
>>1759027 Охуительный совет чтобы стать новой Никселькиксель. Антоши, как посчитать сам ов сквеар интеджеров до 10000? Я попытался лупой, но вариэйбл становится негатив"
>>1759051 сам по себе вопрос странный же говорю, почему другие должные придумать как использовать твои мозги если ты сам не знаешь их приминения, найди блят лекарство от рака зоебал
>>1759293 > лупой Лупом. В остальном все правильно. Все так. Это лучше, чем переводить convolution как "свертка", а deconvolution как "деконволюция". Русская языка велика есть, но для техники совершенно не подходит.
>>1759384 если ты такой умный, то чому ты еще не наебал систему? а? А? у илона маска было нихуя, а он же наебал, а ты нет. глупо тут аписнять что важно а шо нет когда ты сам ето знаешь, хочешь интересных задач так ищо шобы платили за них тебе, могу только губозакаточную машинку посоветовать купить
>>1759594 че за тему конкретно читаешь? Если тебе именно с прототипами надо то компильни со стандартом 89. Нельзя макрос передавать в функцию, потому что в данном случае у тебя copy_array(target, source , size) разворачивается в copy_array(doube target, double source, int 5) и компилятор не считает это адекватным
>>1759609 >че за тему конкретно читаешь? Arrays and Pointers. 10я глава. >>1759616 >люби свой компилятор сука. Прикол в том, что если бы я использовал IDE вместо Notepad++, то оно бы мне подсветило неправильный синтаксис.
Надо получить дескриптор и заголовок сокета из обработчика прерываний и сделать их доступными для вызова функции httpd_queue_work() из основного цикла программы int main().
>>1760095 >Чё? Нахуя тебе ваще си чтобы катиться в крестоиды?
>да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Захотел написать программу для своей эл. книги от pocketbook, а там сдк мало того что с 2015 не обновлялся, так еще и на ебучем си, вместо крестов. Так не хочется опять все это дерьмо с велосипедами хлебать.
>>1761462 > Программы для устройств Pocketbook пишутся на C с использование компилятора GCC А вообще, как то можно написать логику на крестах, и как то работать с ней из кода на си?
>>1761464 Да. Сделать сишный интерфейс (extern "C", не не использовать C++ типы, перехватить все исключения). Ну и рантайм для C++ должен присутствовать.
Сап. Есть один нуб, который вообще ничего не знает, но решил взяться за си как за первый язык. K&R ему точно не стоит пихать, ещё не дорос. Сейчас выбор стоит между Пратой и Кочаном. Какой из них предпочтительнее?
>>1739810 → > Для Си умельцы скорее всего тоже либ уже налепили. Зачастую, кстати, у С-дедов такие библиотеки дают лучшую производительность, чем у С++-миллениалов. Быстрее только на чистом ассемблере. Деды в целом и это могут, но долго это. Поэтому на чистом ассемблере пишут только местами: ту логику/вычисления, которая исполняется 85-99% от общего времени.
Ну и, болтанка в +- полтора кекогерца. Те же пресловутые 5.8 кекогерц опять же были у IBM в те же нулевые в штатном режиме под штатной водой в одном из древних Power.
Как вообще вкатится в эти битовые операции? Я до сих пор не понимаю нахуй оно нужно и как работает. Нет, я конечно могу прочитать определение и понимаю что надо делать, но не понимаю нахуя и зачем, где это вообще применять.
>>1762259 Разработка прошивок, драйверов, виртуальных машин - первое, что приходит на ум. Вся лоу-лвльщина активно юзает битовые операции. Будешь декодировать опкоды - поймешь почему битовые операции иногда мастхэв.
Что почитать, чтобы понять где их вообще и когда применять? Ну вот в том же k&r чуть ли не с первых глав идет это битоебство, причем предполагается, что ты его уже знаешь и знаешь где как применять.
Мб тут сидят челы шарящие за qml, у меня есть stackview приложение, в хедере сделал label с названием текущей страницы, но проблема в том, что пользователь может пойти по такому пути (главная->настройки->темы) а потом возвращаться обратно, и вот чтобы написать сверху корректное название страницы, мне нужно знать какая именно сейчас страница, есть ли возможность это узнать?
>>1762275 Для начала выучи системы исчисления - шестнадцатиричную и двоичную, если не знаешь. Это основа байтоебства. Октальная тоже не помешает, но первые 2 мастхэв, они приоритетнее, особенно на первых порах. Потом выучи все основные битовые операции - AND, OR, NOT, XOR. Пойми что такое LSB/MSB, big/little endian, shift left/right, signed/unsigned числа. Где это применять? Ты это сам решишь. Но я уже перечислил виды софта, где это часто используется.
Пример - у тебя есть 2-байтовое беззнаковое целое число (читай, uint16_t), допустим это число - 1337. В шестнадцатиричной системе это 0х539, в двоичной - 0000010100111001. Допустим, тебе надо извлечь старший байт этого числа, а это 0х05 (или 00000101 в двоичной). Ты должен создать т.н. маску - в данном случае она будет выглядеть так - 0хff00 (в двоичной - 1111111100000000). Затем, ты должен знать true table операции AND, чтобы понять следущее: 0000010100111001 & 1111111100000000 = 0000010100000000. В шестнадцатиричной это выходит 0х50. Чтобы получить из этого желаемый старший байт (0х05), ты должен сделать сдвиг вправо на 8 бит (каждая отдельная цифра в шестнадцатиричной системе - это 4 бита), получится 0000000000000101. 101 в шестнадцатиричной - это 0х05, то бишь 5 в десятичной. Вуаля, из числа 0х539 ты извлек старший байт и можешь его использовать для своих нужд.
Примеров использования очень много, это один из наиболее легких и распространенных. Сначала почитай о тех темах, которые я написал в начале этой простыни, как поймешь все это, вернись к этому после за продолжением, где я извлекал старший байт из двухбайтового числа. Это несложно на самом деле, просто надо привыкнуть.
>>1762259 В жизни наверное нет очевидных примеров чтобы объяснить как сложение на яблоках. В первую очередь приходит в голову комбинаторика - например, битовый set, где каждый бит означает свободно или занято. Сдвигами можно перемещать по местам, можно проверять свободные места, занятые места, проверять по маске конкретные места, сравнивать списки мест, находить свободные/занятые одним/занятые в обоих сетах, считать количество занятых. Дальше у нас трюки связанные с двоичной арифметикой. Ну как мы проверяем четность в десятичной - если оканчивается на 0,2,4,6,8 - четное. Так в двоичной нам достаточно проверить крайний правый бит. Аналогично левый крайний бит обычно означает отрицательное число. А сдвиги - быстрое умножение на степени двойки (как в десятичной сдвиг на 1 цифру это умножение на 10). Фишка в том что это все намного быстрее всяких делений,умножений, в железе. Далее, используется в шифровании, контрольных суммах, псеворандоме, подсчете хэша строк. Тут сложно объяснить, суть в закольцованности чисел (как часовая стрелка закольцована и после 12 снова 1). Т.е. одна и та же операция сделанная много раз подряд похожа на "обход конем шахматного поля", пока все поле не обойдешь числа не повторятся. Далее, в архивации/сжатии, т.е. вообще везде - ZIP, PNG, JPEG, WEBM и так далее. Упрощенный пример - если у тебя только буквы a-z это 26, меньше 32 - влезает в 5 битов. Вот для того чтобы конвертировать поток 5-битных данных в обычные 8-битные байты и обратно, тоже нужны побитовые операции.
>>1762259 >Как вообще вкатится в эти битовые операции? Я до сих пор не понимаю нахуй оно нужно и как работает. Нет, я конечно могу прочитать определение и понимаю что надо делать, но не понимаю нахуя и зачем, где это вообще применять. У тебя есть гугль, вики, СО и хабр. Нет, ты пришел с этим вопросом на борду для анимешниц.
>>1762709 Блин, точно. Спасибо. >>1762710 Задание было про целые числа, ну я и подумал так сделать, ведь нигде кроме целых такое невозможно, без потери точности.
>>1762259 >Как вообще вкатится в эти битовые операции? Я до сих пор не понимаю нахуй оно нужно и как работает.
Смотришь таблицу истинности
& - 1 когда в обоих числах в этом месте 1.
| - 1 когда зхотя бы в однгом или в обоих
^ - 1 когда только в одном из двух, но не в обоих.
Из этого следует, что проверяем битики с помощью &, склеиваем маску из отдельных битов с помощью |. Сами биты -это степень двойки, пушо двоичная система. То есть 1 - первый бит, 2 - второй бит, 4 - третий, 8 - четвертый, 16-пятый итд. Эти числа (степени двойки) ты дефайнишь по смыслу и получается вот всякие вот маски.
>>1762898 >для области где нужны уже кресты Тип там со стороны крестов как-то неудобно конкретно этой библиотекой пользоваться? >на шаблонной магии построено Вангую, без неё тут охуеешь от boilerplate строчек, то есть шаблонная магия - уже требование. >Ну и как бы сама парадигма она про очень YOBA ААА с очень большими бюджетами, где нужна оптимизация. Окей, ну вообще был вопрос про конкретно эту библиотеку. Для использования "большими" она уже сгодится?
Переменные всегда переполняются сбрасываясь в ноль и заполняясь по новой или можно отключить переполнение, чтобы было только максимальное значение в переменной сколько ни прибавляй?
>>1762709 >>1762622 Бля, а нахуя люди такие комменты пишут? Мало того что неправильный термин, так еще и не раскрывающий сути коммент. Если swap еще понятно, что делает функция, то disp - загадка, то ли disposition, то ли dispersion то ли еще что. Раз ты пишешь коммент к функции, то напиши человеческим языком, что делает эта функция, то что это определение функции я и без тебя вижу, дублировать такую информацию ни к чему. Ну а вообще, комменты не нужны, надо правильно подбирать имена, чтоб они сами за себя говорили.
>>1763549 >никто не собирается писать за тебя программу Я не просил писать за меня программу. Процитируй, где именно я об этом прошу. inb4: ты об этом подумал, да
Мне нужна была и, возможно, потребуется (т.к. ещё не проверял свой говно-код) небольшая помощь. Конкретно в том случае - меня смутил указатель на структуру, который нужен только для того, чтобы скормить его функции, принимающей указатели на структуру. В примере он доступен за счёт вложенности. А мне он нужен глобально.
>>1763363 >>1763582 Ты зря кукарекаешь, вопросы не такие уж и энтрилевельные. А вот ты пиздуй в /ра со своей лютой есп-хуетой, тут никто твои говнотулчейны знать не обязан.
>>1763653 Ну ты же в силу своих знаний не видишь, что как такового "main" у программы нет, а независимые хендлеры из других контекстов вызывает httpd (обычно это простой демон). Хоть бы разобрался, что дяди написали в примере, потрейсил.
По той же скромности познаний ты не слышал, что сокет закрывается вместе с соединением и вне обработчика (и процесса) его дескриптор не имеет смысла.
Твое желание идет полностью вразрез логике примера.
Но если тебе хочется собирать открытые соединения, то их можно хранить в глобальном списке за rw-локом. Может быть что-то для этого есть и в фреймворке, но читать доки я не собираюсь. Да, этот вопрос > Тулчейны тут не при чём. исключительно об этом тулчейне. Нужно быть чуть менее резким, если ты сам не можешь поставить задачу и не знаешь как работает либа и пример.
>>1763729 Хоть уже и поздно но почему? Мне интересен как лоулевел си со всеми этими контроллерами, ядрами, драйверами так и кресты со своим многообразием.
>>1763730 Перечитай три поста в цепочке, не ставь C и ядра с драйверами в один ряд. Если C можно освоить за 1к страничек, то к ядру того же линукса ты приступишь только прочитав альманах раз в 10 больше.
>>1763769 >три поста Да ну нахуй, Прата поинтереснее. Как раз 200 страниц осталось добить. Прекрасно понимаю что это только начало и дальше ебаться придётся сильно очень. Но мой план таков: базовый С - C++ до продвинутого левела - устраиваюсь на работку - добиваю C.
>>1763774 >Как раз 200 страниц осталось добить Бротан, пока ты не натрахаешься с сегментейшн фолтами и указателями на указатели указателей, а также требованиями хотя бы одного из стандартов, ни о каком "начальном уровне" не может идти и речи.
>>1763774 Как раз таки лучше сначала добить Си до уровня /списки на макросах/указатели на функции/longjmp-контексты/сигналы/posix-треды. Очень поможет с пониманием того, что происходит в ++.
>>1763786 Пошёл трахаться чё. За всех двачеров сука, парни! >указатели Вообще не ощутил проблем с этой темой. Я нормальный? Какой стандарт наиболее актуальный? Самый последний или какой-то пораньше? И что долго их учить типо? >>1763791 Бля, а что по работе на чистом си? У меня дедлайн 1 год до вката куда-нибудь.
>>1763573 Бля, ну я же пошутил, ну. Сама функция swap реализована предельно ебануто, мне просто доставил сам факт возможности такого. Без временной переменной.
>>1763829 Допустим ты хочешь чтобы программа работала быстро с 8 битными значениями, а в процессоре у тебя 64 битные регистры. Тогда ты берешь int_fast...t, и все работает максимально быстро, но в памяти массив таких значений будет занимать в 8 раз больше места. Если же тебе наоборот важнее место, то берешь int_least...t и компилятор подберет минимальный регистр в который значение влезет. Но там возможны лишние инструкции, типа cbw/cwd/cdq, на преобразование в 64 бита для рассчетов, потом упаковка обратно в 8.
>>1763797 > Бля, а что по работе на чистом си? У меня дедлайн 1 год до вката куда-нибудь. В целом нужно быть спецом в какой-то области, языка одного не хватит. Вакансии обычно такие: мк, linux (системеный софт, сеть, модули). Больше прям "чистого" си нет. Джун должен уже в чем-то хорошо разбираться, работы мало. Вот так что примерно 10 Прат накодить какой-нибудь системно-сетевой хуеты для linux и что-нибудь сможешь, но года точно не хватит.
Да нормальная библиотека, просто ты даже игровую-то логику заебешься в ECS-парадигму укладывать, что уж говорить про сириус бизнес логику вроде всяких там веб-серверов с откликом 0.5мс.
>>1763797 >Бля, а что по работе на чистом си? У меня дедлайн 1 год до вката куда-нибудь.
Покупаешь у китайцев девборду на stm32, учишь тамошний даташит, покупаешь и обмазываешься радиоконструкторами на всяких там бредбордах, пытаешься устроиться или в пыняронку или в прочие гражданские производственные объединения, еще чудом сохранившиеся после совка, по выпуску утюгов "чугуевск", чей гендир уже сыто облизывается на сдать всю хуйню в металл а недвигу - под офисы и склады.
Нужно спешить, пока ты пишешь эти буквы, в раше один красный директор уже пожимает волосатую руку хача трюкача , в то время как грузчики вывозят совковое оборудование (у тех кому повезло в 90е и нулевые и кто сыто мурчали - списанное немецкое) в металлоприемку.
>>1764180 > А дальше куда? Лендинги клепать за 1,5 рубля7 А дальше на работу где платят в несколько раз больше чем на сях, хотя конечно язык не илитный.
В таком случае переучивайся на сисярп и качай Юнити.
С с очень большой натяжкой может быть востребован в мобильном гейдеве - там есть абсолютно незанятая ниша выосокооптимизированных игорь, которые летают на китайских калькуляторах за десятку из салона связи в зажопинске.
>>1764187 Corange тема, правда как мне показался немного тяжеловат для примитивных (что в 90% случаев пишут) 2d проектов. Для 3d вроде гуд. мимо разбирал демку платформера и движок
>>1762275 Насчёт где применять - низкоуровневая математика (быстрый обратный корень Кармака, логарифм целого числа, предпосчитанные таблицы синусов и косинусов через сложение и умножение, правда уже не актуально быстрый модуль...), всё мать его хеширование и криптография (любой хеш алгоритм, кодирование Хаффмана...), низкоуровневая работа с ошибками (при передаче данных например), маски и error коды правда тоже не особо актуально, только если в системщине. Что сразу на ум пришло, а вообще - все на низком уровне делается с байтооебством и оттуда порой вытекает магия высокого уровня, например оптимизации в высокоуровневых языках
>>1764359 >The following code is the fast inverse square root implementation from Quake III Arena... long i; float x2, y; i = ( long ) &y; ... y = ( float ) &i;
>>1754859 (OP) Допустим, у нас есть некоторая библиотека, подключаемая к основной программе, а в ней есть переменная "value". Интерфейсом (API) библиотеки предусматрено только чтение этой переменной. Правильно ли будет в таком случае сделать переменную "value" статической(т.е. изменять её можно будет только в файле библиотеки), а для доступа к ней сделать функцию чтения этой переменной?
Например так:
>/ Внутренняя переменная библиотеки / static uint8_t value = 0;
>/ Функция доступа к внутренней переменной / uint8_t read_value(void) { return value; }
>>1764762 Я не оп, но совершенно правильно. У такого подхода есть еще плюс: в будущем переменная может быть убрана, а функция сможет вычислять обещанное значение.
>>1763709 >Ну ты же в силу своих знаний не видишь >По той же скромности познаний ты не слышал >Нужно быть чуть менее резким Хех, пока читал - мысленно представлял, как ты раздуваешься, набивая текст, а при отправке трещишь по швам.
>Твое желание идет полностью вразрез логике примера. Было бы странно, если бы пример делал именно то, что я хотел, да?
Объясните дебилу, что не нравится этому ебобаному компилятору. Как тут может быть оверфлоу? Я так понял, что -1 не отнимает единицу, а прибавляет 232-1, и поэтому технически получается оверфлоу. Тогда как это исправить, оставив при этом беззнаковый тип?
>>1765153 Короче, нашел проблему. Единица, которая в начале, воспринималась компилятором как signed int. Решил проблему так: static const uint32_t lower = ((uint32_t)1<<MT32_R)-1, upper = ~(((uint32_t)1<<MT32_R)-1); Выглядит отвратно, но хотя бы варнингов нет.
Пацаны, вот есть адресное пространство процесса. Когда мы исполняем уже готовый опкод в С, как логически осуществляется его работа на уровне памяти? Я это как представляю: код исполняется в рамках отдельного процесса, у него есть своё адресное пространство, там лежит сам код, данные программы и её стек. Где тут КУЧА и причём тут КУЧА?
>>1765164 >Единица, которая в начале, воспринималась компилятором как signed int Натуральные константы можно делать unsigned добавлением u или U если это и надо было
>>1765166 >готовый опкод в С Чаво? Опкод - кодировка определенной комманды, которую исполняет процессор определенной архитектуры. После опкода идут, как правило, immediate значения и/или регистры, вместе они формируют инструкцию, например, mov rax, rbx => 48 89 d8, в данном случае, опкод это 48, в которую закодирована команда mov в архитектуре х86-64. Что значит, блять, готовый опкод в С? Ты проверь сначала знаешь ли ты то, о чем ты говоришь. >Где тут КУЧА и причём тут КУЧА? Куча - это отдельно выделенный сегмент памяти для: а) Хранения буферов, размер которых неизвестен во время компиляции. б) Для хранения больших буферов. Попробуй создать массив на 1 гигабайт на стэке, у тебя программа свалится в сегфолт из-за переполнения стэка. Стэк - СТАТИЧЕСКИЙ сегмент памяти, который используются для вызова фнукций (стэковые фреймы процедур определяются как раз там), для хранения переменных окружения и локальных переменных. Куча - ДИНАМИЧЕСКИЙ сегмент памяти, использование которого я объяснил чуть выше.
>>1765166 Куча емнип там же где и стек, т.е. в сегменте данных. Стек и куча могут даже пересечься, т.к. увеличиваются навстречу друг к другу. как-то так, вроде.
>>1765191 Это зависит от ОС, в Линуксе, например, между стэком и кучей есть memory mapped area, куда маппятся все динамические либы (тот же libc) и где выделяется память при системном вызове mmap.
>могут даже пересечься В популярных ОС этого не случится. Размер стэка статичен, а вот при выделении слишком большого кол-ва памяти на куче, если следующая аллокация затронет стэк, то память на куче просто не выделится и malloc вернет NULL
>>1765221 Да я Таненбаума введение читаю, он там нихера про кучу мне не написал пока, только на голову наложил, зато про прерывания от души рассказал по
>>1765047 Давай я еще раз попробую до тебя донести:
> Надо получить дескриптор и заголовок сокета из обработчика прерываний и сделать их доступными для вызова функции httpd_queue_work() из основного цикла программы int main(). В логике сервера main выступает в виде "стартера", сервер вне хендлеров потоки не порождает. Так что где ты хочешь использовать тот мусор, что можно получить, - загадка.
Заголовок (заметь, не сокета, а http-запроса) будет состоять из кучи поинтеров на разные куски буферов, они будут очищены после отработки хендлера в queue. Получаем мусор на выходе.
Дескриптор сокета после отработки хендлера - мусор.
>Было бы странно, если бы пример делал именно то, что я хотел, да? Да, даже более странно было бы, если пример создавал отдельный поток и ебашил queue_work() по невалидным указателям и дескрипторам из собраного мусора.
> Хех ... На вопрос твой никто не отвечал, сам ты усилий никаких не приложил. В ответе по коду ни единого слова, только вот этот перл.
Она получает заголовок и дескриптор сокета из обработчика. Насколько я понял, её можно использовать, чтобы сервер отправлял данные самостоятельно, не дожидаясь сообщений \ запросов от клиента, кроме первого.
>На вопрос твой никто не отвечал, сам ты усилий никаких не приложил. В ответе по коду ни единого слова, только вот этот перл. Я стараюсь, порой безрезультатно.
>>1764836 > У такого подхода есть еще плюс: в будущем переменная может быть убран И минус: в будущем переменная скорее всего не будет убрана, и софт будет тормозить на пустом месте, пока его не перепишут с нуля. А ведь можно было просто сказать "не пишите, будет ой-ой".
>>1765189 >mov rax, rbx => 48 89 d8 >опкод это 48, в которую закодирована команда mov в архитектуре х86-64 Если не знаешь ассемблер, зачем выёбываться? 48 это префикс (REX.W), который обозначает, что следующий за ним опкод будет принимать 64-битные операнды. Опкод (точнее, один из опкодов) mov - 89.
>>1765837 Разница в скорости практически никакая, но подобные стремления все огородить от самого себя никогда не ограничиваются одной переменной.
>>1765967 Не решает проблему. Если у тебя либа, и ты выкинешь __val, то старые версии программ ее не найдут. А если ты контролируешь код, который использует эту переменную, то у тебя вообще проблем нет - встроенный в любую IDE рефакторинг отлично заменит использование переменной на вызов функции. И даже если рефакторинга нет, и ты вимомазохист, ты все еще можешь одними регэкспами справиться.
Читаю каждый пост в двух тредах, отвечаю только если совсем нехуй делать, или если прям непосредственно в день или в неделю в которую читаю вопрос разбирал тему, которой он касается, ну или если вопрос написан ну прям запредельно адекватно (редкость). На высеры вроде пацаны чето не компилица ебанешься... или ахуеть как джейсон валидировать от сука! любому адеквату (и не только) отвечать будет попросту западло.
мимо кресто-барон 7 лет коммерческого опыта, на крестах и сях со школы
>>1766081 >любому адеквату (и не только) отвечать будет попросту западло. Ну да, ну да. Сюда ты зашёл в надежде обсудить теорему Сосницкого-Лавуазье. А тут на тебе, у кого-то что-то не срастается на каком-то уровне. да как они посмели.
ИП после вызова вероятно получит новое значение. Я же правильно понимаю, что конпелятор ЭНИВЕЙ выставит самый высокий приоритет функции, а потом уже распределит остальное?
>>1766327 >что конпелятор ЭНИВЕЙ выставит На компилятор нельзя надеяться. Нужный тебе приоритет нужно обозначать скобочками, как в условиях, так и в арифметических выражениях. Как в нашей конторе говорили дедушки (си-синьоры с большим опытом работы): "На компилятор надейся, да сам не плошай".
>>1766426 Писать то можно, ведь компилятор и не такое сожрет. Но не нужно, потому что тот, кто будет поддерживать твой код, найдет твой адрес и даст тебе люлей за такой говно-style.
Одна из Парадигм Правильного Программирования (ППП) гласит: когда пишешь код, всегда пиши его так, как будто бы человек, который будет работать с твоим кодом, знает твой адрес.
>>1766488 >Евгеньваганыч Я писал пост абсолютно серьезно. > вопрос был не про стиль, а про корректность последней строчки. Мой пост и относится к последней строчке. Написана она через жопу: почему человек, который будет читать твой код, должен догадываться, как компилятор выставит приоритет в условии? Поставь нужные скобочки, чтобы приоритет мог трактоваться однозначно.
В треде есть студенты Школы 21, которых, как я слышал, дрочат на Си? Расскажите, что и как у вас в плане сложности обучения и можно ли вылететь из школы, если нихуя не социализированный хиккан
>>1766515 Подумай пчел, это для совсем необучаемых дебилов. И туда как бы идут всякие дядьки по 32-35 лет без образования, я не шарю но думаю ты там не в своей тарелке будешь. Ну и если бы ко мне на собеседование хрюшка (особенно если бы мне нужно было найти си-тварь) привела пчеленсона и он бы представился как ученик школы 21 я бы ему сразу сказал эм ну нам надо подумааать))
>>1766531 >привела пчеленсона и он бы представился как ученик школы 21 я бы ему сразу сказал эм ну нам надо подумааать)) Што, прямо вот так бы и сказал: "эээм хрю мня пуук мне нада падумать))))". А если бы это был бы ученик Академии ШАГ тоже бы так ответил?
>>1766426 >можно ли так писать и почему? (4). Unlike the bitwise binary & operator, the && operator guarantees left-to-right evaluation; there is a sequence point after the evaluation of the first operand. If the first operand compares equal to 0, the second operand is not evaluated.
>>1766537 >(4). Unlike the bitwise binary & operator, the && operator guarantees left-to-right evaluation; there is a sequence point after the evaluation of the first operand. If the first operand compares equal to 0, the second operand is not evaluated. А можно теперь человеческим языком?
>>1766539 Выражения между &&(и ||) вычисляются слева-направо, если одно не соответствует условию, то следующие не вычисляются. Т.е. эта хуйня: if (a && ⚹a==100)) printf("a==100!"); эквивалентна: if(a){ if(⚹a==100){ printf("a==100!"); } }
>>1765992 > А если ты контролируешь код, который использует эту переменную, то у тебя вообще проблем нет - встроенный в любую IDE рефакторинг отлично заменит использование переменной на вызов функции. И даже если рефакторинга нет, и ты вимомазохист, ты все еще можешь одними регэкспами справиться. Испанский стыд, достаточно макрос переписать.
Понятно что если кто-то соберется в дин.библиотеке менять символ, то придется проект пересобрать с новым хедером, от этого никак не уклониться. Ну а если либа идет как часть релиза или подсистема сорцов, то используется данный подход.
Вообще вот если переменная интенсивно используется юзер-кодом и не поддается передаче юзеру (т.е. меняет состояние между вызовами из одного потока) - она разделяемая, такими обычно бывают всякие спинлоки и счетчики. Спинлоку можно почти без оверхеда предоставить функциональный интерфейс, а счетчик должен иметь интерфейс без функции. Лучше не иметь подобных объектов в либе, в остальных случаях обычно используется функция, не всегда скрытая макросом.
>>1754859 (OP) а есть толковые книги на русском? я инглиш ниасилил, патамушта я ватан и топлю за славянский софт, мечтаю купить русский комп, на эльбрусе и накатить туда астру, двигать вперёд отечественную айти индустрию, назло врагам и на зависть недругам, ибо за державу обидно, да, но вот заковыка: нужно знать Си, а с инглишем беда, да и боюсь я, что изучение инглиша пошатнёт мои внутренние скрепы и порушит патриотизм, как мне быть, аноны? я реально боюсь, накидайте ссылок, как изучить Си на моём великом и могучем великорусском языке
>>1766647 на 1С операционные системы не пишут ( а Си на инглише, это ставит меня перед дилеммой: я хочу помочь Родине, но для этого нужно знать годный ЯП, то есть Си, а в то же время я не хочу учить инглишь, потому что я его плохо усваиваю, да и не хочу подрывать свой патриотизм чтением иностранной литературы и слушанием вражьих голосов, мне комфортно среди родных берёз и осин, а все изучавшие инглиш хотят на чужбину, рисуют поросёнка и читают "пора валить"
>>1766655 тяжело даётся мне эта вражина, душа к нему не лежит, и слова всё хитрые, читаются не так, как пишутся, бесовщина сплошная, как из Земля матушка терпит окаянных я хотел было побырому выучить, но быстро из меня это выветривается, видать отторгает её моё нутро русское
>>1766665 Я ночи насквозь спать не буду, последнего здоровья лишуся, но… — и, скрипнув густыми мелкими зубами, докончил: — язык этот выучу! На английском языке буду без нежностев гутарить с мировой контрой! Пущай гады трепещут заране!
>>1766668 > язык этот выучу! На английском языке буду без нежностев гутарить с мировой контрой! Пущай гады трепещут заране! Кончен разговор, Нагульнов! Решением бюро ты исключен из наших рядов. Такие вы партии не нужны. Клади сюда партбилет!
>>1766493 >почему человек, который будет читать твой код, должен догадываться А он не должен догадываться, евгеньваганыч. Он должен стандарт знать (тебя, кстати, это тоже касается). А на каждого неграмотного уебка никакой мисры не напасешься.
>>1766599 >Учи английский, Зачем мне учить англо-саксонский нахрюк? Мне хватает и русского. >ведь авторы Си говорят на нем Авторы говорят на одном языке, пользователи - на другом.
>>1766710 >А он не должен догадываться, евгеньваганыч. Он должен стандарт знать Ну как бы понятно, что раз человек пишет на языке Си, то он его знает. Но такие вещи разные компиляторы компилируют по разному, и допускать их в коде нельзя, иначе это будет говно-код, работающий только с конктретным компилятором. >(тебя, кстати, это тоже касается). С чего бы это? Я знаю язык Си. >А на каждого неграмотного уебка Неграмотные уебки это те, кто пишет код как на пикче, руководствуясь при этом правилом: "Компилятор не ругается, значит хороший код! Как трудно в нем разобраться? Ничего не знаю, стандарту языка он соответствует." Код должен быть понятен людям в первую очередь, а не компилятору. >никакой мисры не напасешься. Некоторые из их правил вполне не мешает вшить в компилятор, имхо. Хотя большая часть правил не нужны, например, запрет адресной арифметики.
>>1766722 >Но такие вещи разные компиляторы компилируют по разному В своих маняфантазиях можешь компилировать, как угодно, петушок, а вот реальные компиляторы обязаны компилировать вполне определенным образом. А ты ведь, я смотрю, совсем необучаемый: тебе уже за меня и цитату из стандарта приволокли >>1766537на которую я и байтил собсно, а ты все кудахчешь об своих конпиляторах за каким-то хуем. >Я знаю язык Си Ты его не знаешь. >не нужны, например, запрет адресной арифметики Ты троллишь тупостью, ясно.
>>1766736 Он прав. Языку больше полувека. Есть стандарт, там написано, как какие выражения обрабатываются, если компилятор реализует это как-то иначе, чем как описано в стандарте, то это уже не компилятор языка С. Но для такого примитивного сценария это невозможно, лол, особенно если ты используешь что-то вроде кланга или гну с компилера. А в стандарте указано, что есть ровно четыре операции, операнды которых всегда вычисляются слева направо: &&, ||, ?: и запятая (но именно оператор, а не сепаратор, т.е. не в объявлении аргументов функции, например). Я это знаю, потому что я очень внимательно читаю k&r, и вам советую
>>1766733 Компиляторы ничего не обязаны, кроме стандарта. Стандарт = конечное множество правильных вариантов кода + конечное множество неправильных вариантов кода (где все конпеляторы должны печатать error/warning). А вариантов говнокода - бесконечное множество. Бесконечное множество МИНУС два конечных множества РАВНО все еще бесконечное множество UB. И если реализации двух разных компиляторов хоть чем-то отличаются друг от друга, где-то 100% вылезет разное UB. мимо
>>1766639 >а есть толковые книги на русском? Все основные книги уже давно переведены на русский: керниган ричи(все 3 издания), справочник шилдта, пратта и т.д. >>1766652 Английский знать не надо, в Си нужно только запомнить ключевые слова, их там всего с десяток: main, if, else, while, for, switch, case, break, return, continue(континюе).
>>1767617 скобками надо засерать в любом случае, потому что тот, кто читает код, должен его просто блять ЧИТАТЬ, а не напрягать извилины, вспоминая operator precedence всего и вся. Не выебывайся и не говнокодь, пчел, код должен быть максимально понятен.
>>1766733 >В своих маняфантазиях можешь компилировать, как угодно, петушок, а вот реальные компиляторы обязаны компилировать вполне определенным образом. Только основу языка(которая изложена в K&R). Но есть и некоторые вещи, которые компилируются в каждом компиляторе по разному: размер unsigned char, int, long int в битах, распределение битовых полей в памяти, приоритет логических и арифметических операций и т.д. Тот же стандарт MISRA C рекомендует избегать таких операций, которые зависят от компилятора. >Ты его не знаешь. Я его знаю. У меня несколько лет опыта работы, за которое я разработал ПО на языке Си для множества микропроцессорных устройств, работающих в медицине и промышленности. При этом я не читал ни K&R, ни стандарты(потому что на это не было времени из-за работы). Я познакомился с языком сначала не лекциях преподавателя, потом по книжке, которая называлась примерно "Учим С++ за 21 день(не помню точно на звание", и по справочнику Шильдта(который представляет собой почти дословный перевод K&R). А вот ты, походу, борщехлеб, котоырй сидит на шее у мамки и читатает разные стандарты и K&R, и мнишь себя большим знатоком Си. >не нужны, например, запрет адресной арифметики >Ты троллишь тупостью, ясно. Обоснуй. Я действительно считаю, что в арифметике указателей нет ничего плохого и её вполне можно применять.
>>1766746 >А в стандарте указано, что есть ровно четыре операции, операнды которых всегда вычисляются слева направо: &&, ||, ?: и запятая А в стандарте указано, как вычисляются операнды ">=, <=, ==, >, < "? И раз ты знаешь k&r и стандарты, то, будь добр, ответь еще на пару вопросов, мне правда интересно. А в стандарте указано, как компилятор распределяет битовые поля в памяти? А в стандарте указано о распределении приоритета между арифмитическими операндами(+, -, *, /, &, |, ^).
>>1768012 А про то что умножение выполняется раньше сложения тоже надо таким чудо читателям объяснять? Надо просто знать язык, а не превращать программы в (((лисп)))
>C++ содержит средства, позволяющие программисту нарушать заданную в конкретном случае дисциплину программирования. Например, модификатор const задаёт для объекта свойство неизменности состояния, но модификатор mutable предназначен именно для принудительного разрешения изменения состояния внутри константного объекта, то есть для нарушения ограничения константности. Более того, допускается динамически удалить атрибут const с константного объекта, превращая его в леводопустимый (L-value). Наличие в языке таких возможностей делает попытки формальной верификации кода бессмысленными, а использование ограничений для оптимизации невозможным. SOOOQAAA BLYAAAAD
>>1768211 > А в стандарте указано о распределении приоритета между арифмитическими операндами(+, -, *, /, &, |, ^). Да, приоритеты фиксированные и кроме побитовых операторов - даже логичные. Гуглишь такой C operator precedence chart, там все будет. Естественно, для операций с одним приоритетом порядок вычисления не определен.
> А в стандарте указано, как компилятор распределяет битовые поля в памяти? Да. Как ему больше нравится.
>>1768216 Да, есть. Минимальные размеры и соотношения между размерами. Возьми и сам посмотри.
>>1768222 Зависит от устройства, для каждого разное IDE. В зависимости от микропроцессора и микроконтроллера используются разные IDE для разных семейств процессоров (Keil, Atmel Studio), у ПЛК и панельных компьютеров свои собственные IDE, поставляемые производителем на диске. >Бодьшие объёмы у программ? Что ты имеешь ввиду, размер прошивки? Разные бывают, от пару килобайт для небоших контроллеров до десяти мегабайтов для ПЛК.
>>1768352 > А в стандарте указано, как компилятор распределяет битовые поля в памяти? >Да. Как ему больше нравится. Выходит, что этот анон >>176673 не прав? И есть вещи, которые каждый компилятор может реализовать по-своему?
>>1766722 >Но такие вещи разные компиляторы компилируют по разному >>1766493 > Мой пост и относится к последней строчке. Написана она через жопу: почему человек, который будет читать твой код, должен догадываться, как компилятор выставит приоритет в условии?
Человек на полном серьезе считал что if (a && *a==100) может как то по разному скомпилироваться.
>>1768260 Язык(тот который изложен в книге K&R) знают все разработчики и все компиляторы трактуют его одинаково. А вот остальные его диалекты-наследники (С89, С99, С11) также поддерживают K&R-Си, а в остальном отличаются. Вот ты точно читал и выучил стандарты C89, C99, С11 и знаешь, в чем они отличаются? Поэтому проще не использовать в программе операции, которые разными компиляторами и диалектами могут изменяться по разному.
>>1768426 Посмотри всю дискуссию. Дальше некоторые аноны >реальные компиляторы обязаны компилировать вполне определенным образом. > Есть стандарт, там написано, как какие выражения обрабатываются, если компилятор реализует это как-то иначе, чем как описано в стандарте, то это уже не компилятор языка С. начали утверждать, что язык Си должен компилироваться всеми компиляторами одинаково, а вещей, которые каждый компилятор может компилировать по-разному - нет.
>>1768450 Чел, если бы это было так, то компьютеры вообще не работали бы. Порядок проверки в && это фундаментальная вещь. Иначе бы у тебя всякие разыменовывания NULL происходили до проверки что это не NULL.
>>1768181 >несколько лет опыта работы >не читал ни K&R, ни стандарты(потому что на это не было времени из-за работы) Ебаная макака-байтоеб ты, вот кто. Несколько лет — это ни о чем, студентишка или аспирантишка тупорылый. Как тебя приняли на работу без знания стандартов, фантазер?
Non-maintainer upload by the LTS team. CVE-2018-1152: Denial of service vulnerability caused by a divide by zero when processing a crafted BMP image in TJBench. CVE-2018-14498: Denial of service (heap-based buffer over-read and application crash) via a crafted 8-bit BMP in which one or more of the color indices is out of range for the number of palette entries. CVE-2020-13790: Heap-based buffer over-read via a malformed PPM input file. * CVE-2020-14152: jpeg_mem_available() does not honor the max_memory_to_use setting, possibly causing excessive memory consumption.
-- Adrian Bunk <bunk@debian.org> Wed, 29 Jul 2020 08:53:14 +0300
Предлагаю репортить всем тредом эту аватарку анимешную. Разводит срачи, флеймит и троллит в C/C++ треда и бох знает где еще. Причина: аватарка, не релейтед, флейм, троллинг, итд
>>1768675 >петухану настолько бомбит, что он бегает выискивает эту аватарку с тремя постами по всему двощу Лол. Какой же ты жалкий. Аватарка тебя по делу унижала.
>>1768686 П Р И М Е Ч А Н И Е Возможно, вам потребуется, чтобы программа всегда генерировала новый набор случайных чисел при каждом запуске. Такая рандоми- зация нужна при создании игр, однако многие симуляторы и научные исследования подразумевают повторение одних и тех же случайных чисел. Функция rand() предоставляет как раз такой функционал, если вы не задаете семя генератора случайных чисел.
Кстати, анончики, что получится при вычислении выражения С/С++ (в С18)? Имеются в виду варианты, когда оно скомпилируется. >>1768894 В принцыпе можна и наоборот. Чтобы проц в тибя кончил. Незабудь переодеться в девочьку, анончек.
>>1769331 > Что дальше учить, анончи? Дальше учить все. Предметную область. Учиться писать код под линупсы, виндовсы: POSIX, Windows API, сети и существующие подходы для неблокирующего IO, многопоточность, на OpenMP посмотри хоть издали, SIMD-интринсики и как заставить компилятор высирать что-нибудь вменяемое без них, драйвера хоть чуть-чуть, всякие libusb, CMake, куда же без него. Алгоритмы/структуры данных не забудь, хотя бы кейворды узнай, чтобы потом под задачу гуглить. Напиши со всем изученным несколько качественных хелловорлдов. Потом можешь отладочную плату с микроконтроллером взять поиграться, тот же самый путь, посмотри на пару ртосов. После этого у тебя в гитхабе будет, что показать, ты пойдешь на hh, а там нихуя нет вакансий для тебя.
>>1769403 Так это же самая сермяжная мужицкая параша, а не передний край. Как раз для хлебушков.
Хули там в твоих кококонтроллерах? Прописал регистры, как макака, и все, хуже даже, чем в жс. И общаться ты там будешь, скорее всего, с нешарящими и тупыми постсовковыми долбоебами-радиолюбителями, если на хедхантере собрался искать (просто нешарящими - это программа-минимум и уже удача; обычно они не просто не шарят, у них еще и куча каких-то извращенных поверий и маняфантазий по теме, и все это на фоне просто запредельных ЧСВ и токсичности). Оно те надо?
Тру - это машобчик, ООП, графика, игры, софтвер инжиниринг.
>>1769421 Энивей веб я послал через 2 часа чтения синтаксиса жса. >машобчик, ООП, графика, игры, софтвер инжиниринг. Вкачусь хотя бы на минимум лоу левела и пойду в плюсы.
>>1768555 >Ебаная >фантазер? >тупорылый. Борщехлеб, не гори. Тебе просто завидно, что я работаю, получаю деньги, кормлю семью и родителей и у меня есть опыт работы, а ты сидишь дома на шее мамки, никому не нужный на рынке труда, зато со знанием стандартов. >макака Я не макака, я пишу довольно качественный код, соответствующий во многом MISRA C. >байтоеб Так то любого, кто пишет на Си можно назвать "байтоебом", потому что это low level язык, в отличии от языков высокого уровня, и он подразумевает непосредственную работу с байтами и регистрами. >Несколько лет — это ни о чем, студентишка или аспирантишка В айти за несколько лет можно до миддла дорасти, тут то же самое. Зависит от человека, можно и 10 лет чаи гонять и остаться на уровне студентишки, а можно за пару лет саморазвиваться и стать нормальным специалитом. >Как тебя приняли на работу без знания стандартов, По собеседованию, посмотрели оценки в дипломе и позадавали вопросы по теме. К тому времени я сделал множество pet-projects на мк(не ардуино) на тысячи строк кода, поэтому я безпроблем смог ответить на вопросы. Также в вузе обучали этому очень хорошо. Ответь, зачем нужно знание стандартов? При том, что я знаю язык Си (тот, который k&r), а разные штуки, а компиляторо-зависимые операции в коде я не использую?
>>1769882 > качественный код > соответствующий во многом MISRA C Выбери что-то одно.
> а компиляторо-зависимые операции в коде я не использую А откуда ты знаешь, что не используешь? Откуда ты знаешь, что у тебя в коде не UB на UB сидит и UB погоняет?
>>1769882 >завидно, что я работаю, получаю деньги, кормлю семью и родителей и у меня есть опыт работы Да вообще единственный тут молодец у мамочки. Ты забыл упомянуть, что еще у тебя есть крыша над головой, что надеть и деньги на проезд, лолка. >за несколько лет можно до миддла дорасти Да за несколько лет до мидла даже неграмотное колхозное чмо дорастет (такое, как ты). >на мк(не ардуино) А чем тебе не угодил ардуино? Они там такие же, как ты, неграмотные школьники, не шарящие в стандартах и творящие всякую хуйню в своих либах. Хотя, с другой стороны, "тру-мк"-байтопетухи ничуть не лучше зачастую. зачастую они еще хуже >на тысячи строк кода Это тип многа что ли? Кек. Десяток тыщ строк - это мелкий проектик. А если на тыщу - это вообще на пару вечеров крошечная хуитка. >в вузе обучали этому очень хорошо Заметно, как тебя обучали в пидорахенской шарашке. Даже инженерную культуру не привили.
>>1769882 >вузе обучали этому очень хорошо. Что за вуз то? обычно ойтишники хают во. >пару лет саморазвиваться и стать нормальным специалитом. Нихт, нормальным специалистом варясь в собственном дерьме не станешь.
>>1770015 >Нихт, нормальным специалистом варясь в собственном дерьме не станешь. Почему же? Подпердываешь кодом каким-нибудь норм опенсорцным проектикам, правишь баги, и збс. Все лучше, чем поделки васянов в говноконторах дрочить.
Ну вот тебе общепризнаный бумер-король байтоёбства, причем именно апологет няшной? купивший себе феррари в начале 90х, а в нулевых решивший запустить за долго до маска ракету в космос.
>>1766375 >Как в нашей конторе говорили дедушки (си-синьоры с большим опытом работы): "На компилятор надейся, да сам не плошай".
У си-сеньеров-дедушек типичная формула решения проблемы - работает не трожь. Доходит до смешного - вместо того, что бы исправить UB в коде деды-пердеды будут держатиь виртуалки с досом с древним компилятором борланда, орать на джунов, ПОСМЕВШИХ скомпилировать новой версией GCC и менторским тоном ЗАПРЕЩАТЬ.
То, что дрочево на стандарт С - это как раз новое, зумерско-хабро-троле-дващерское веяние, с поиском UB по кроватью, выстраданное годами траленка байтолюбов и полыхания жоп.
Диды как раз с размаху стреляли себе в ногу, верили в карго-культ конкретной версии компилятора конкретного производителя, и вычисляли обратный квадратный корень через UB.
>>1770874 >>1770899 Там же написано - "evil hacking". Т.е. автор знал, что это плохо и не по стандарту. Так что твои маняфантазии мимо, зумерок. Диды ведь все эти стандарты и понаписали, между прочим.
Если знал что тупо плохо, почему не использовал корректный вариант с union, мм, уёба?
Да потому что насрать дидам было, зумерок.
Они стреляли в ногу, верили в рассово верную версию компилятора и токсично пердели про КОКОКО ЛАМИРА НИПАЙМУТ ПШЕЛ НАХ МЫ ИЛИТА ТРОГАЕМ БАЙТИКИ АХАХАХА в эпоху своей молодости, тщательно оберегая свои САКРАЛЬНЫЕ ЗНАНИЯ.
А прохладных кулстори про свою жопоболь от разработчиков на гамасутре - не видим. А ведь как раз данные платформы тот самый случай где возможно соснуть BIG ENDIAN.
Зато есть постмортем-батхерты от разработчиков эмуляторов этих платформ:
А вот портируемо как раз вполне, лонг и флоат на большинстве платформ будут иметь 32 бита, а такой платформы, что бы у float и long32 был бы разный порядок байт попросту нет.
>>1770971 В любом случае, не на всех же платформах вроде был IEEE 754? Помню сталкивался с каким то компом где знак был между мантиссой и экспонентой, значит этот васяношифт не сработал бы.
Причем лал был в том что в первую халву на s3 играть было можно, в усмерть джамперами разогнав проц и мать (на особо кошерных матерях до аж 500 мгц на второпне, лал).
>>1771009 Кармак ЭКСАЙТЕД с любой херни, связанной с программированием, он и про хачкель так же говорил. А потом пишет на плюсах, ибо в мире реальном альтернативы нет. Вангую: и не будет.
>Типикал растопидор: >Переписать бы %projectname% на расте >97.9998% unsafe >КОКОКО РАЗД ПАБИДИЛ СИ >В чем разница между явной и неявной безопасностью? Я не знаю и мне не нужно
>>1770979 Есть. Называется strict aliasing. long и float не совместимы, behavior is undefined. На самом деле раньше так писали потому, что раньше компиляторы aliasing analysis не делали, и поэтому никаких ног таким образом не повреждалось.
>>1770874 >годами траленка байтолюбов и полыхания жоп. Причем тралили и поджигали жопы им вовсе не хаброзумерки, а собственные же баги этих байтоебов из-за незнания стандарта и плохого кодирования.
>>1769977 Всё, что есть в "k&r" стандарт по дефолту выполняет. Обратное утверждение не верно. Версии стандарта (C89, C99, С11) отличаются между собой, но всё, что написано в k&r они выполняют.
>>1769959 > качественный код > соответствующий во многом MISRA C >Выбери что-то одно. Чем тебе MISRA не нравится? Я её прочитал, но не фанатично использую все правила, а разумно. >А откуда ты знаешь, что не используешь? Откуда ты знаешь, что у тебя в коде не UB на UB сидит и UB погоняет? Потому что я следую(в том числе), тем правилам тем правилам MISRA, которые запрещают в коде использовать UB. Использую stdint.h, тела функций и операторов заключаю в фигурные скобки, приоритет операций логических и арифметических указываю скобками, знаю, что битовые поля компилятор распределяет в памяти, как хочет, и т.д.
>>1769421 >Так это же самая сермяжная мужицкая параша, а не передний край технического прогресса. Как раз для хлебушков. И общаться ты там будешь, скорее всего, с нешарящими и тупыми постсовковыми долбоебами-радиолюбителями Ну дык нечего торчать в Барнауле >куча каких-то извращенных поверий Типа каких? мне чисто поржать >Тру - это машобчик, ООП, графика, игры, софтвер инжиниринг. <<<
>>1770006 >не шарящие в стандартах Выучил стандарты и выёбывается. Иди ка ты на хуй, борщехлеб, со своими стандартами и K&R в очко себе затолкай. мимо C Embedded Senior
>>1771695 Зенки распахни свои и извилину напряги. Он имел в виду, что ты соблюдаешь мисру не полностью, дебил ты ебаный, там же курсивом выделено. Тебе с такой внимательностью не то, что адресную арифметику - тебе, сука, структурку страшно давать.
>>1771695 > потому что я следую(в том числе), тем правилам тем правилам MISRA, которые запрещают в коде использовать UB. Но поскольку стандарт ты не знаешь, то и не знаешь что такое UB, а значит в коде у тебя он вполне может быть.
>>1771701 Какой пет-проект забабахать, который дал бы мне неплохой начальный буст знаний в эмбедщине? Нужно ли настолько же глубоко нырять в железо, насколько я уже нырнул в софт? Мимо вчерашний студент камплюхтер сцаенс, есть несколько околобайтоебских пет-проектов на крестах и Сишечке (пока больше на крестах), относительно хорошо знаю Linux internals
https://pastebin.com/ikSgD2Kv Чому в этой форме всё работает, но если заменить > const char msg[] = "Try again, please.\n"; на const char *msg = "..."; то вместо нужного предложения выводится его обрубок?
>>1771754 Если ты хочешь вывести на экран, то не должно быть такого (только если ты не пытаешься вывести строку с пробелами, которую вводил через scanf, ибо scanf перестает читать после пробела)
>>1771695 >тем правилам тем правилам MISRA, которые запрещают в коде использовать UB А разве есть где-то правила, которые разрешают использовать в коде УБ?
>>1771712 >Зенки распахни свои и извилину напряги. >дебил ты ебаный, >сука Со своими родителями так разговаривать будешь, шлюха ёбаная. Если есть что-то сказать по-факту - говори, а если тебе кроме оскроблений сказать нечего, то пошёл нахуй. >Он имел в виду, Ты тоже будь повнимательнее и посмотри в моём посте, что те правила, которые запрещают использовать в коде операции, зависящие от компилятора (UB то есть), я использую все. А применять все без исключения правила MISRA C не стоит, там слишком много лишнего и получится говнокод. >Тебе с такой внимательностью не то, что адресную арифметику - тебе, сука, структурку страшно давать. Ага, то бишь, если я не разглядел стиль написания буковок в нескольких словах(которые и правда почти не заметны, если быстро читать), то я плохой разраб. Отличная логика. Повторюсь, если тебе печет и кроме оскорблений и траленка сказать нечего, то съеби.
>>1771795 Нет. Есть, которые запрещают. Которые разрешают нет. А есть, которые никак не относятся к UB вообще(например, запрет адресной арифметики, или правило, согласно которому в функции может быть только один return.
>>1771725 >Но поскольку стандарт ты не знаешь, то и не знаешь что такое UB Нет, знаю, ведь я читал misra c и знаю язык си(читал k&r). Оно обозначает логику, которая каждым компилятором может трактоваться по разному. Например, компилятор может размещать битовые поля в памяти как захочет, это нужно учитывать. Или, скажем, в разных компиляторах величина unsigned char, long char и long long char может быть в битах разной величины, поэтому вместо них следует использовать типы, обозначеные в библиотеке stdint.h. >, а значит в коде у тебя он вполне может быть. Конечно, от ошибок на 100% никто не застрахован, но я стараюсь не применять UB в коде.
>>1772016 Чел, ты говоришь о Implementation Defined, а не о UB. UB не связано с компилятором, оно связано с семантикой языка. А семантика языка определена стандартом (а не фанфиком на тему.) (Как выражение "Косил косой" не имеет одного определенного значения, хотя и написано без синтаксических ошибок.)
>>1771751 >Мимо вчерашний студент камплюхтер сцаенс, есть несколько околобайтоебских пет-проектов на крестах и Сишечке Есть предположение, что ты не знаешь ассемблер. Если это так, то можно сделать один или два проект на асме, чтобы ему научится. Например, на микрокотроллере (8 битном/32-битном) сделать устройство, которое будет на SD-карту записывать освещенность в комнате в течении дня (высчитывать средне-квадратичную величину освещенности для каждой минуты в сутках). Без файловой системы. Придется читать datasheet на мк и смотреть набор команд ассемблера там же. Так же стоит придется подрубить датчик света и часы-RTC, если они не встроены в сам МК. Потом можно возвращаться в Си. Асм пригодится для ассемблерных вставок, оптимизации кода + сможешь написать свой компилятор. С ардуины, как советует этот анон - >>1772002 начинать не стоит, иначе так и останешься на уровне ардуинщика.
>>1771751 Не слушай вот этого >>1772044 пердуна. Никакой АССемблер тебе не нужен, у контроллеров уже давным-давно куча оперативы, частоты под сотню МГц и кресты с STL в компиляторах.
Лучше купи роутер, накати туда openwrt и в ней ковыряйся.
>>1772016 >я стараюсь не применять UB Еще бы ты, сучара, осознанно его лепил. >>1772010 Шлюха ебаная - это твоя жена, когда тебя дома нет, пидор ты нестандартный ))) Если ты глаза свои в жопу свою засунул и не видишь ни хуя, то ты плохой разраб, маня. ) >>1772016 >long long char long long short int как тебе?
>>1772077 >Лучше купи роутер, накати туда openwrt и в ней ковыряйся. Лол, я изначально и начал изучать си, из-за бугурта что не могу элементарно домашнюю сеть настроить, ибо хз как оно там работает на
Мне кажется эта чепуха из школы 21 уже сама верит в ту хуйню что пишет))) причем ладно похуй, бывает ньюфаги начинаются мифов про лоу левел язык и начинают срать в каждый тред, но откуда он блджад эту хуйню про стандарт нинужон вычитал?
Скоро заканчиваю прату, начал читать c++ primer plus. А там, с первых же страниц: >..you need a sound background in standard C,... . So if you already know C,you’re poised to learn C++. .. >If you don’t know C,you have to master the C components..
ОРУ сука с трупошизиков, ну как же так, чудес не бывает, какая грусть ёбана
>>1772203 Кокой молодец и гринтекстом попукал, и боевую картиночку с анимэ запостил. Можешь теперь пойти похвастаться мамке, как ты "всех победил" в интернете.
>>1772197 А чтобы выучить Си нужен бэкграунд в ассемблере. А чтобы выучить ассемблер нужен бэкграунд в микропроцессорной технике и цифровой электронике.
Мдаа. Классно стандарто-петуха обоссали всем тредом. Эта манька даже не знает, что есть 3 стандарта языка си (С89, С99, С11) и сомневаюсь, что он полностью выучил хотя бы один из них.
>>1772044 >начинать не стоит Сама концепция ардуины действительно уёбищна, но не с армов же начинать. А то там от одной инициализации периферии можно охуеть.
>>1772077 >STL В МК никогда не используется. Ну может быть в каких-то жирных бордах с лунухом на борту, но я таких не видел. А так даже сишная либа часто кастрированная идёт. >кресты Очень ограниченно, в виде С с классами.
>>1772212 >но не с армов же начинать. Там анон говорит, что умеет на асме прогать под x86 и ARM изучает. Зачем ему начинать с таких пустяков, как AVR или 8051?
>>1772212 >А то там от одной инициализации периферии можно охуеть. Можно кубиком все инициализировать, а работать через HAL - даже datasheet не придется читать.
>>1772209 Да он сам говорит же, что ему вообще никакой не нужен, только K&R-фанфик. И MISRA он тоже не уважает. >>1772212 Ты не поверишь, но для АРМов тоже есть ардуина. >в виде С с классами Такие, как ты, может, и не пользуются шаблонами. Но нормальным людям они серьезно упрощают жизнь на МК.
>>1772237 Если таких, как я, будут убивать, кто же будет гуглить за таких быдлодолбоебов, как ты, а, быдлодолбоеб? Что ж ты ебан-то без гугла, нахуй, сука!
>>1772209 > есть 3 стандарта языка си (С89, С99, С11) Во-первых, четыре, хоть в последнем и нет никаких нововведений. Во-вторых, они друг друга расширяют, а не заменяют. Из ломающих обратную совместимость изменений только удаление gets и старых способов объявления функций, то есть убирание за собой pre-K&R говна, которое и в C89-то не должно было попасть.
>>1772218 > K&R-фанфик Первый официальный стандарт языка (C89/90) создавался на основе первого издания K&R. K&R писался, сюрприз, совместно с Ричи, поэтому странно называть его фанфиком.
> И MISRA он тоже не уважает. Наряду с рекомендациями, которые подходят для Си в целом, в MISRA полно рекомендаций по написанию непортируемого, нечитаемого и нерасширяемого кода для заранее выбранной железки с заранее определенными функциями. MISRA сознательно жертвует качеством кода в угоду большей надежности.
Если нужно, чтобы работало быстро и для широкого круга применений (пишем обычную либу под десктопы или мобилки) - MISRA точно не вариант. А вот если надо, чтобы после правок кода вчерашим студентом, который даже K&R не осилил, железка за полтора ляма не взорвалась и никого не убила, тогда обязательно нужен какой-либо стандарт "безопасного" кода со всеми перегибами типа скобок в (a * b) - (c / d), и, конечно, с отсутствием маллоков и прочей адресной арифметики. Но от необходимости ревью не избавляет даже MISRA.
>>1772260 Не пойму, а как можно отказаться от адресной арифметики? Вот допустим, нужно написать функцию, которая будет делать сортировку массива. Как здесь обойтись без адресной арифметики.
>>1772263 Этот пункт, вроде, запрещает смешивать указатели с доступом по [], а так же арифметику с указателями (потому что там часто объебываются, либо прибавляя не тот размер, что думают, либо вообще из за неправильных скобочек думают что арифметика с содержимым, а на самом деле с указателем), кроме инкремента/декремента.
>>1772240 Поздравляю, ты уретральник. В просторечии "охуевший". Эгоизм, упрямство, спесивость, желание доминировать, соревновательность, амбициозность либо потянут тебя к достижениям, либо сделают невротиком. Ну, если повезёт, то получится это компенсировать без особого вреда для себя и окружающих.