Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный 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 помогает читать сложные сишные декларации.
>>1818303 Похоже что тут орудует два долбоёба. Одного я не заставл, а второй первым отметился в этой теме. Не обращай внимаение - это информационный шум от детишек, считающих что они познали Си.
>>1818156 (OP) Динамикомакака (жс+питон) пожаловала в ваш тред Объясните плез, как обходитесь без неймспейсов? Вот если куча "импортов" (include .h-файлов), то как блять в этой мишуре разобраться?
>>1818880 Компилятор с библиотеками, документацией, примерами и готовой собранной программой типа хелловорлда. Всё вместе 2.5 МБ. Могу скинуть если надо.
Ребята, а если я открываю файл в одной функции, редактирую в другой и закрываю в мейне, я совсем долбоёб или ещё есть надежда? Вывожу из функции через параметр, т.к. return занят. Что я делаю не так, адреса скачут при переходе из функции в функцию. Втолкуйте бездарю, а то всю ночь уже сижу за этим говном, ничего не соображаю. на первом пике вывод, на втором функция чтения, на третьем как это всё в мейне выглядит. Ломается при попытке записи в файл, очевидно что адреся не те, а как те сделать? Да я ещё не умею тут дебагом пользоваться, поэтому смотрите на мои художемства. Надеюсь на то, что более-менее понятно изложил суть, и на вашу помощб, о мудрые жрецы
Ты присваиваешь аргументу Fil) указатель на локальную переменную, находящуюся в стеке. При выходе из функции переменная File, на которую ты ссылаешься, может быть потёрта кем угодно. Всё усложнаяется тем, что она может бытьи не затёрта. Т.е. при каких-то условиях код будет работать, а при каких-то нет. Зависеть может много от чего. Короче - так делать нельзя.
>>1819308 >printf(FileName) Не пиши так. Это уязвимость. >scanf("%s", FileName) Возможен buffer overflow. >char Again = "N" "N" - это строковый литерал Чему равно значение Again? >Fil = &File Fil - копия, т.е. измениться только копия. Надо присвоить адрес адресу, содержащемуся в Fil, т.е. *Fil = File Также >>1819375 писал, что ∗File выделен на стеке, после вызова fopen, File будет указывать на память в куче (пикрил), но после Fil = &File указатель проёбывается, т.к. &File - адрес переменной на стеке, которая после возврата в вызывающую функцию инвалид. Fil - просто копия адреса (тоже на стеке). Т.е. с внешними значениями функция делает ровно нихуя, зато происходит memory leak. Используй санитайзеры и ворнинги
>>1819221 > как обходитесь без неймспейсов Префиксами имен, которыми неймспейсы по сути и являются. Совпадения имен, у которых есть префиксы, очень-очень редки, поэтому разницы особой нет. Желание сделать from xxx import yyy хоть и возникает изредка, но не настолько часто, чтобы мы из-за этого плакали.
> Вот если куча "импортов" (include .h-файлов), то как блять в этой мишуре разобраться? Точно так же как в тысячах модулей ноды или в site-packages. Только проще, потому что leftpad принято писать, а не таскать библиотекой, и в либах остаются реально нужные вещи. Что касается хедеров, то там опять-таки проще.
>>1819101 tcc - для хелловорлдов. Половины хедеров нет, хедеры из mingw приходится подправлять напильником, сообщения об ошибках максимально недружелюбные из-за примитивности парсера, багов хоть и стало меньше, но совсем они не исчезли.
>>1819784 > графическая подсистема, намертво вшитая в ядро Ядро отдельно, win32k.sys отдельно. Можно оторвать executive полностью и написать новую. Да, в ntoskrnl кроме ядра еще другие вещи лежат, как и в win32k кроме executive лежит графическая подсистема, но это только вопрос размещения в файлах, сами они слабо связаны. Точно так же было в еще в MS-DOS, там в IO.SYS лежали две разные вещи: подсистема ввода-вывода (IO) и сам MS-DOS.
>>1819221 > Объясните плез, как обходитесь без неймспейсов? Спокойно. Просто нужно держать жёсткий нейминг переменных и функций. > Вот если куча "импортов" (include .h-файлов), то как блять в этой мишуре разобраться? Разобраться не сложно, если нейминг правильно сделан.
>>1820048 Ах, в заголовках творится какой-то ад. Нагромождение непонятного кода, ммм. Ну все, больше на Си программировать не буду, хватит это терпеть! Долой ад в заголовках! Я за чистый код!
>>1818156 (OP) Fix that libarchive fails to return filenames for UTF-8/UTF-16 entries. The reason is that it uses locales and all that garbage, and mpv does not set a locale. Both C locales and wchar_t are shitfucked retarded legacy braindeath. If the C/POSIX standard committee had actually competent members, these would have been deprecated or removed long ago. (I mean, they managed to remove gets().) To justify this emotional outbreak potentially insulting to unknown persons, I will write a lot of text. Those not comfortable with toxic language should pretend this is a religious text. C locales are supposed to be a way to support certain languages and cultures easier. One example are character codepages. Back when UTF-8 was not invented yet, there were only 255 possible characters, which is not enough for anything but English and some european languages. So they decided to make the meaning of a character dependent on the current codepage. The locale (LC_CTYPE specifically) determines what character encoding is currently used. Of course nowadays, this is legacy nonsense. Everything uses UTF-8 for "char", and what doesn't is broken and terrible anyway. But the old ways stayed with us, and the stupidity of it as well. C locales were utterly moronic even when they were invented. The locale (via setlocale()) is global state, and global state is not a reasonable way to do anything. It will break libraries, or well modularized code. (The latter would be forced to strictly guard all entrypoints set set/restore locales, assuming a single threaded world.) On top of that, setting a locale randomly changes the semantics of a bunch of standard functions. If a function respects locale, you suddenly can't rely on it to behave the same on all systems. Some behavior can come as a surprise, and of course it will be dependent on the region of the user (it doesn't help that most software is US-centric, and the US locale is almost like the C locale, i.e. almost what you expect). Idiotically, locales were not just used to define the current character encoding, but the concept was used for a whole lot of things, like e. g. whether numbers should use "," or "." as decimal separaror. The latter issue is actually much worse, because it breaks basic string conversion or parsing of numbers for the purpose of interacting with file formats and such. Much can be said about how retarded locales are, even beyond what I just wrote, or will wrote below. They are so hilariously misdesigned and insufficient, I can't even fathom how this shit was _standardized_. (In any case, that meant everyone was forced to implement it.) Many C functions can't even do it correctly. For example, the character set encoding can be a multibyte encoding (not just UTF-8, but awful garbage like Shift JIS (sometimes called SHIT JIZZ), yet functions like toupper() can return only 1 byte. Or just take the fact that the locale API tries to define standard paper sizes (LC_PAPER) or telephone number formatting (LC_TELEPHONE). Who the fuck uses this, or would ever use this? But the badness doesn't stop here. At some point, they invented threads. And they put absolutely no thought into how threads should interact with locales. So they kept locales as global state. Because obviously, you want to be able to change the semantics of basic string processing functions _while_ they're running, right? (Any thread can call setlocale() at any time, and it's supposed to change the locale of all other threads.) At this point, how the fuck are you supposed to do anything correctly? You can't even temporarily switch the locale with setlocale(), because it would asynchronously fuckup the other threads. All you can do is to enforce a convention not to set anything but the C local (this is what mpv does), or to duplicate standard functions using code that doesn't query locale (this is what e.g. libass does, a close dependency of mpv). Imagine they had done this for certain other things. Like errno, with all the brokenness of the locale API. This simply wouldn't have worked, shit would just have been too broken. So they didn't. But locales give a delicious sweet spot of brokenness, where things are broken enough to cause neverending pain, but not broken enough that enough effort would have spent to fix it completely. On that note, standard C11 actually can't stringify an error value. It does define strerror(), but it's not thread safe, even though C11 supports threads. The idiots could just have defined it to be thread safe. Even if your libc is horrible enough that it can't return string literals, it could just just some thread local buffer. Because C11 does define thread local variables. But hey, why care about details, if you can just create a shitty standard? (POSIX defines strerror_r(), which "solves" this problem, while still not making strerror() thread safe.) Anyway, back to threads. The interaction of locales and threads makes no sense. Why would you make locales process global? Who even wanted it to work this way? Who decided that it should keep working this way, despite being so broken (and certainly causing implementation difficulties in libc)? Was it just a fucked up psychopath? Several decades later, the moronic standard committees noticed that this was (still is) kind of a bad situation. Instead of fixing the situation, they added more garbage on top of it. (Probably for the sake of "compatibility"). Now there is a set of new functions, which allow you to override the locale for the current thread. This means you can temporarily override and restore the local on all entrypoints of your code (like you could with setlocale(), before threads were invented). And of course not all operating systems or libcs implement this. For example, I'm pretty sure Microsoft doesn't. (Microsoft got to fuck it up as usual, and only provides _configthreadlocale(). This is shitfucked on its own, because it's GLOBAL STATE to configure that GLOBAL STATE should not be GLOBAL STATE, i.e. completely broken garbage, because it requires agreement over all modules/libraries what behavior should be used. I mean, sure, makign setlocale() affect only the current thread would have been the reasonable behavior. Making this behavior configurable isn't, because you can't rely on what behavior is active.) POSIX showed some minor decency by at least introducing some variations of standard functions, which have a locale argument (e.g. toupper_l()). You just pass the locale which you want to be used, and don't have to do the set locale/call function/restore locale nonense. But OF COURSE they fucked this up too. In no less than 2 ways: - There is no statically available handle for the C locale, so you have to initialize and store it somewhere, which makes it harder to make utility functions safe, that call locale-affected standard functions and expect C semantics. The easy solution, using pthread_once() and a global variable with the created locale, will not be easily accepted by pedantic assholes, because they'll worry about allocation failure, or leaking the locale when using this in library code (and then unloading the library). Or you could have complicated library init/uninit functions, which bring a big load of their own mess. Same for automagic DLL constructors/destructors. - Not all functions have a variant that takes a locale argument, and they missed even some important ones, like snprintf() or strtod() WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK I would like to know why it took so long to standardize a half-assed solution, that, apart from being conceptually half-assed, is even incomplete and insufficient. The obvious way to fix this would have been: - deprecate the entire locale API and their use, and make it a NOP - make UTF-8 the standard character type - make the C locale behavior the default - add new APIs that explicitly take locale objects - provide an emulation layer, that can be used to transparently build legacy code without breaking them But this wouldn't have been "compatible", and the apparently incompetent standard committees would have never accepted this. As if anyone actually used this legacy garbage, except other legacy garbage. Oh yeah, and let's care a lot about legacy compatibility, and let's not care at all about modern code that either has to suffer from this, or subtly breaks when the wrong locales are active. Last but not least, the UTF-8 locale name is apparently not even standardized. At the moment I'm trying to use "C.UTF-8", which is apparently glibc _and_ Debian specific. Got to use every opportunity to make correct usage of UTF-8 harder. What luck that this commit is only for some optional relatively obscure mpv feature. Why is the C locale not UTF-8? Why did POSIX not standardize an UTF-8 locale? Well, according to something I heard a few years ago, they're considering disallowing UTF-8 as locale, because UTF-8 would violate certain ivnariants expected by C or POSIX. (But I'm not sure if I remember this correctly - probably better not to rage about it.) Now, on to libarchive. libarchive intentionally uses the locale API and all the broken crap around it to "convert" UTF-8 or UTF-16 (as contained in reasonably sane archive formats) to "char*". This is a good start! Since glibc does not think that the C locale uses UTF-8, this fails for mpv. So trying to use archive_entry_pathname() to get the archive entry name fails if the name contains non-ASCII characters. Maybe use archive_entry_pathname_utf8()? Surely that should return UTF-8, since its name seems to indicate that it returns UTF-8. But of fucking course it doesn't! libarchive's horribly convoluted code (that is full of locale API usage and other legacy shit, as well as ifdefs and OS specific code, including Windows and fucking Cygwin) somehow fucks up and fails if the locale is not set to UTF-8. I made a PR fixing this in libarchive almost 2 years ago, but it was ignored. So, would archive_entry_pathname_w() as fallback work? No, why would it? Of course this _also_ involves shitfucked code that calls shitfucked standard functions (or OS specific ifdeffed shitfuck). The truth is that at least glibc changes the meaning of wchar_t depending on the locale. Unlike most people think, wchar_t is not standardized to be an UTF variant (or even unicode) - it's an encoding that uses basic units that can be larger than 8 bit. It's an implementation defined thing. Windows defines it to 2 bytes and UTF-16, and glibc defines it to 4 bytes and UTF-32, but only if an UTF-8 locale is set (apparently). Yes. Every libarchive function dealing with strings has 3 variants: plain, _utf8, and _w. And none of these work if the locale is not set. I cannot fathom why they even have a wchar_t variant, because it's redundant and fucking useless for any modern code. Writing a UTF-16 to UTF-8 conversion routine is maybe 3 pages of code, or a few lines if you use iconv. But libarchive uses all this glorious bullshit, and ends up with 3 not working API functions, and with over 4000 lines of its own string abstraction code with gratuitous amounts of ifdefs and OS dependent code that breaks in a fairly common use case. So what we do is: - Use the idiotic POSIX 2008 API (uselocale() etc.) (Too bad for users who try to build this on a system that doesn't have these - hopefully none are left in 2017. But if there are, torturing them with obscure build errors is probably justified. Might be bad for Windows though, which is a very popular platform except on phones.) - Use the "C.UTF-8" locale, which is probably not 100% standards compliant, but works on my system, so it's fine. - Guard every libarchive call with uselocale() + restoring the locale. - Be lazy and skip some libarchive calls. Look forward to the unlikely and astonishingly stupid bugs this could produce. We could also just set a C UTF-8 local in main (since that would have no known negative effects on the rest of the code), but this won't work for libmpv. We assume that uselocale() never fails. In an unexplainable stroke of luck, POSIX made the semantics of uselocale() nice enough that user code can fail failures without introducing crash or security bugs, even if there should be an implementation fucked up enough where it's actually possible that uselocale() fails even with valid input. With all this shitty ugliness added, it finally works, without fucking up other parts of the player. This is still less bad than that time when libquivi fucked up OpenGL rendering, because calling a libquvi function would load some proxy abstraction library, which in turn loaded a KDE plugin (even if KDE was not used), which in turn called setlocale() because Qt does this, and consequently made the mpv GLSL shader generation code emit "," instead of "." for numbers, and of course only for users who had that KDE plugin installed, and lived in a part of the world where "." is not used as decimal separator. All in all, I believe this proves that software developers as a whole and as a culture produce worse results than drug addicted butt fucked monkeys randomly hacking on typewriters while inhaling the fumes of a radioactive dumpster fire fueled by chinese platsic toys for children and Elton John/Justin Bieber crossover CDs for all eternity.
>>1818156 (OP) Насколько оправдано учить C для Data Science? Есть ли вообще какое-то применение няшной Сишки в Data Analysis, Big Data Analysis, (короче говоря, там, где сейчас доминируют Python, R и Julia)?
>>1820304 Нинасколько. Конечно, все кишки питонов/р/юли/любого-фреймворка-чилсодробилки написаны на си/плюсах, но это именно инженегровые задачи, имеющие посредственное отношение к датасаенсу.
>>1820315 А, ну и заметил вот что: если пакет для какого-нибудь R переписывают с этого самого R на C/C++, то время расчетов уменьшается раз в 10-50 минимум, без шуток. Поэтому и стало интересно.
Увеличив тем самым в 10-50 раз время разработки и поиска багов.
Байтоебство хорошо только тогда, когда без него либо в принципе никак (библиотеки драйвера, рантаймы и операционные системы), либо оно дает такие преимущества продукту что без него нельзя.
Как пример - видеоигры, там если на топ пеке нельзя поиграть в 4к60фпс - тебя скорее всего обоссут и накидают минусов в стиме, по этому как минимум движок игры должен быть написан на крестах и хорошо оптимизирован.
А вот если какая-нибудь опердень ускорится с 5 секунд до двух - этого юзер "тетя маня" особо не заметит, а вот времени ты въебешь намного больше и когда наступит время релиза ты с удивлением для себя увидишь, что рынок поделен продуктами конкурентов и все обсуждают именно их.
>>1820386 > > Только в случае пакетной обработки какого-то большого множества, разве что. Потому что FFI сам по себе имеет достаточно большие накладные расходы.
> Увеличив тем самым в 10-50 раз время разработки и поиска багов. А в чем проблема написать аналоги функций R на Сишке, оставив им те же имена? Так и баги проще ловить, и скорость - топ. Банально, подключаешь библиотеку yoba_c, функции которой перекрывают стандартные и вперёд. Благо что в R можно свои функции вообще не писать, а ебашить макросы Scheme-style. Соответственно, если в маленькой функции на C явных багов нет, то их не будет и в макросе.
>>1820304 C нужен для разработки ПО для обезьян задействованных в дата саенс. С это про другое. Твой сраный эр, пайфон написаны на высокоуровневом С. Сечёшь мою мысль? Тот питух, что тебе писал про игровые движки — лох, чмо, дегенерат. Ffi, игровые движки, хуйню какую-то наплел олень малолетний.
>>1820342 А если этот сишный код как следует отпидорасить, и вынести всё что можно вынести на GPU — можно получить такой же прирост даже относительно кода на C. Только всем похуй, датасаенс — это про хуяк-хуяк скриптик накидал, за пару часиков посчитал, гистограмку нарисовал и забыл, а не про долгую еблю с выдрачиванием перформанса.
>>1820595 Сравнительно да. В любом случае, всегда можно найти пакет, который делает то же самое, но в нём этого бага нет, зато есть 100500 других, которые ты не заметишь и которые похерят цифры в твоих данных.
>>1821474 Так уже получше. Во всяком случае точно не упадёт, если указатель в функцию передашь валидный. Хотя лучше проверить вместе с isspace и на конец строки.
У тебя в предыдущей версии в условии использовался || а надо было &&.
Пендюх, бизнесу делают мани те, кто пишет софт. Дата саенст окромя теории математической нихуя не могут. Весь их вклад — это реализация блоков воедино в уже готовом софте. Это как рнр макаки от мира математики.
Чуваки я правильно всё понимаю? ch = getchar() -> Ввожу в инпут igor\n, куда уходят gor\n? Если я вызову функцию типа fgets(string, n, stdin) эта часть уйдет в неё? Эти литералы стоят в стаке и ждут функцию которая принимает ввод? Или они в буфере? Или стак это буфер? Помогите долбоебу.
Какие шансы устроиться крестовиком в какую нибудь контору, если у тебя есть нормальный опыт, даже проги которые ты написал и ты учавствуешь в олимпиадах, но у тебя 9 классов? Я готов закончить вышку ради работы на плюсах. Мне 22 просто проебался немного по молодости.
>>1821967 Ну, все зависит от прохождения собеседования и если контора не будет интересоваться твоим образованием. Но опять же, на собеседовании могут спросить про какое то перемножение матриц, и ты обосрешься без образования, даже школьного. У меня при трудоустройстве никто не спрашивал об образовании, никто даже не интересовался какой вуз я закончил и какое направление. Думаю нас таких много.
Ньюфаг итт. Есть программа: int main(){}. Пробовал компилировать ее clang -Oz -nostlib и clang -O0 -nostlib и она один хуй весит 9.2 кб Вопрос: какого хуя?
>>1822117 В первом случае 9352 байта, а во втором 9360 байт, если быть точным. Что в этой программе, которую я уже не знаю как сделать проще, весит так много? Еще заметил, что все мои хелловорлды от 5 до 200 строк всегда весят 16-19 кб. Что помимо стдлибы занимает большую часть экзекутабла?
>>1822117 В исполняемом файле присутствуют адреса линкуемых либ, присутствуют GOT и PLT таблицы, для динамического резолвинга названий функций и загрузку нужных динамических библиотек(грубо говоря) с нужными функциями. Так же main не является точкой входа фактической дл ОС, а конец ее не является выходом из процесса, и из-за этого есть ещё crt*.o файлы которые компилятор линкует к исполняемому файлу почти всегда. Все это так называемый Сишный рантайм, без него никуда в обычных ОС, но это можно отключить флагами компилятору/линковщику.
Пачаны решил тут вкатитьтся в микроконтроллеры как хобби, но прежде чем закупать компоненты, решил как-то все опробовать софтварно, Поставил ряд пакетов: avrdude gcc-avr avr-libc binutils-avr gdb-avr разобрался как компилировать, получаю файл .hex который можно уже записать на контроллер, Но хотелось мы найти какой-нибудь визульныйсимулятор контроллера, где мог бы понакидать компонентов на платку, взять свой скрипт, и посмотреть как все работает. Есть что-нибудь подобное да под линукс?
>>1819308 >>1819308 Лол, а це таке fil? Правильно понял, что она в статическом скопе или это какая-то нех? >>1819375 Так ведь можно FILE ptr fil = NULL вне функции и в самой функции - просто fil = file. И в рантайме файл можно будет править/закрыть где угодно.
>>1822316 Скорее напоминание того как мало раньше добавляли служебной инфы в бинарь. Впрочем, a.out предельно простой формат, там иначе и быть не могло.
>>1822481 >L4Ka::Pistachio НА ЯЗЫКЕ Лучше можно. Но только, наверное, на ассемблере. И всё равно по спецификации L4X2. Т.е. закодировать можно лучше, а вот спроектировать уже нет.
>>1822316 Это не норма, так же как и статическая сборка не норма. Определение нормы: посчитай средний размер бинаря на твоей системе. Это сильно меньше, чем 1е8
>>1822262 Я в бородатые времена использовал САПР Proteus для этих целей, там можно собирать схемки на микрухах, заливать на них hex файлы и смотреть как они отрабатывают, очень годная тема. Но она для винды и не бесплатная. А так можешь посмотреть что-то из списка на пике, может найдёшь что-нибудь.
>>1822608 Это заблуждение. И вообще глупо сравнивать. L4 оперирует только временем и памятью. Ядро Linux это полноценное ядро с файловой системой, сетевой подсистемой, вытеснением страниц и множеством драйверов. Ты вообще не понимаешь о чём говоришь. Это как сравнивать кирпич и дом. Подумай это.
>>1822668 Ты точно понимаешь как работает среднее арифметическое? Достаточно пары программ в 10-100 Мб - игры, блендер, офис - чтобы такое перекрыть тебе понадобится миллион линукс-вей 10кб бинарников.
>>1822719 Я выбираю дом. Тем более он сделан из нормальных кирпичей ответственных за память и время. А не какой-то кусок говна из под немецкого исследовательского центра. Претензии? Я прочитал фулл спецификацию микроядра L4 и их API. Меня не впечатлило, наоборот выглядело бесполезно без остального софта, чисто бесполезное микроядро, ну и по классике - безопасность на руки программиста кладётся. То есть немцы даже не парились. Тупое говно тупого говна. Ну и код чекал, такое говно конечно написать - это надо уметь.
>>1822816 Slackware же. Один из старейших линуксов из ныне живущих. Где-то ровесник Красной Шапки и Дебиана. Знаменит тем, что не прогибается под моду, а чисто идёт по классическому Unix way. За что и поплатился падением популярности.
>>1822809 >true Linux А что для тебя true Linux? Чтоб консолечка и текстовый инсталлятор и ну это пакеты были простым архивом, и конфиги текстовые, да? Другого от туповатого дегрода ожидать не приходится.
>Другого от юзера ожидать не приходится. Мать твоя юзер :) А я вполне себе портирую ядро Линукс на другие железки на работе, маня.
>>1822811 Ну основной способ передачи данных между сервисами в микроядер это посылка сообщений. Валидность сообщений кладется на руки программиста. Грубо говоря ты можешь послать хитровыебаное сообщение и обвалить нахер всю ОС. Для сравнения у меня после kernel panic ядро линукс продолжало работать, после пропуска события, recovery из внештатной ситуации вполне работал.
>>1822820 >консолечка и текстовый инсталлятор и ну это пакеты были простым архивом, и конфиги текстовые Ясно. Можешь больше не писать. Мне все понятно.
>>1822855 >А что для тебя true Linux? В глаза долбишься? Это Slackware. И Патрик хуй ложил на systemd. А вы прогнулис.
>туповатого дегрода Клоун, следи за базаром.
>А я вполне себе портирую ядро Линукс на другие железки на работе Да мог бы и не признаваться. И так видно что ты обезьяна. Портирует он. Ха ха. Ну на назови ДВЕ железки, куда ты портирровал ядро Linux.
>Грубо говоря ты можешь послать хитровыебаное сообщение и обвалить нахер всю ОС. Сразу видно что ты читал, но не понимал. L4 поддерживает три типа данных в сообщения - регистры сообщений, "строки" и memory mapping. Сможешь придумать сценарий как послать "хитровыебанное" сообщение?
>Для сравнения у меня после kernel panic ядро линукс продолжало работать Пикрелейтед. Ну и как бы тебе напомню что большинство микроядер позволяет сценарий запуска драйвера в выделенном адресном пространстве. Разумеется, с просадкой производительности. Но при этом kernel panic уходит в историю.
>>1821847 Какой-то зоопарк, я ебал, о чем вы спорите вообще? Одни делают вещи невозможное возможным, другие делают возможное нужным, и так по кругу. Воистину манямирок с какими-то односторонними иерархиями в голове. Ты еще скажи, что философы паразитируют на достижениях физиков, и стрелочка не поворачивается.
>>1822857 > >А что для тебя true Linux? > В глаза долбишься? Это Slackware. > И Патрик хуй ложил на systemd. А вы прогнулис. У меня OpenRC в генту, впрочем не вижу ничегo плохого в systemd. Проблемы?
> >туповатого дегрода > Клоун, следи за базаром. Давай, клоун, поясняй что ж плохого в systemd?
> >А я вполне себе портирую ядро Линукс на другие железки на работе > Да мог бы и не признаваться. И так видно что ты обезьяна. Портирует он. Ха ха. Ну на назови ДВЕ железки, куда ты портирровал ядро Linux. Две борды внутреннего использования на MIPS.
> >Грубо говоря ты можешь послать хитровыебаное сообщение и обвалить нахер всю ОС. > Сразу видно что ты читал, но не понимал. L4 поддерживает три типа данных в сообщения - регистры сообщений, "строки" и memory mapping. Сможешь придумать сценарий как послать "хитровыебанное" сообщение? Да, посылаю сервису запрос, оно кидает дальше невалидное сообщение. Вполне себе сценарий уязвимости.
> >Для сравнения у меня после kernel panic ядро линукс продолжало работать > Пикрелейтед. > Ну и как бы тебе напомню что большинство микроядер позволяет сценарий запуска драйвера в выделенном адресном пространстве. Разумеется, с просадкой производительности. Но при этом kernel panic уходит в историю. Так пишешь будто драйвер не общается с ядром вообще. Если происходит общение - возможен и обвал. Тем более если ядро не следит за валидностью посланных данных.
>>1822885 >в генту Уровень красноглазия зашкаливает.
>Две борды внутреннего использования на MIPS. Ну так я и говорю - обезъяна. Не приписывай себе чужих заслуг, Linux на MIPS портирован более 20 лет назад. https://opennet.ru/docs/HOWTO/MIPS-HOWTO.html
> Да, посылаю сервису запрос, оно кидает дальше невалидное сообщение. Ты так и не ответил, как повалить. Пример невалидного сообщения приведи.
> Так пишешь будто драйвер не общается с ядром вообще. Если происходит общение - возможен и обвал. Тем более если ядро не следит за валидностью посланных данных. Ну путай микроядро и ядро. Ещё раз - микроядро просто предоставляет абстракции для процессов, нитей, сообщений и мапинга памяти. Ему вообще похрен что передаётся в сообщениях.
Открою тебе серкет, но только тебе. При кривом дизайне того, что крутится поверх микроядра, возможна другая проблема, о которой ты не упомянул - flooding. Если какой-то процесс "сойдёт с ума" и начнёт спамить сообщениями. Вот это может быть проблемой. Но повторюсь - при кривом дизайне ОС.
>Маловат ещё. Можешь прикинуть мой возраст, если впервые Linux я установил в 1995 году. С дискет.
>>1822885 И, кстати, вот на это можешь не отвечать:
>>>1822898 >>>Linux на MIPS портирован более 20 лет назад.
Я представляю трудозатраты на портирование на новое железо. С точки зрения "вкатывальщиков" это уровень Бог. Но бородатые дяди не оценят. Если без троллинга, обычная задача для обычного программиста.
>>1822898 > >в генту > Уровень красноглазия зашкаливает. Будто слака это не красноглазие
> >Две борды внутреннего использования на MIPS. > Ну так я и говорю - обезъяна. Не приписывай себе чужих заслуг, Linux на MIPS портирован более 20 лет назад. https://opennet.ru/docs/HOWTO/MIPS-HOWTO.html Ты тупой? Ты точно тупой. Я завел борду, а не архитектуру. И ты ещё тут что-то мне пишешь? Можешь нахуй сходить, маня.
> > Да, посылаю сервису запрос, оно кидает дальше невалидное сообщение. > Ты так и не ответил, как повалить. Пример невалидного сообщения приведи. Прям сейчас сяду и начну писать код под это говно. Делать мне нехуй для тупого дурачка с борд хуиту писать.
> > Так пишешь будто драйвер не общается с ядром вообще. Если происходит общение - возможен и обвал. Тем более если ядро не следит за валидностью посланных данных. > Ну путай микроядро и ядро. Ещё раз - микроядро просто предоставляет абстракции для процессов, нитей, сообщений и мапинга памяти. Ему вообще похрен что передаётся в сообщениях. А зря. Это его основная проблема.
> Открою тебе серкет, но только тебе. При кривом дизайне того, что крутится поверх микроядра, возможна другая проблема, о которой ты не упомянул - flooding. Если какой-то процесс "сойдёт с ума" и начнёт спамить сообщениями. Вот это может быть проблемой. Но повторюсь - при кривом дизайне ОС. Это кривой дизайн микроядра такое допускает.
> >Маловат ещё. > Можешь прикинуть мой возраст, если впервые Linux я установил в 1995 году. С дискет. По-моему ты просто родился в 1995 и так цепляешься за эту цифру Я в это время универ закончил.
>>1822906 Куда сложнее завести gcc/binutils/glibc для новой архитектуры. Ядро портировать на обычную risc архитектуру дело пары месяцев. А вот смержить в апстрим дело пары лет.
>>1822922 >Будто слака это не красноглазие Sllacware это unix way.
> Я завел борду Так это не повод для гордости.
> Это его основная проблема. > Это кривой дизайн микроядра такое допускает. Если бы ты ещё чего-нить в этом понимал. Пиздеть - не мешки ворочать. А дрвйвер-то хоть один написал под Linux? Вот так чтобы под новое железо, а не тупо переопределить адреса портов.
> Я в это время универ закончил. Я тоже.
>>1822925 >Ядро портировать на обычную risc архитектуру дело пары месяцев.
Ну хуй знает. В одно лицо за пару месяцев это не сделаешь. Если новая именно архитектура, то пару месяцев это только чтобы оно собралось. А затем год(ы) чтобы заработал стабильно.
>>1822981 Идея очевидна, даже не читая код, сразу догадался, что там будет, хоть я и мимокрок-питонист. Но блять, насколько же СИ тяжело читать и понимать код, это пиздец.
>>1823162 Бранчи могут поломать конвейер. Вероятно что компилятор это понимает. Хотя скорее всего я гоню. По скорости всё равно так не выиграешь - укзкое место это обмен между памятью и процессором. Как только данные попали в кэш, твой вариант оптимизации смысла не имеет.
Всё же Конрад Лоренц был прав. Это конечно оффтопик здесь, но тем не менее. Это я про перенос агрессии. Вот например у голубей. Одно дело когда грубит гуру в сторону ламера, дабы наставить его на путь истинный. И совсем другое дело когда в бессильной злобе бесится воинствующая безграмотность. В общем, когда мозги закипят над решением сложной задачи, почитайте Конрада Лоренца - мир станет понятнее.
>>1823420 Никто не принимает долбоящерские идеи говенного микроядра? Нассали в рот и в жопу и никакого ощущения что кому-то есть дело до твоей писанины? Сожалею. Может ещё накинь статеек, может 1 анчоус прочитает их, сидя на толкане. Если кому-то вообще есть дело до твоей писанины, шизик))
>>1823420 >выдающийся австрийский зоолог и зоопсихолог[6], один из основоположников этологии — науки о поведении животных Ясно. Ну я предпочитаю с животными не работать. Хотя нет, попугайчик на плече сидит когда код пишу.
>>1823450 Я знаю что такое EOF. Не факт что в системе он будет -1, у каждой системы своё значение. А gets мне зачем перечитывать? Это строковая функция.
Лучше посмотри на картинку и охуей. Единственное что могу сказать - только полгода прошло с того момента, как с этого сервака перешли на другой и он сейчас в резерве. До этого он обслуживал десятки тысяч запросов ежедневно.
>>1823476 >То что у тебя аптайм большой никак не позволяет гению агриться в сторону других. А кто гений? Торвальдс?
Ну вот смотри. Условно людей в этой теме можно поделить на несколько категорий. Одни стремящиеся, они никому не грубят а лишь впитывают информацию. Мне вот симпатичен вот этот анон ->>1823445
В теме есть несколько олдов, которые хоть обмазывают друг друга говном, но видно что они понимают о чём говорят.
И есть какой-то пёс, которой скулит, но выдаёт ноль осмысленной информации. При этом, судя по ответам, кроме фекалий его пасть ничего не выдаёт. Биомусор, короче.
Я вот с трудом допускаю что говен тут заливает тот же человек, который в других сообщениях говорит что-то по делу.
>>1823420 Ну смотри, все хипстеры - это пидоры. А пидоры - говно. Вот эти все ваши подвороты, жидкие бородки, смузя, вот все эти "прогрессивные" идеи феменизма, толерантности, бигендерства, экофашизма, БЛМ, куколд-движение, ненависть маскулинности, вот эта вся любовь к JS и React.JS, любовь к разработке "ПАЛЕЗНЫХ СЕРВИСАВ", катание на пидорскутере и ненависть к мужским мощным авто с ДВС выдает в этих всех людях говно-пидоров и вообще червей. Психолухи, инфоцигане, бизнес-КОУЧИ, в принципе, в ту же когорту.
>>1823497 Вот моё говно -> >>1823220 s_gets это версия gets но без проблем оригинала. Там отбрасывается \n заменой нулем если лимит не достигнут чтобы не дублировалась новая строка в getchar() в будущем. EOF юзается если нужно выйти из системы, всё по Пратовскому учебнику. Кстати я уже дописал что делал.
>>1823482 Ладно, я понимаю что ты зеленишь. Поэтому напишу как есть на самом деле. getchar() возвращает int. Это больше чем char, поэтому там может быть или char, или EOF. Будет он -1 или не будет действительно неважно. gets() возвращает указатель на ту же строку, если прочитал успешно, или NULL, если был EOF или другая ошибка.
>>1823503 > бизнес-КОУЧИ На этом месте рука непроизвольно потянулась к пистолету.
Не, этология заебатая хорошая наука. Многие книги по этой теме интереснее приключенческой фантастики и детективов. С трудами этологов по качеству и полезности могут сравниться лишь "талмуды" с описанием железа и протоколов.
>>1823517 Осеннее послабление да? The ^D character (aka \04 or 0x4) is the default value for the eof special control character parameter of the terminal or pseudo-terminal driver in the kernel (more precisely of the tty line discipline attached to the serial or pseudo-tty device).
>>1823514 Короче хватит читать жопой, ты не понимаешь, что какой то шизик жопой прочитал код, заменил у себя в бошке getchar() на gets() и думает, что не обосрался, но на самом деле просто не хочет признавать. Для справки, никто сука не говорил иначе. Все прекрасно знают как всё работает. Просто банальное слабоумие паскододебила говорит за себя.
>>1823537 Следи за своим батей. А я пойду писать кастомный солюшен под фриртос с использованием mqtt esp32 bluetooth mesh сетей. Тебе такое даже и не снилось.
>>1823545 конечно, у меня ведь есть работа, поэтому у меня не так много времени чтобы в понедельник сидеть мамке систему автополива велосипедить для дачки.
>>1823521 Возможно. Но я на дух непереношу всяких Петь Хуесосиповых, Хуязов Шлюхбудтиновых, Трахформаторов (оно это непонятное, блять, хоть знает что это за устройство такое, трансформатор?!) и т.д. Атсасизатора в ту же парашу (ну, хоть один взял себе псевдоним, который чуть-чуть, но отображает суть - человек, который связан с говном но, вообще, ассенизатор - уважаемая профессия, в принципе).
Ну а забугорные инфоцигане... Как я понимаю, суть их не лучше. Только они не так в открытую чушь несут и все, собственно, за это им только и респект.
>>1823555 >Я делаю станцию для лифта у себя в доме. Так это задача не для программирования, а для разработки оптимального алгоритма. Закодировать это даже школьник способен, а вот разработать какой-то новый оптимальный алгоритм под эту тему, это уже не совсем тривиально. Это ж надо держать баланс между расходом электроэнергии, чтобы лифт попусту не гонять, и временем ожидания лифта.
>>1823548 Ага. Дуй на работу, раб! РНН. Только сишечка, только микрухи, только хардкор дома. А ты там пахай на дяденьку за копеечку. А я вот выйду на стартап и заработаю мешок золота.
>>1823563 Маразматик в треде, все в транзистор! Ты дурак? Какой нахуй расход электроэнергии, открыл электричество на электромотор и он крутит, все! Кнопку тип в кабине нажал и тащит его на определенный этаж. Какой тут нахуй алгоритм, шизик? Ты ещё скажи что ты хотел бы отдефрагментировать стек.
>>1823589 А если кнопку нажал и вышел, застрял, умер, МОРГ, гроб, кладбище? Или нажал все этажи? Или нажал с нижнего этажа и людям сверху нужно спуститься, а тебе выше их подниматься? Зачем еще раз ехать вниз, когда можно подняться на нужный этаж выше вызванного, высадить и спускаться вниз? Короче много вариантов.
>>1823605 А ты то программировать умеешь? Мне кажется ты банальный лох-вкатывальщик, который нихуя не умеет. А я вот указан как разработчик в паре общемировых и известных проектов, в том числе и на их сайтах указан как разработчик. Так что засунь свою культяпку себе в жопу и помалкивай там, если не сделал для опенсоурса и рынка ПО столько, сколько сделал я.
>>1823619 Что ты только что сказал обо мне? Ты маленькая сучка. Чтобы ты знал, я вышел из матфака МФТИ с отличием и медалью. Как только я вышел из универа с красным дипломом, меня тут же повели за руку на рабочее место с зарплатой от 200к без испытательного срока как стажера с годовым опытом. Меня тренировали самые лучшие умы фирмы, я ходил среди них как равный и программировал процессоры как профессионал. Благодаря мне ты наверняка, маленькая колхозная тварина сейчас читаешь это сообщение. В отличие от тебя, говноеда нищука, я никогда не работал над попенсурсными проектами, ибо я не такой неудачник как ты. Я уважаю своё время и ресурсы. Подумай еще раз, ублюдок, перед тем как писать мне, божественному со-создателю современной линейки процессоров интел. Пока я пишу здесь, мои коллеги спрашивают совета. Я бы обоссал тебя десятьютысячными способами, но не желаю тратить время на тебя, жирного уродливого девственника. Если бы ты только знал, на что себя обрекаешь, не писал бы такие глупые комментарии мне, твоему идеалу, которым тебе никогда не стать. Ты проклятый идиот. Обоссан.
>>1823563 >>1823589 > станция управления лифтом > ESP32 > MQTT > Bluetooth > ни слова о цепях безопасности, о том, как это все будет подключено, о том будет ли частотник или нет, вот это вот все, как этим управлять > ОЛГОРЕТМ ШТОБЫ ИКАНОМИТЬ ЛИХТРИЧИСТВА!!!1!1!
Парни... Вы серьезно? Какой, нахер, ESP32 в станции управления лифтом?) И, тем более, какой там нахрен мктт и бт?)))
>>1823603 > Или нажал с нижнего этажа и людям сверху нужно спуститься, а тебе выше их подниматься? Уебок так вот из за кого меня сначала увозит вверх на пару этажей где пытается втиснуться баба срака, вместо того чтобы просто доставить меня хекку на первый. Надеюсь вам таким лифт оторвет яйца и вы не будуете размножаться.
>>1823743 Ну связь между кабиной и блоком управления по блютузу, можно поставить ретрансляторы и организацию на базе мэш сети, esp32 стоит дёшево и влепить их можно на каждом этаже. Управлять мотором можно через драйвер с мосфетом для ардуины, вполне тока в 5а хватит, радиатор можно прилепить. Даже если какой-то этаж выйдет из строя, то система все равно будет продолжать работу. Высокая отказоустойчивость достижима. А общение по блютузу можно сделать безопасным посредством lwip over bluetooth и сделать шифрованный канал связи на TLS. Главная esp32 будет обслуживать RESTful сервер, к которому будут обращаться остальные этажи. Ну и все написать можно на FreeRTOS.
>>1823751 А потом, возможно, не через 20 лет этот лифт, нахуй уезжает в потолок (естественно, с последующим сотрясений мозга у пассажиров). А потому что станция на esp32 повисла нахуй и ей все до пизды.
>>1823757 А можно приделать внешний watchdog таймер, и если есп32 не успела сбросить этот таймер, блок управления лифтом перезагружается путем сброса электричества. Удобно. Современные технологии рулят!
>>1823777 Вообще, эти ремни делают из полимера, армированного стальными тросиками (кстати, благодаря им работает подобие СПК, но для ремней). Но будем использовать, какие найдем... Хоть даже и из кожи.
Ньюби квешн пак не обоссыте, плез: 1) История о том, что массив функциональных указателей - не лучшая идея из-за неработающего в таком случае бранч предиктора, правдива или нет? Ведь намного же красивее(и быстрее?) (foo)[offset], чем case(key_func)... 2) Почему с метками нельзя работать как с функциональными поинтерами? 3) Компелятор всегда присваивает энумерациям значения, начиная с 0,1,2,....? 4) Как компелятор выбирает тип для (s)size_t?
>>1824145 > 1) История о том, что массив функциональных указателей - не лучшая идея из-за неработающего в таком случае бранч предиктора, правдива или нет? Как правило. > 2) Почему с метками нельзя работать как с функциональными поинтерами? Чтобы нельзя было впрыгнуть в случайную точку функции извне. В гцц есть && > 3) Компелятор всегда присваивает энумерациям значения, начиная с 0,1,2,....? Да > 4) Как компелятор выбирает тип для (s)size_t? В заголовке определены как знаковый и беззнаковый типы, сравнимые по ширине с адресом.
>>1824145 > Ведь намного же красивее(и быстрее?) (foo)[offset], чем case(key_func)... Расписываю. Если функция локальна, то case 1: f(х); может подставить f или по крайней мере специализировать передачу аргументов. Если нет, то два варианта. Если свич скомпилирован в табличный переход, то это хуже, чем массив функций: время уйдет на выборку адреса ветки из таблицы, переход на ветку и потом на вызов функции. Если же скомпилирован в условные переходы, то тут поможет предсказатель.
>>1824145 > Ньюби квешн пак не обоссыте, плез: > 1) История о том, что массив функциональных указателей - не лучшая идея из-за неработающего в таком случае бранч предиктора, правдива или нет? > Ведь намного же красивее(и быстрее?) (foo)[offset], чем case(key_func)... Да. А вообще сложная тема так как процессор черный ящик по факту. На суперпродвинутых процессорах как у х86-64 может быть оптимизация которая узнает фактический адрес прыжка(без самого прыжка), и начинает оттуда исполнять инструкцииА потом привет spectre/meltdown На всяких процессорах попроще(in order) видел по чертежам(на гитхабе полно), что при на наступлении на бранч или прыжок по адресу просто конвейер сбрасывает состояние и прыгает втупую на новый адрес, не заранее, а уже по факту, и никакой разницы там не было. > 2) Почему с метками нельзя работать как с функциональными поинтерами? По факту нельзя. Есть расширение gccмне кажется оно есть на любую возможную хотелку https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html > 3) Компелятор всегда присваивает энумерациям значения, начиная с 0,1,2,....? Нет, можешь сам задавать значение каждого элемента же. > 4) Как компелятор выбирает тип для (s)size_t? Ручками при сборке, при выборе архитектуры.
вообще, компиляторы могут делать лютое колдунство, например, вместо реального колла, проверяет равенство адреса в поинтере и адреса функции, и при совпадении просто переходит на заинлайненную версию функции (со всеми плюшками заинлайненной функции), ну а если не равно, то честн прыгает на адрес. В связи с этими инлайн-оптимизации у меня такое ощущение, что сейчас стоит отходить от стандартного сишного шаблона (.h - заголовок и .c - реализация), а тупо херачить хедер онли библиотеки, шоб компилятор мог всё агрессивно заинлайнить.
вообще, компиляторы могут делать лютое колдунство, например, вместо реального колла, проверяет равенство адреса в поинтере и адреса функции, и при совпадении просто переходит на заинлайненную версию функции (со всеми плюшками заинлайненной функции), ну а если не равно, то честн прыгает на адрес. В связи с этими инлайн-оптимизации у меня такое ощущение, что сейчас стоит отходить от стандартного сишного шаблона (.h - заголовок и .c - реализация), а тупо херачить хедер онли библиотеки, шоб компилятор мог всё агрессивно заинлайнить.
>>1824805 >>1824806 Имеет место быть такое уже на самом деле. Компиляторы нынче пиздецки умны.
>>1824869 Я другой человек. У меня другой прикол был. Проект на Си на работе. Довелось заглянуть в релизную сборку с O3 на gcc 5.4.0(весьма олдовый уже), с включенными LTO и прочим. Был ивент луп, в котором перебирались структуры соединений, в структуре были функциональные указатели на обработчики (что-то закинуть в коннект, извлечь). Я был удивлен тем, что весь ивент луп был заинлайнен со всеми возможными функциями. inline принудительно не написан везде. О3 оптимизации были выбраны путем лоад тестинга, так как показали наибольший перф. Ну и кодогенерации такая, что фиг вообще можно что-то понять где находится что в бинаре.
>>1824885 Ну там компилятор старый был. Продакшен на centos6, а за версию gcc ручаться не буду, возможно там и старее 5.4.0. У меня в контейнере гцц 5.4.0 стоит, что-то более новое проект не собирает в силу определенных причин.
ну это понятно, что инлай - для компилятора, как звонок -для учителя, лол а как ввобще заинлайненная функция может вызвать больше кэшмиссов, по сравнению с обычным вызовом (не говоря уже о вызове по указателю)? ваще, конечно, хер знает, но мне кажется для современного проца идельный вариант - линейный код с простыми невложенными джампами. локальными джампаи, может. колл, по идее, может вызвать кэшмис(из-за нелокального доступа к памяти) , с другой стороны, колл на статический адрес наверняка предсказывается и соответствующая страничка префетчится в кэш. колл по указателю тоже (по идее, после нескольких вызовов проц выучит, что там реально только несколько функций реально используется, или же, банально, в хотлупе соответствующие странички не успеют из кэша вылезти). У заинлайненной функции, однако, плюс в том, что не нужно исполнять ритуалы передачи аргументов по ABI, со всеми значениями работаем тупо на месте, оставляя компилятору максимальную свободу либо регистровой оптимизации, либо тупо раработы на прямо горяченькой вершине стека. Должно работать ещё лучше, если функции написаны в функциональном стиле, лол, без изменения аргументов.
>>1824885 > Принудительного инлайна нет лет 5 Есть forceinline/always_inline, который в разном виде умеют все. А inline нужен в основном для особого отношения к static inline в хедерах.
Прив, поинтересуюсь у коллег. Понятное дело, что в этом треде преобладаем мы, C-шники. Но и представители других направлений могут свободно отвечать на заданные вопросы. Какую IDE или текстовый редактор используете для написания кода под основу / на прод? Различаются ли выбранные инструменты (продукты) в зависимости от ОС? По возможности свой выбор подкрепите аргументами.
>>1825742 Любой рандомный дистрибутив Linux и любой редактор с поддержкой lsp(vscode, vim, kate, etc). Если не используешь тонкие особенности линукса, то можно юзать wsl, иногда вполне валидный код для Линукса будет в нем падать. Wsl2 должен быть ещё лучше, но если он включен, то могут в системе отвалится любой другой виртуализатор. Нужно будет слегка поебаться с этим.
>>1825779 Так пишешь будто Visual Studio это что-то адекватное и нормальное. По-моему у вас там на платформе нету других вариантов что-то другое юзать безболезненно.
>>1825841 Работал на 2 embedded проектах - ни разу ни у кого винды не видел. Кто-то считает что-то стандартом, а кто-то про это говноедство стандартизированное не слышал.
>>1825937 >Я тебе за США говорю. Ну удачи. Я как бы не отрицаю возможноть разрабатывать в чём либо другом. Но эффективность разработки будет от полутора до трёх раз меньше. Так-то и в vi можно кодить, а отлаживать а gdb. Но гораздо эффективнее переносить уже отлаженные решения на железо, чем ковырять с JTAG. Что не исключает ковыряния c JTAG на финальной стадии.
>>1825769 >>1825779 Меня ещё волнует причина отказа от имплементации VS под системы, базирующиеся на Linux. Пусть проприетарно и закрыто - буду пользоваться продуктом. VSC субъективно не нравится только посредственной скоростю работы и чрезмерным потреблением ресурсов машины. На сегодняшний день работаю с вышеупомянутым редактором.
>>1825943 >Но эффективность разработки будет от полутора до трёх раз меньше. С редактором она на порядок выше, потому что не надеешься на отладчик и ебашишь сразу корректный код, который при этом еще и хорошо отлаживается просто чтением логов. Это водораздел между просто хорошим программистом и рокстаром.
>>1826020 >С редактором она на порядок выше, Джвачую, сколько говноиде ломали код при рефакторинге, а говноподелия Джетбрейнс заслуживает только лучи поноса.
>>1826046 Если бы мы на форуме музыкантов сидели, и они были бы как программисты, пришел бы профи и сказал, что он с листа ноты читает и импровизирует охуенно - а ему такие в ответ, да не, невозможно, самогипноз, я так не могу. Потому что тяжело представить, что человек шел к чему-то много лет, ты же не шел - вот и все не шли. Вот тут такая же хуйня. Я не могу читать ноты с листа, и я даже знаю, что мне, как любителю смысла нет этому учиться годами, но бля, как же это было бы охуенно и удобно. Но в программировании-то я профи в том смысле, что мне бабки платят. Есть смысл улучшать скиллы постоянно - они ковертируются как минимум в свободное время. При чем такие скиллы, которые помогут мне и через 10 лет, а не очередной фреймворк, который сдохнет через 2 года. И ты не развиваешься, если не напрягаешься, ты развиваешься, если напрягаешься и постоянно ставишь себе новые цели. И вот если поставить себе задачу не пользоваться отладчиком и идешным автодополнением - ты, внезапно, научишься писать код без отладчика и автодополнения, при чем за несколько лет скилл вырастет очень сильно - ровно до того момента, пока тебе не станет это делать комфортно, а ты не будешь срывать дедлайны и отставать от коллег. Можешь не верить. Но факт остается фактом. И дальше IDE будешь воспринимать как трехколесный велосипед - типа ну да, можно не балансировать, но неудобно же нихуя. Кстати, ровно по этой же причине множество любителей IDE совпадает с множеством говорящих, что студия - лучшая IDE. Потому что из всех программистов вендоблядок, сидящий в студии на одном-единственном языке, выученным в универе, и сидящий на нем последние лет 10 - это самый ленивый и не развивающий себя тюфяк из всех возможных. При чем такой может неплохо знать сишку - потому что учить сишку доставляет удовольствие, а вот страдать и самоулучшаться - не доставляет, а редактор или там никсы освоить требует все-таки усилий.
>>1818156 (OP) Кстати, мне вот IDE нравилось, VS2005 топчик была, потом начали появляться тормознутые монстры, да и я стал ближе к Богу. Вот проект на Qt где идет микс cpp и qml подобие js, документашка в md, еще нужно простые текстовики править, а еще есть вывод json и sql запросы, плюс править make и кое какие скрипты на bash, кек.
>>1826112 Есть разряд людей - говнохранители. Они обычно привыкнут к чему-то одному. И начинают топить за это без всякой на то причины. Шаг влево или вправо им трудно даётся.
>>1826138 Что у меня опыта чутка побольше. Конечно при условии что всё это время я продолжал программировать и познавал новое.
Вообще об IDE и языках глупо спорить. Каждый кулик своё болото хвалит. Но если кто вкатывается. то лучше Visual Studio он не найдёт. В том числе и для начальных этапов разработки под встраиваемые системы.
>>1826136 "Ой мля, я такой умный, ведь я ещё успел написать код на basic в 90е, и вообще тру линукс это слака, а если не слака - это красноглазая дрочь, я закончил в 90е какую-то шарагу и я этим выебываюсь, и студия лучшая ИДЕ - я СКОЗАЛ, ведь я дольше живу, не согласен? а ты проживи с моё, и я так много постигаю всего нового, но примера привести не могу, ведь я такой умный, вам просто не понять"
>>1826149 >примера привести не могу Ну давай я тебе расскажу за один из проектов. Дело было в далёком 2002 году. За год до этого мы, команда из четырёх разработчиков, реализовали по спецификации некое семейство протоколов, затем портанули его на Linux и на WinCE. Это предыстория. А затем нам прислали железку от Texas Instruments и кросс-компилятор к ней. Внезапно оказалось что на этой архитектуре размернорсть char оказалась 16 бит. Со всеми вытекающими из этого проблемами. Славно тогда поебались, но таки запустили свою имплементацию.
>>1826142 Я с тобой согласен, анонче. В студии не сидел, но вот турбо паскаль надцать лет назад мне очень нравился. Такой кайф жать F9! Со воеменем я взялся за реальные задачи и пересел в командную строку.
>>1826142 >Что у меня опыта чутка побольше. Аргумент про возраст - это вежливый эквивалент "твою мамку ебал", пустая фраза, не говорящая ни о чем, кроме, собственно, желания доминировать. И такую хуйню как раз любят люди, которым сказать нечего. Классика: https://zadolba.li/story/110
>Конечно при условии что всё это время я продолжал программировать и познавал новое. Так об этом мой пост. Опыт - штука с падающей отдачей, и если ты не создаешь себе целей, которые генерируют тебе батхерт от тяжести освоения - ты стагнируешь. И научиться работать без отладчика - это простая и понятная цель, которая потом окупится. Если ты к 40 не научился и работа в IDE для тебя в 1.5 раза быстрее - то что ты вообще делал все это время. Для меня это большой вопрос. Мне не важно, кто где работает, но я настороженно отношусь к людям, которые пишут, что они в IDE работают сильно быстрее.
>>1826152 "Ой мля я такой охуенный я щупал такие вещи что тебе даже и не снились пизду сестры, ну это там АЖ char 2 байта ебатьВСЕ В СИ ТРЕДЕ ПРОСТО ВЗЯЛИ И ВЫШЛИ НАХУЙ ОТ ТАКОЙ СЛОЖНОСТИ"
>>1826181 +30 лет в сфере))) +22см)) +Visual Studio единственная лучшая ide))) +Лучшие гей клубы Москвы) +Дядя мне за сорок))) +Char на железке 16 бит, уууух)
>>1826201 Ну не конвенциональный размер. Просто самый меньший размер в системе. Только почему он с размером со short я без понятия. Для этого и создали макросики.
тебя, видимо, пере ЕГЭ не учили что сишный байт не обязательно 8 бит (но не меньше)
3.6 1 byte addressable unit of data storage large enough to hold any member of the basic character set of the execution environment 2 Note 1 to entry: It is possible to express the address of each individual byte of an object uniquely. 3 Note 2 to entry: A byte is composed of a contiguous sequence of bits, the number of which is implementation-defined. The least significant bit is called the low-order bit; the most significant bit is called the high-order bit.
5.2.4.2.1 Sizes of integer types <limits.h> 1 The values given below shall be replaced by constant expressions suitable for use in #if preprocess- ing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the following shall be replaced by expressions that have the same type as would an expression that is an object of the corresponding type converted according to the integer promotions. Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign. — number of bits for smallest object that is not a bit-field (byte) CHAR_BIT 8
Язык программирования — это совокупность локальных функциональных интерфейсов (составляющих частей языка), оснащенных функциями, входящими в специфические структуры значений. В процессе выполнения интерфейса функция принимает определенные функции, а функции принимают определенные функции.
Таким образом, в основе функционального устройства языка лежат два логических принципа: принцип построения интерфейсов и принцип компоновки функций и связей[ 243 - Хеккелес М. И., Баруздин А. В. Логика языков программирования. — СПб.: Питер, 2008. С. 39– 40.].
>>1826310 Ты бы прочитал сопроводительный абзац, зеленый. Там прямым текстом написано что это implementation defined и значения в табличке должны быть заменены настоящими.
>>1826807 Дураёбина, ты понимаешь, что раньше на системах char и int были одного и того же размера, не потому, что так надо, а потому, что нужно было отличие между символами и цифрами? Теперь ответь, нахуя мне использовать символ, где мне нужна цифра? Хотя судя по всему ты рак который даже не знает что такое макросы и с чем их едят.
>>1826823 Приебывайся к словам дальше кретин ебаный, хотя если ты не улавливаешь смысла то можешь впринципе идти нахуй, я тебе объяснять ничего не буду, ибо в чем смысл раку что-то говорить вообще.
>>1826832 Если тебе доставляет радость писать непортируемые программы - так и скажи. С таким же успехом ты можешь удивляться почему твоя чудо программа работает в линуксе но не компилится под виндой.
>>1826845 Какая может быть портируемость у рака? О чем речь вообще если у этого идиота самая меньшая единица памяти, т.е чар разница между системами? Она не 1 байт как на любой системе, а может быть размером 16 бит. Пусть использует себе такое определение, но не пиздит про портируемость.
>>1826845 Ну да, для криворучки вроде тебя - это миф. Есть кроссплатформенные либы, которые можно скачать в виде исходников и сразу подключить. И написанные такими, вроде тебя, у которых размер чара прибит гвоздями.
>>1826850 Честное слово, вот я вообще не ебу, какой размер у кэра блядь, но есть же uint8_t для бинарной хуйни типа протоколов. Кому вообще нужно знать размер таких типов и зачем. Та же маняхуйня, как приоритет операций.
>>1826863 И что блядь? Переходишь на новый компилятор, где почему-то нет этого типа, тратишь целых 10 секунд на его определение. Аутисты ебаные, лишь бы посраться по поводу какой-то маняхуйни. Хррртьфу
>>1826860 Ну например чтобы не использовать char вместо int когда он нужен. Общее понимание размеров в системе тебе даст понятие где и когда тебе использовать тот или иной тип. Если не нравится есть другие языки программирования. Так-же в разных процах своя размерность типов, поэтому придумали stdlib. Например в одной системе int был 8, в другой 4. Разделили, сделали short. Потом пошло снова, short теперь 8, а int 16. Кстати до этого еще байт называли словом. Чтобы не было непоняток сделали стандарт, где прописали просто, что short меньше int, int меньше long. Если нужно было точное определение типа, его засовывали либо в typedef, либо подключали stdint, где куча макросов которые определяют размер в твоей системе. Удобно при портирований. А так да, разницы никакой, если ты не паришься на счет утечек памяти ит.д или той же оптимизаций. Но считать char и int одним и тем же это тупость.
>>1826872 Сколько же у тебя каши в голове >до этого еще байт называли словом Слово это слово оно никуда не делось (64-битные процессоры оперируют 64-битным словом, и это никак не влияет на размер байта) >short меньше int Short не меньше int. Short меньше ИЛИ РАВЕН int.
>>1826877 >до этого еще байт называли словом >Слово это слово оно никуда не делось (64-битные процессоры оперируют 64-битным словом, и это никак не влияет на размер байта)
>>1826872 >Ну например чтобы не использовать char вместо int когда он нужен Нахуя он нужен в 2020 году, когда даже контроллер за 100 рублей в розницу может в полноценные 32 бита? ASCII строки хранить? Для байтоебли есть uint8_t, по которому сразу видно, что на любой платформе он будет восьмибитным ансайнд типом. Создавай любые бинарные структуры, сериализуй, десериализуй, обмазывайся байтиками сколько влезет. А если ты всерьез держишь в голове мысль о том, что "вот тут я использую short, но не потому что у меня 2 байта в бинарном файле, а потому что мне нужен тип с минимальной гарантией в 32767 значений...", то за такое убивать нужно. То есть наличие таких знаний в голове - гарантированный признак задрота-мудака.
>>1826889 >Для байтоебли есть uint8_t Это опциональный тип. Есть только uint8_least_t и uint8_fast_t. Которые, конечно, могут быть и 16-битными. Если процессор 16-битный онли.
>>1826897 Пойми уже что в программировании используются четкие определения. Там написано что он может быть меньше или равен. Если он равен, то он не меньше, а значит, нельзя исходить из предположения что он всегда меньше.
>>1826889 short используют тогда, когда хотят именно short, а не твои маняфантазии про 2 байта. В нормальных языках вообще можно заводить типы на любые диапазоны чисел, хоть на 13..37 Но тут только так.
>>1826926 Ты опять путаешь чары со словами, мудило? Вот тебе в твоей википидории написано английским по белому - байт использовался для обозначения части МЕНЬШЕ ворда.
>>1826889 >Нахуя он нужен в 2020 году, когда даже контроллер за 100 рублей в розницу может в полноценные 32 бита? Вот вообще бесплатный, но у него нет поддержки операций 8 и 16 бит.
>The C language defines a byte to be the number of bits used by type char , so one can have a system with a 16-bit or 32-bit byte and char type. Как же я жидко обосрался. Признаю, я долбоебина.
Ну вы тут разбушевались. PDP-11 под который писали первый компилятор Си, был 16 битным процессором. И по сути там было только 2 типа short(он же int в те времена) и char. 16 и 8 бит соответственно. Впрочем названия целое и символ были взяты не зря. Подразумевалось что размер будет меняться. Поэтому char может быть 8, может быть 7, а может быть 16 бит.
>>1826937 Шикарный аргумент. >>1826940 Да не потому что размер будет меняться, а потому, что char был придуман для символов. char для символов, int для целых чисел.
>>1826947 > Да не потому что размер будет меняться, а потому, что char был придуман для символов. char для символов, int для целых чисел. Ну где-то так да. А для тех кто хочет именно оперировать размерами типов как количеством бит - есть stdint.h
>>1826950 Если ты читать не умеешь это не мои проблемы. Ты шлешь аргумент, но лупиш в ворота. Я прав, ты тупой. Байтом называли слово. ИГРА В ФУТБОЛ ОКОНЧЕНА ПАЦАН.
>>1826637 Ну ладно в /po или отбитом наглухо /b. Но не на этой же доске, тем более в таком треде. Я понимаю если бы веб-макак js/python/php троллил, что у них нихуя не объекты, а строготипизированный типы данных.
Эпоха декаданса наступила. Двач погрузился во тьму дегенератов выращенных разведенками.
>>1827100 Спасибо что упомянул на чем веб макаки пишут, а то бы подумали что ты один из них ахах вот троллинг бы получился да))) жыес ваще макакены еп)
А знаете в чем самый сок? Если CHAR_BITS == 32 То sizeof(uint32_t) == 1 Потому что sizeof возвращает размер в байтах А байт по стандарту равен CHAR_BITS битам.
>>1827324 Зачем мне это вообще нужно было знать? Я хотел игры делать, почему я сижу теперь читаю списки архитектур процессоров и их размеры слов, занимаюсь байтоеблей, углубленными изучениями терминов. Что за хуйня, ловушка джокера?
>>1818156 (OP) почему сишникам-мидлам дяди в целом платят меньше и востребованность на рынке аналогично меньше, чем например у каких-нибудь фронтэндеров и растоебов?
>>1827514 Сфера уменьшаетсячасть разработки уходит с Си на другие языки, тут думаю не секрет. Плюс ненаглядность результата. Ну что-то там на железке или в консольке. Не интересно. Всем бы приложение на телефон или сайт показать с красивой кнопкой.
Ты че кобыла ебаная охуела? Ты с кем так базарить удумала, ты ондатра плешивая, лошадь зарыганая. Ты хуев блатных обсосалась дурочка ебаная? Ты шотдура ебаная писюн возле кареньуого почувствовать захотел? Да? Мускульное кольцо тебе помассировать хуем? Дичь ты ебаная иди на хуй пидор хуеглот спермохлеб. Вафельница ты дурная.
>>1828008 >Почему компилятор не может копировать значение из регистра в память, передать адрес, а затем записать обратно в регистр? Так в этом смысла нет. Изначально register было задумано для оптимизации. При этом, если склероз не изменяет, нет гарантии что переменная будет размещена в регистре.
>>1828010 >>1828010 >Изначально register было задумано для оптимизации. Условно в одной функции у меня три указателя, которые должны меняться очень часто в рантайме. Один из них (наиболее активный) и был помечен register. >При этом, если склероз не изменяет, нет гарантии что переменная будет размещена в регистре. Да, всё так, это лишь компилятору рекомендация. Хотя вроде в каком-то возможно старом стандарте и было жесткое соответствие, но я тоже неуверен.
>>1827514 чел, программисты вообще нахуй не нужны щас в россии щас больше половины выпускников-инженеров выпускаются с ай-ти специализацией в дипломе, это не считая вкатывальщиков то что за раст или за реакт больше платят, тебя вообще ебать не должно, тк на одну вакансию тысячи кандидатов
>>1828071 но программирование интересное хобби, ты можешь им заниматься в свободное время работать дворником, уборщиком, убирать говно за стариками, чистить толчки.. такого типа работы ибо на кассу возьмут молодуху, а охранником мента на пенсии.. с этой точки зрения интересней изучать языки lisp-семейства, ml-семейства, декларативные языки наследники prolog, языки основаннын на автоматическом выводе типа, тот же haskell, чисто ооп языки типа смоллтолка и эйфеля, куча всего интересного эмбеддед сишка слишком простое и занудное дело чтобы быть хобби
>>1827514 1. Почти нет аутсорса с западными зарплатами 2. Есть огромное количество 35+ дядь, которые уже не будут переучиваться, зато у них дети и ипотека, поэтому будут получать сколько дают
Короче хуевый выбор сишка для заработка денег, ее нужно знать просто для собственного развития
Анон, такой вопрос, почему gcc выебывается, и при выводе ошибок в консоли, он вместо кириллицы хуету эту выдает. Что за непонятки с кодировкой, заебался угадывать что он говорит
>>1828165 Это не документ, это ковычьки у самого гцц. Все правильно советуют - надо chcp 65001, chcp 1251 или chcp 866 (скорее последнее), чтобы отображалось нормально.
>>1827628 Этого двачую. Сейчас век ебучих золотых оберток. Идеи для приложений говно редкое, я вам скажу. Но, сука, такое ощущение что клиенты нихуя не допирают до этого самостоятельно и продолжают вваливать в это деньги.
Кто этим всем говнищем пользуется - я хуй его знает.
>>1829224 Да. Конечно, будет вторым освобождением уже освобождённой памяти. Что приведет к падению данной программы, кстати. Ты же присваеваешь не кусок памяти во второй раз, а указатель на нее. Т.е., по сути, адрес.
>>1829239 А можешь мне чуть-чуть пососать, пожалуйста? Ну так... Потилибомкать чуть-чуть чисто... пока молофья с моего конца не закапает... Ну так, чисто по-дружески...
>>1829449 Понял, снимаю штаны, открывай рот. Кстати, я тут утром дрочил и забыл смыть подзалупный творог :( Прости, а? Ну это ж мой, а? Ты ж его всегда любил...
>>1829209 > Отклеилось, сорри. > Пишу на си. Юзаю мейк. Иде - силайон (говно без симейк, но да похуй). А в попку даёшь? Пользоваться - clion себя не уважать. Надо ставить Visual Studio.
> Что ещё делаю... Ну, хочу сбацать саундтрек из псковского порно с помощью зумера и тех же таймеров+дма. Лучше бы сайт сделал, чем очередное нинужно.
> Также вот сегодня потихоньку читаю доки на ssd1306. Лучше бы почитай как можно программировать 16 битный калькулятор. Смысла больше.
> Алсо, этот пидор, >>1829034, это не я. Это какой-то гомодрил тебя захотел подъебать. Сам ты гомодрил. Наебываешь тут людей и обманываешь. Говоришь что дрочишь в присядку, а потом пытаешься сойти за нормального наркомана.
>>1829639 А ты, как я посмотрю, гей-хипстер со смузистическими наклонностями? Свою жиденькую рыженькую пиздобородку причесал? А подворотики? А смузи выпил? За фемок утром прокричал? А права окружающей среды и бигендеров защитил? А, так не гей? Ну, по тебе не скажешь... А что ты тогда на митинге зеленых тригендеров делал, а? Ааа, БЛМ? Так тебе, может быть, по щам нужно?
Я-то в жепу не даю, я, скажем так, гомофоб. А силайон пользуюсь так как я сильно альфач чтобы разобраться с вимом.
>>1829662 > А ты, как я посмотрю, гей-хипстер со смузистическими наклонностями? Ну да. А ты завидуешь? > Свою жиденькую рыженькую пиздобородку причесал? Естественно, и андеркат сделал. > А подворотики? А зачем их причесывать? > А смузи выпил? А то. Вкусно пиздец. > За фемок утром прокричал? Да, прям с утра, каждый день в окно кричу "слава фемкам!" > А права окружающей среды и бигендеров защитил? Конечно же. Использую гендернейтральный компьютер от компании Apple. > А, так не гей? Я гей. Тебя смущает? > Ну, по тебе не скажешь... Ты поехавший? Я пидор. > А что ты тогда на митинге зеленых тригендеров делал, а? Ну люблю тригендеров, люблю к ним подсаживаться. > Ааа, БЛМ? Люблю ниггеров. > Так тебе, может быть, по щам нужно? А может тебе надо по щщам, поехавший?
> Я-то в жепу не даю, я, скажем так, гомофоб. А силайон пользуюсь так как я сильно альфач чтобы разобраться с вимом. Какой нахуй вим? Надо использовать Visual Studio. Ровные поцоны только студию юзают.
>>1828250 Крч, смена кодировок в нативной шиндовой cmd давала нечитаемое месиво, либо кириллицу вообще не отображала. Если кому нужно, проблему решил установкой ConEmu и chcp1251
>>1829705 Я не он,он не я. Visual Studio заебись. Макось - фуфло. gcc в целом неплох, чтобы собрать то, что было протестировано и отлажено в Visual Studio.
кароче только вкатился в с. сижу на кодварсе таски выполняю и увидел в тестах макрос для определения длины массива.
#define ARRAY_SIZE(x) (sizeof x / sizeof 0[x] / (size_t) !(sizeof x % sizeof 0[x]))
вдупляю уже 2 часа в это и не могу понять как это блядь работает. что за sizeof 0[x], че это за наркомания нахуй. в gdb хуй поинспектишь, помогите разобраться плз
jpeg_read_header(&srcinfo, TRUE); // хуй знает что хуй знает зачем
jvirt_barray_ptrхcoef_arrays = jpeg_read_coefficients(&srcinfo); // еще какую то хуйню читает и возвращает указатель.
jpeg_copy_critical_parameters(&srcinfo, &dstinfo); //копирует цветовой профиль, уровень сжатия итд в выходную структуру
unsigned charхout_jpg; unsigned long out_size;
jpeg_mem_dest(&dstinfo, &out_jpg, &out_size); //out_size заполняется, out_jpg почему то пустой пустой
jpeg_write_coefficients(&dstinfo, coef_arrays); //то же самое что jpeg_compress(&dstinfo); только с какими то коофициентами }
Код позаимствован из jpegtran из состава libjpeg-turbo, в оригинальной библиотеке насколько я понял jpeg_mem_src/dst вообще не предусмотрен, есть только jpeg_std_src/dst ошибки предлагается обрабатывать через лонгджамп. Все функции как черный ящик в котором что то проиходит со структурами, то есть без изучения кода самой библиотеки догадаться что оно делает не представляется возможным, как и написать код без примера (у меня даже и с примером не получается). Понятно что оригинальную библиотеку написали в дремучих годах и все современные реализации/форки тупо тянут совместимость, но API тем не менее ультрауебищное написанное каким тоо мудаком
>>1829808 В макросе же "!" (отрицание) стоит. Если результат от деления будет 0, то в конце выражение обратится в 1. По итогу произойдёт деление на единицу. Появляется вопрос. Когда же результат выражения будет обращаться в конце в нуль (должно произойти деление на 0 по сути)? - Правильно, когда будет ненулевой остаток (>= 1). Мне понятен принцип работы 3-его действия, но не понятна цель (зачем так сделали). Неужели для запутывания читающих код? Массивы же однотипные. Мы, конечно, можем записать разные типы через приведённые указатели (void *), но тип технически будет один и тот же (размеры элементов равны). Получается, что ненулевого остатка ожидать не стоит. Получается, что обсуждаемая часть кода бесполезна? Разве не так?