Пожалуйста, пользуйтесь https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит или ∗.
Что читать:
- Stephen Prata "C Primer Plus, 6th Edition" (2014) (в русском переводе: Стивен Прата "Язык программирования C. Лекции и упражнения (6-е издание)" ): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Идеально для начинающих.
- Brian Kernighan, Dennis Ritchie "The C Programming Language".
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2479.pdf (февраль, с диффами)
- Последний черновик ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2583.pdf (октябрь)
Прошлый тред: https://2ch.hk/pr/res/3386488.html (

typedef struct foo {
int bar;
int baz;
} foo_t, ⚹pfoo_t;
Если надо обозначить указатель на структуру, то нахуя перед этим писать foo_t?
Ну типо, тут две дефениции:
foo_t обозначает псевдоним для struct foo
А pfoo_t означает псевдоним для struct foo⚹ т.е. тип указатель на эту структуру.
Зачем нужен указатель на структуру? Хз, наверное чтобы компилятор не ругался, и чтобы лишний раз преобразования типов не делать. Ясно что все указатели хранят адрес, т.е. один и тот же тип, поэтому никаких проблем нет чтобы присвоить к обычному void ⚹ наш struct foo⚹. Однако после такого присвоения мы уже не можем корректно обратиться к значению по адресу, потому что непонятно что за тип там лежит. Нужно этот воид привести к структфуу и тогда обратится. Может автор кода решил избежать этих преобразований и заранее слелал тип "указатель на структуру". Яхз
>Ну типо, тут две дефениции
Точняк. Я привык, что
struct foo {
int bar;
int baz;
} fooi;
где fooi - обычный экземпляр. А тут через typedef сразу несколько алиасов повесили. Можно там еще через запятую добавить указатель на указатель ⚹⚹ppfoo_t и т.д. Пиздец, ну и синтаксис.
Но это разные вещи. Тут ты:
struct foo {
int bar;
int baz;
} fooi;
Создаешь тип "struct foo" и обьявляешь, получается что, глобальную переменную fooi.
А с директивой typedef ты переменных не создаёшь, ты создаёшь синонимы для типов. Т.е.
typedef struct foo {
int bar;
int baz;
} fooi;
после этого у тебя нет доступа к fooi, потому что fooi - это тип. Нужно ещё создать переменную типа fooi.
Например:
fooi a = {1,0};
Вопрос только, нахуя ему тип ⚹pfoo_t? он ведь может просто ⚹foo_t написать.

1. Только на сишке и плюсах можно писать софт, убивающий людей. Никакая другая "платформа", "экосистема" - не позволяет этого делать.
2. Отсутствие безопасности памяти - несомненная фича, и любой язык устранивший это является проблемным в самой своей глубине.
> Только на сишке и плюсах можно писать софт, убивающий людей. Никакая другая "платформа", "экосистема" - не позволяет этого делать.
Товарищ-си, здравствуйте! Вы имеете в виду компьютерное зрение на дронах? Всякие numpy безусловно содержат в себе под капот дизассемблированные плюсы для вычислений перемножения матриц и другой математики, но это всё ещё Питон.
Или Вы про то, что уча "низкроуровневое" программирование хочется вздёрнуться и убить себя? Тогда я с Вами согласен, у меня депрессия и апатия.
> 2. Отсутствие безопасности памяти - несомненная фича, и любой язык устранивший это является проблемным в самой своей глубине.
Сейчас очень сложно обычному программисту набедакурить с памятью, ибо ОСь сразу тебе стукнет по носу, так сказать.

>Товарищ-си, здравствуйте! Вы имеете в виду компьютерное зрение на дронах? Всякие numpy безусловно содержат в себе под капот дизассемблированные плюсы для вычислений перемножения матриц и другой математики, но это всё ещё Питон.
Я знал, что кто-то прибежит рассказывать про машинное зрение, но:
1. Как ты верно заметил, самая ответственная часть обыкновенно реализована на сишечке. Питон - это для рисёрча и прототипирования. И даже при рисёрче, конечный обработчик вводных в виде картиночек и модели по итогу будет являться сишным...
2. Можно взять OpenCV, который в целом почти полностью плюсы. И на его основе общаться с полётником.
3. Большая часть существующего софта, убивающего людей, про машинное зрение даже не слышало. А это - наши любимые микрушечки в MQ-9 Reaper, системах ПВО вроде S-300, ПТУРах, самонаводящихся патронах в .50 BMG которые пилит американское DoD, системы наведения в бомбах, микроконтроллеры для теплочувствительных матриц, fly by wire в самолётах, и наконец, обыкновенный софт для полётных контроллеров. Бжж-бжж, motherfucker. Я даже не буду говорить про возможность бабахнуть чего-нибудь тремя или пятью вольтами. Ну, ладно, здесь можно и интерфейс накалякать на реакте, и css-префиксов понакидать на кнопочку, таких, чтобы я её хотел сначала лизнуть, а потом нажать. А потом ещё раз лизнуть.
> Сейчас очень сложно обычному программисту набедакурить с памятью, ибо ОСь сразу тебе стукнет по носу, так сказать.
Я надеюсь, ты не про сегфолты.
Типы, указатели, контейнера. Преобразования из структур в байты и обратно. Если мы не можем уследить за данными, и это приводит к багам, может и пишем-то мы не слишком сознательно?
Исходя из моих знаний о рассеянности человеческого сознания, пока растфаги разберутся, как написать что-либо, они забудут, что они вообще хотят написать - и сделают ошибку в самой логике работы программы.
> Сложно
Нет. Большинство каличей не итт оп пикрл как бы намекает , на в ей борде да и вообще везде сдабо понимают что такое память и указатели. Да ось не даст тебе убить себя, но логику программы это никак не защитит.
Про пик мимо. Думал это плюсотред, там пик рилейтед.

>сегфолт - это благо хорошо
это ты так своему барину обьясняешь, когда он тебя отчитывает за говнокод?
-Сычёв, какого хуя у тебя код рандомно сегфолится, хули ты там настрочил, ищи ошибку мудень
-Кабан кабаныч, вы не понимаете, сегфол - это хорошо а не плохо! Это означает можно экстренно завершить программу, а не ждать 30 минут, пока мой говнокод завершится.
А я поддержу товарища-Си выше и скажу, что мне тоже нравятся сегфолты, они значат, что ты набедакурил что-то в памяти и куда-то не туда залез, а значит область кода сужается и легче найти ошибку с указателями.
Но сегфол это не ошибка компилятора С. Это ошибка операционной системы. Ты и на асме можешь наговнокодить и получить сегфол. Это получается плюс в репку разработчикам ОС и mmu что не допустили багов в виртуальной памяти.
И искать причину сегфола не так то и просто, особенно на параллельных программах. Надо изначально знать что пишешь.
Эх, до параллелизма я так и не дорос, слишком быдло, товарищ-Си, признаю Ваше превосходство.
Малолетний долбоёб, если сегфолта нет, то это ещё не означает, что всё заебись, а если случился эксепшон, то это очень хорошая новость.
Да кто тебя из твоей шараги отчислит, фантазер. На первом курсе что ли?
>>3837
>а если случился эксепшон
Долбоеб это ты. Исключение обраьатывает ОС. Если твоя долбоебская ОС не способна защитить тебя от нарушения целостности памяти - значит ставь нормальную ОС, не знаю на что за хуйне ты сидишь. При чём тут С вообще? Это ОС и нужно отслеживать сегфоллы, а С тут не причем. При утечки памяти, например, твоя ОС начнёт вырубать все процессы подряд. Это тоже "Очень хорошо и продкмано" по твоему? Нет, это называется "я долбоеб написал кал, а операционная система от этого кала рыгает". Хорошие ошибки - это только ошибки и предупреждения компилятора, потому что они позволяют устранить неполадку до запуска, ещё и с указанием проблемного места.
Ну расскажи что ты думаешь, раз считаешь что прав.
Kaspersky OS.
Скидывай свои варианты, мы только рады будем.

Я точно не хочу покупать и паять ардуинки? У меня есть если что, но я её один раз запрогал и забил. Разбираться что не так двадцать часов а потом узнать что просто диод пробило или кондёр, не, я это уже проходил на работе сотни раз, меня тошнит от хардварных проблем, в большинстве случаев они вызываны хуёвой закупкой компонентов или если в нашем чипе RTL нахуевертили неудачно.
Можно ли себя развлекать на C и получать нормальные знания владея только лишь компьютером и виртуалкой (мне в линуксе удобнее вести разработку, но на домашний комп ставить не хочу).
Ну научусь я сортировать эффективно массивы, обрезать строки, формировать, структуры, эмбедить asm вставки, жонглировать поинтерами и теребить алоки малоки. Делать-то что? На чём набивать руку чтобы стать неебаться эмбедед? Только интститут и вкат через практику?
raylib
А где в России топ специальности для низкого уровня? Я думаю, что только топовое ИБ направление, где на парах анализируют исполняемые файлы, да и то только курс, а может только семестр.
Эмбеддед хрен знает, но для фана сижу пишу на raylib и Dear IMGUI всякие поделки для себя, очень интересно.
Ты используешь модификатор ll для 32битного значения...
Я в душе не ебу, что у тебя там за версия компилятора, но на 14.2 всё без говна.

У меня предположение только в том, что старый printf обрабатывал переменные по адресу так, что он видел модификатор для long long и обрабатывал сразу переменную a, b. Скинул загруженные в стэк переменные для примера.
А вот теперь хз, даже мой самопальный _print_hex_ нормально обрабатывает данные https://pastebin.com/upmduS3c.
Во-первых, какая разрядность системы? Во-вторых, какая версия компилятора? В-третьих, надо копать в сторону stdarg, походу переменные неправильно обрабатываются для функций с переменным количеством параметров. В-четвёртых, введи другие значения для a и b в своей программе.

Как-то так, а дальше уже только в ассемблере копаться и смотреть какое соглашение о вызове функции стоит, stdcall или cdecl. В общем надо думать, а думать я больше не могу, прости, товарищ Си, я пошёл думать о том, что моя вайфу меня никогда не полюбит.

У меня сложная тема диплома, я не могу вывезти, товарищ Си... Зачем я её выбрал, довыёбывался...
Товарищ Си, а если Вы уже получили диплом, то почему не догадались в чём проблема кода? Или это была проверка на адекватов в треде?
Или в результате проверки Вы поняли, что я долбаёб, пиздец. ПОЧЕМУ ПОСТОЯННО ТАКИЕ ВОПРОСЫ, НА КОТОРЫЕ НЕТ ОТВЕТА, Я НЕ МОГУ ТАК ЖИТЬ!
Товарищ Си, здравствуйте, сайт сделал диззассемблер Си кода https://godbolt.org/z/GzhfsKWso
Я скомпилировал и слинковал код с использованием MASM32 https://pastebin.com/NEKE4BDF
И судя по всему это не вина ОСи Виндоус, и даже не вина компилятора, ибо он предупреждения делает, это Ваша вина, товарищ Си.
Товарищ Си, мне очень грустно, я бы хотел, чтобы моя вайфу меня любила, но она не любит меня, мне очень-очень грустно...

>Товарищ Си, а если Вы уже получили диплом, то почему не догадались в чём проблема кода?
Во-первых потому что я получил диплом на инжинера АСУ ТП. Программировать нас не учили. Разве что ПЛК на языке релейных схем. А во вторых, я своим дипломом жопу подтираю. Лучше бы на работу пошел. Вроде столько времени в лабораторные всрал - в итоге на рынке труда я ниже школьника без знаний.
Пока ты тут спамишь кринжевыми товарищами си, ты ещё не знаешь что тебя ждет голод и всеобщее обомсывание и обхаркивание таоего диплома как бесполезной корочки.
>ибо он предупреждения делает, это Ваша вина, товарищ Си.
Он не делает предупреждений. В глаза что ли долбишься. Причём тот же код на фрибсд работает нормально!!! Ану сьеби уроки учить школота блиядь.
К слову причем тут дизассемблер ДЕБИЛ. Ты не сможешь за дизассеблить код с виднды, потому что на Винде нет полноценной библиотеки Си. На Винде твой printf вызывает ConsoleWriteA, а тот в свою очередь вызывает NtDeviceIoControl. Давай назуй, задисассемблируй мне эту хуйню из kernelbase.dll.
> инжинера АСУ ТП
Да тут программирование + физика + схемотехника, вы должны быть умнее всех!
>спамишь кринжевыми товарищами си,
Я уважаю всех товарищей по Си, вы мне братья!
> тебя ждет голод и всеобщее обомсывание и обхаркивание
Я знаю, товарищ Си, я знаю.
>>6094
> Он не делает предупреждений.
Потому что надо -Wall -Wextra -Wpedantic прописывать, товарищ Си.
> нет полноценной библиотеки Си
Я не знаю, что вызывает WinAPI, но выглядит максимально прохладно и кажется, что Вы меня обманываете.
> Давай назуй, задисассемблируй мне эту хуйню из kernelbase.dll.
А вот это зря, данный компилятор диззассемблирует код на основе UNIX систем, Вы точно уверены, что он нормально отработал на BSD?
>>6095
Эх, товарищ Си, как же я ненавижу НСов, пиздец.
Я к Вам с добротой отнёсся, пытался искренне Вам помочь, а Вы меня последними бранными словами наградили. Теперь мне очень сильно грустно, я ушёл плакать, Вы плохой человек, товарищ Си.
данный диззасембер *godbolt.
>Да тут программирование + физика + схемотехника, вы должны быть умнее всех!
Умный, по горшкам дежурный, нах. Я денег бы хотел, а не чтобы анон на двачах назвал меня умным.
>я ненавижу НСов, пиздец.
Я не НС. Я гитлер.
>Вы точно уверены, что он нормально отработал на BSD?
Да. Сто процентов. Могу показать даже. То что я под виндой компилю - это виртуалка.
>Вам помочь, а Вы меня последними бранными
Ну соре все дела. Пынямать надо. День рождение Гитлера как ни как.
Ебать, на моего одного знакомого похожи, правда он себя открыто НС называл, но с Гитлером себя тож сравнивал, Вы идеалист или материалист?
Давайте скидывайте.
>Вы идеалист или материалист?
Это тебя в университете этой хуйне учат? Все эти "измы" - это придуманное в совке словоблудие. Советский человек настолько контуженный на голову, что он не может обходится без формальностей, и не нагружать всё каким-то словесным поносом. Не "нож" а "острый предмет угловатой формы, для нарезания продуктов питания, не боевой", не "я ебал твою мать" а "вы осознанно вступили в половой акт, с соверешннолетней гражданкой, находясь в трезвом состоянии". Нигде в мире так не говорят.