Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 535 70 216
C язык программирования #777 clang /clang/ Аноним 14/04/25 Пнд 20:48:22 3430902 1
17392696819130.jpg 18Кб, 235x250
235x250
AiHayasakaShino[...].png 348Кб, 640x389
640x389
Тред, посвященный прародителю всех С-подобных языков и по совместительству всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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
Аноним 15/04/25 Втр 08:56:47 3431159 2
Попалось такое:

typedef struct foo {
int bar;
int baz;
} foo_t, ⚹pfoo_t;


Если надо обозначить указатель на структуру, то нахуя перед этим писать foo_t?
Аноним 15/04/25 Втр 09:24:45 3431175 3
>>3431159
Ну типо, тут две дефениции:
foo_t обозначает псевдоним для struct foo
А pfoo_t означает псевдоним для struct foo⚹ т.е. тип указатель на эту структуру.
Зачем нужен указатель на структуру? Хз, наверное чтобы компилятор не ругался, и чтобы лишний раз преобразования типов не делать. Ясно что все указатели хранят адрес, т.е. один и тот же тип, поэтому никаких проблем нет чтобы присвоить к обычному void ⚹ наш struct foo⚹. Однако после такого присвоения мы уже не можем корректно обратиться к значению по адресу, потому что непонятно что за тип там лежит. Нужно этот воид привести к структфуу и тогда обратится. Может автор кода решил избежать этих преобразований и заранее слелал тип "указатель на структуру". Яхз
Аноним 15/04/25 Втр 12:15:48 3431298 4
>>3431175
>Ну типо, тут две дефениции

Точняк. Я привык, что

struct foo {
int bar;
int baz;
} fooi;

где fooi - обычный экземпляр. А тут через typedef сразу несколько алиасов повесили. Можно там еще через запятую добавить указатель на указатель ⚹⚹ppfoo_t и т.д. Пиздец, ну и синтаксис.
Аноним 15/04/25 Втр 12:56:31 3431334 5
>>3431298
Но это разные вещи. Тут ты:
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 написать.
Аноним 16/04/25 Срд 23:58:26 3432737 6
sample01127d606[...].jpg 77Кб, 850x989
850x989
Я пришёл сюда с двумя тезисами:

1. Только на сишке и плюсах можно писать софт, убивающий людей. Никакая другая "платформа", "экосистема" - не позволяет этого делать.
2. Отсутствие безопасности памяти - несомненная фича, и любой язык устранивший это является проблемным в самой своей глубине.
Аноним 17/04/25 Чтв 00:12:48 3432749 7
>>3432737
> Только на сишке и плюсах можно писать софт, убивающий людей. Никакая другая "платформа", "экосистема" - не позволяет этого делать.
Товарищ-си, здравствуйте! Вы имеете в виду компьютерное зрение на дронах? Всякие numpy безусловно содержат в себе под капот дизассемблированные плюсы для вычислений перемножения матриц и другой математики, но это всё ещё Питон.
Или Вы про то, что уча "низкроуровневое" программирование хочется вздёрнуться и убить себя? Тогда я с Вами согласен, у меня депрессия и апатия.

> 2. Отсутствие безопасности памяти - несомненная фича, и любой язык устранивший это является проблемным в самой своей глубине.
Сейчас очень сложно обычному программисту набедакурить с памятью, ибо ОСь сразу тебе стукнет по носу, так сказать.
Аноним 17/04/25 Чтв 01:15:20 3432769 8
f50qke5yeqwb1.jpg 48Кб, 774x1014
774x1014
>>3432749
>Товарищ-си, здравствуйте! Вы имеете в виду компьютерное зрение на дронах? Всякие numpy безусловно содержат в себе под капот дизассемблированные плюсы для вычислений перемножения матриц и другой математики, но это всё ещё Питон.
Я знал, что кто-то прибежит рассказывать про машинное зрение, но:

1. Как ты верно заметил, самая ответственная часть обыкновенно реализована на сишечке. Питон - это для рисёрча и прототипирования. И даже при рисёрче, конечный обработчик вводных в виде картиночек и модели по итогу будет являться сишным...

2. Можно взять OpenCV, который в целом почти полностью плюсы. И на его основе общаться с полётником.

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


> Сейчас очень сложно обычному программисту набедакурить с памятью, ибо ОСь сразу тебе стукнет по носу, так сказать.
Я надеюсь, ты не про сегфолты.
Аноним 17/04/25 Чтв 01:25:30 3432770 9
>>3432769
>>3432769
В том числе, а ты про что? Преобразование типов и указателей, работа с кучей?
Аноним 17/04/25 Чтв 01:36:34 3432775 10
>>3432770
Типы, указатели, контейнера. Преобразования из структур в байты и обратно. Если мы не можем уследить за данными, и это приводит к багам, может и пишем-то мы не слишком сознательно?

Исходя из моих знаний о рассеянности человеческого сознания, пока растфаги разберутся, как написать что-либо, они забудут, что они вообще хотят написать - и сделают ошибку в самой логике работы программы.
Аноним 17/04/25 Чтв 06:50:32 3432805 11
>>3432737
>софт, убивающий людей
Ножами и вилками тоже убивают.
Аноним 17/04/25 Чтв 10:50:10 3432881 12
>>3432749
> Сложно
Нет. Большинство каличей не итт оп пикрл как бы намекает , на в ей борде да и вообще везде сдабо понимают что такое память и указатели. Да ось не даст тебе убить себя, но логику программы это никак не защитит.
Аноним 17/04/25 Чтв 10:51:59 3432882 13
>>3432881
Про пик мимо. Думал это плюсотред, там пик рилейтед.
Аноним 17/04/25 Чтв 12:08:30 3432958 14
>>3432769
>сегфолты
Какое же дно пиздец, сегфолт - это благо и хорошо.
Аноним 17/04/25 Чтв 18:21:56 3433388 15
image.png 343Кб, 471x477
471x477
>>3432958
>сегфолт - это благо хорошо
это ты так своему барину обьясняешь, когда он тебя отчитывает за говнокод?

-Сычёв, какого хуя у тебя код рандомно сегфолится, хули ты там настрочил, ищи ошибку мудень
-Кабан кабаныч, вы не понимаете, сегфол - это хорошо а не плохо! Это означает можно экстренно завершить программу, а не ждать 30 минут, пока мой говнокод завершится.
Аноним 17/04/25 Чтв 21:15:57 3433533 16
>>3433388
А я поддержу товарища-Си выше и скажу, что мне тоже нравятся сегфолты, они значат, что ты набедакурил что-то в памяти и куда-то не туда залез, а значит область кода сужается и легче найти ошибку с указателями.
Аноним 18/04/25 Птн 00:46:49 3433619 17
>>3433533
Но сегфол это не ошибка компилятора С. Это ошибка операционной системы. Ты и на асме можешь наговнокодить и получить сегфол. Это получается плюс в репку разработчикам ОС и mmu что не допустили багов в виртуальной памяти.

И искать причину сегфола не так то и просто, особенно на параллельных программах. Надо изначально знать что пишешь.
Аноним 18/04/25 Птн 01:35:31 3433628 18
>>3433619
Эх, до параллелизма я так и не дорос, слишком быдло, товарищ-Си, признаю Ваше превосходство.
Аноним 18/04/25 Птн 10:57:23 3433826 19
Эх, сейчас мне пизда, скоро отчислят за неуспеваемость и вместо Си, буду чтить товарища главу призывной комиссии, не будьте как я, товарищи-Си, учитесь хорошо.
Аноним 18/04/25 Птн 11:19:38 3433837 20
>>3433388
Малолетний долбоёб, если сегфолта нет, то это ещё не означает, что всё заебись, а если случился эксепшон, то это очень хорошая новость.
Аноним 18/04/25 Птн 15:43:28 3434109 21
>>3433826
Да кто тебя из твоей шараги отчислит, фантазер. На первом курсе что ли?

>>3433837
>а если случился эксепшон
Долбоеб это ты. Исключение обраьатывает ОС. Если твоя долбоебская ОС не способна защитить тебя от нарушения целостности памяти - значит ставь нормальную ОС, не знаю на что за хуйне ты сидишь. При чём тут С вообще? Это ОС и нужно отслеживать сегфоллы, а С тут не причем. При утечки памяти, например, твоя ОС начнёт вырубать все процессы подряд. Это тоже "Очень хорошо и продкмано" по твоему? Нет, это называется "я долбоеб написал кал, а операционная система от этого кала рыгает". Хорошие ошибки - это только ошибки и предупреждения компилятора, потому что они позволяют устранить неполадку до запуска, ещё и с указанием проблемного места.
Аноним 18/04/25 Птн 15:56:25 3434127 22
>>3434109
Тупорылое дерьмо, нахуй ты вообще пишешь, если не понимаешь о чём вообще говоришь?
Аноним 18/04/25 Птн 16:31:35 3434153 23
>>3434127
Ну расскажи что ты думаешь, раз считаешь что прав.
Аноним 19/04/25 Суб 17:39:49 3435114 24
Какие сишные проекты считаются самыми лучшими в плане качества и красоты кода?
Аноним 19/04/25 Суб 17:58:46 3435134 25
Аноним 19/04/25 Суб 18:42:05 3435159 26
Аноним 19/04/25 Суб 20:55:10 3435245 27
>>3435159
>скидывает хакнутую-перехакнутую дольбильню
Аноним 19/04/25 Суб 21:02:14 3435255 28
>>3435245
Скидывай свои варианты, мы только рады будем.
Аноним 19/04/25 Суб 23:56:36 3435339 29
chrome2022.09.2[...].png 409Кб, 669x603
669x603
И чё делать-то на C?

Я точно не хочу покупать и паять ардуинки? У меня есть если что, но я её один раз запрогал и забил. Разбираться что не так двадцать часов а потом узнать что просто диод пробило или кондёр, не, я это уже проходил на работе сотни раз, меня тошнит от хардварных проблем, в большинстве случаев они вызываны хуёвой закупкой компонентов или если в нашем чипе RTL нахуевертили неудачно.

Можно ли себя развлекать на C и получать нормальные знания владея только лишь компьютером и виртуалкой (мне в линуксе удобнее вести разработку, но на домашний комп ставить не хочу).

Ну научусь я сортировать эффективно массивы, обрезать строки, формировать, структуры, эмбедить asm вставки, жонглировать поинтерами и теребить алоки малоки. Делать-то что? На чём набивать руку чтобы стать неебаться эмбедед? Только интститут и вкат через практику?
Аноним 20/04/25 Вск 00:04:30 3435344 30
Аноним 20/04/25 Вск 00:06:22 3435346 31
>>3435339
А где в России топ специальности для низкого уровня? Я думаю, что только топовое ИБ направление, где на парах анализируют исполняемые файлы, да и то только курс, а может только семестр.
Аноним 20/04/25 Вск 03:21:14 3435379 32
>>3435339
Эмбеддед хрен знает, но для фана сижу пишу на raylib и Dear IMGUI всякие поделки для себя, очень интересно.
Аноним 20/04/25 Вск 12:49:26 3435647 33
>>3435114
>красоты кода
Нахуй иди сразу.
>>3435339
>стать неебаться эмбедед
В ембедед сишка не является тут предметной областью. Если нужны проектики для практики, напиши дисковую базу.
>>3435346
>в России
Ебало?
Аноним 20/04/25 Вск 14:46:00 3435740 34
IMG202504201644[...].jpg 78Кб, 1280x493
1280x493
IMG202504201644[...].jpg 75Кб, 1096x494
1096x494
Каво блядь???! Вот тебе и гсс под шиндус. На фряхе такого нет.
Аноним 20/04/25 Вск 16:11:22 3435788 35
>>3435740
Ты используешь модификатор ll для 32битного значения...
Аноним 20/04/25 Вск 16:22:37 3435791 36
Аноним 20/04/25 Вск 16:26:26 3435792 37
image 34Кб, 788x453
788x453
image 80Кб, 1182x934
1182x934
>>3435791
Я в душе не ебу, что у тебя там за версия компилятора, но на 14.2 всё без говна.
Аноним 20/04/25 Вск 16:40:06 3435802 38
image 12Кб, 951x662
951x662
>>3435740
У меня предположение только в том, что старый printf обрабатывал переменные по адресу так, что он видел модификатор для long long и обрабатывал сразу переменную a, b. Скинул загруженные в стэк переменные для примера.
Аноним 20/04/25 Вск 17:41:38 3435843 39
>>3435802
А вот теперь хз, даже мой самопальный _print_hex_ нормально обрабатывает данные https://pastebin.com/upmduS3c.

Во-первых, какая разрядность системы? Во-вторых, какая версия компилятора? В-третьих, надо копать в сторону stdarg, походу переменные неправильно обрабатываются для функций с переменным количеством параметров. В-четвёртых, введи другие значения для a и b в своей программе.
Аноним 20/04/25 Вск 17:42:03 3435844 40
Аноним 20/04/25 Вск 18:01:17 3435855 41
image 40Кб, 1618x539
1618x539
>>3435740
Как-то так, а дальше уже только в ассемблере копаться и смотреть какое соглашение о вызове функции стоит, stdcall или cdecl. В общем надо думать, а думать я больше не могу, прости, товарищ Си, я пошёл думать о том, что моя вайфу меня никогда не полюбит.
Аноним 20/04/25 Вск 18:04:02 3435859 42
IMG202504202003[...].jpg 61Кб, 931x382
931x382
Аноним 20/04/25 Вск 18:06:09 3435860 43
image 51Кб, 1849x527
1849x527
>>3435855
Господи, я насрал себе в штаны, вот поэтому моя вайфу меня и не любит, простите меня, товарищи Си, теперь точно ушёл грустить и плакать. Вот исправленная картинка.
>>3435859
Прости, товарищ Си, я ушёл, давай через пару часов?
Аноним 20/04/25 Вск 18:10:27 3435862 44
>>3435859
Короче, я пишу этот пост и точно ухожу, прошу тебя, замени 11 строчку на эту printf("%lx x %lx = %llx\n", a, b, c);

И скажи стал ли вывод лучше.

Я ушёл плакать по своей вайфу. Всё о чём я думал и свои предположения я уже написал, прости, если не помог, я честно пытался, прости... >>3435860
Аноним 20/04/25 Вск 18:44:57 3435918 45
>>3435862
Да, вывод стал нормальным.
Аноним 20/04/25 Вск 19:48:41 3436004 46
>>3435918
Что тебе ещё надо? Я больше не способен тебе помочь...
Аноним 20/04/25 Вск 19:57:11 3436010 47
>>3436004
Учись! А то отчислят! Меня вон уже отчислили... С 6 курса, с дипломом магистра.
Аноним 20/04/25 Вск 20:13:08 3436021 48
>>3436010
У меня сложная тема диплома, я не могу вывезти, товарищ Си... Зачем я её выбрал, довыёбывался...

Товарищ Си, а если Вы уже получили диплом, то почему не догадались в чём проблема кода? Или это была проверка на адекватов в треде?
Аноним 20/04/25 Вск 20:22:28 3436034 49
>>3436021
Или в результате проверки Вы поняли, что я долбаёб, пиздец. ПОЧЕМУ ПОСТОЯННО ТАКИЕ ВОПРОСЫ, НА КОТОРЫЕ НЕТ ОТВЕТА, Я НЕ МОГУ ТАК ЖИТЬ!
Аноним 20/04/25 Вск 21:04:57 3436072 50
>>3435740
Товарищ Си, здравствуйте, сайт сделал диззассемблер Си кода https://godbolt.org/z/GzhfsKWso
Я скомпилировал и слинковал код с использованием MASM32 https://pastebin.com/NEKE4BDF

И судя по всему это не вина ОСи Виндоус, и даже не вина компилятора, ибо он предупреждения делает, это Ваша вина, товарищ Си.

Товарищ Си, мне очень грустно, я бы хотел, чтобы моя вайфу меня любила, но она не любит меня, мне очень-очень грустно...
Аноним 20/04/25 Вск 21:19:59 3436090 51
artworks-IAJQAv[...].jpg 50Кб, 500x500
500x500
>>3436021
>Товарищ Си, а если Вы уже получили диплом, то почему не догадались в чём проблема кода?
Во-первых потому что я получил диплом на инжинера АСУ ТП. Программировать нас не учили. Разве что ПЛК на языке релейных схем. А во вторых, я своим дипломом жопу подтираю. Лучше бы на работу пошел. Вроде столько времени в лабораторные всрал - в итоге на рынке труда я ниже школьника без знаний.

Пока ты тут спамишь кринжевыми товарищами си, ты ещё не знаешь что тебя ждет голод и всеобщее обомсывание и обхаркивание таоего диплома как бесполезной корочки.
Аноним 20/04/25 Вск 21:24:54 3436094 52
>>3436072
>ибо он предупреждения делает, это Ваша вина, товарищ Си.
Он не делает предупреждений. В глаза что ли долбишься. Причём тот же код на фрибсд работает нормально!!! Ану сьеби уроки учить школота блиядь.
К слову причем тут дизассемблер ДЕБИЛ. Ты не сможешь за дизассеблить код с виднды, потому что на Винде нет полноценной библиотеки Си. На Винде твой printf вызывает ConsoleWriteA, а тот в свою очередь вызывает NtDeviceIoControl. Давай назуй, задисассемблируй мне эту хуйню из kernelbase.dll.
Аноним 20/04/25 Вск 21:25:58 3436095 53
Ладно извини. Я пьяный. Праздную день рождение Гитлера
Аноним 20/04/25 Вск 21:29:31 3436101 54
VID202504202329[...].mp4 556Кб, 640x1138, 00:00:13
640x1138
Аноним 20/04/25 Вск 21:42:06 3436111 55
>>3436090
> инжинера АСУ ТП
Да тут программирование + физика + схемотехника, вы должны быть умнее всех!
>спамишь кринжевыми товарищами си,
Я уважаю всех товарищей по Си, вы мне братья!
> тебя ждет голод и всеобщее обомсывание и обхаркивание
Я знаю, товарищ Си, я знаю.

>>3436094
> Он не делает предупреждений.
Потому что надо -Wall -Wextra -Wpedantic прописывать, товарищ Си.
> нет полноценной библиотеки Си
Я не знаю, что вызывает WinAPI, но выглядит максимально прохладно и кажется, что Вы меня обманываете.
> Давай назуй, задисассемблируй мне эту хуйню из kernelbase.dll.
А вот это зря, данный компилятор диззассемблирует код на основе UNIX систем, Вы точно уверены, что он нормально отработал на BSD?

>>3436095
Эх, товарищ Си, как же я ненавижу НСов, пиздец.

Я к Вам с добротой отнёсся, пытался искренне Вам помочь, а Вы меня последними бранными словами наградили. Теперь мне очень сильно грустно, я ушёл плакать, Вы плохой человек, товарищ Си.
Аноним 20/04/25 Вск 21:43:00 3436113 56
>>3436111
данный диззасембер *godbolt.
Аноним 20/04/25 Вск 21:57:59 3436125 57
>>3436111
>Да тут программирование + физика + схемотехника, вы должны быть умнее всех!
Умный, по горшкам дежурный, нах. Я денег бы хотел, а не чтобы анон на двачах назвал меня умным.

>я ненавижу НСов, пиздец.
Я не НС. Я гитлер.

>Вы точно уверены, что он нормально отработал на BSD?
Да. Сто процентов. Могу показать даже. То что я под виндой компилю - это виртуалка.

>Вам помочь, а Вы меня последними бранными
Ну соре все дела. Пынямать надо. День рождение Гитлера как ни как.
Аноним 20/04/25 Вск 22:00:42 3436128 58
Гитлер злой и обиженный неудачник.. но в то же время художник и романтик! Литерали ми!
Аноним 20/04/25 Вск 22:03:03 3436132 59
>>3436125
Ебать, на моего одного знакомого похожи, правда он себя открыто НС называл, но с Гитлером себя тож сравнивал, Вы идеалист или материалист?
Аноним 20/04/25 Вск 22:52:55 3436161 60
>>3436125
Давайте скидывайте.
Аноним 21/04/25 Пнд 08:10:24 3436267 61
>>3436132
>Вы идеалист или материалист?
Это тебя в университете этой хуйне учат? Все эти "измы" - это придуманное в совке словоблудие. Советский человек настолько контуженный на голову, что он не может обходится без формальностей, и не нагружать всё каким-то словесным поносом. Не "нож" а "острый предмет угловатой формы, для нарезания продуктов питания, не боевой", не "я ебал твою мать" а "вы осознанно вступили в половой акт, с соверешннолетней гражданкой, находясь в трезвом состоянии". Нигде в мире так не говорят.
Аноним 21/04/25 Пнд 10:48:59 3436377 62
>>3436267
>Нигде в мире так не говорят.
Так они там и писать/читать не умеют, нашел с чем сравнивать
Аноним 21/04/25 Пнд 12:36:27 3436525 63
>>3436125
Если бы ты был реально умным, то давно бы чего да добился, а ты просто хуесос с огромным ЧСВ, который думает, что за факт его существования ему все должны.
Аноним 21/04/25 Пнд 12:47:52 3436543 64
>>3436525
>Если бы ты был реально умным, то давно бы чего да добился, а ты просто хуесос с огромным ЧСВ, который думает, что за факт его существования ему все должны.
Чё сказать хотел, долбоёб?
Аноним 21/04/25 Пнд 12:48:58 3436546 65
Нормально ли использовать указатели для решения любой задачи на C?
Например, нужно найти количество вхождений подстроки в строке. Я беру указатель и присваиваю ему значение strstr(строка, подстрока) и засовываю его в цикл while, проверяя чтобы он не был равен NULL. После нахождения вхождения я увеличиваю указатель на 1 (сдвигаю на следующую ячейку памяти), после чего цикл повторяется.
Эту задачу можно решить без указателей? Вообще это не считается болезнью, что теперь при решении любых задач я думаю про ячейки памяти и указатели?
Аноним 21/04/25 Пнд 12:59:50 3436551 66
>>3436543
Я уже всё сказал, хуйло метиловое.
Аноним 21/04/25 Пнд 13:15:36 3436569 67
image.png 217Кб, 512x451
512x451
>>3436551
попкукал что-то обиженка и сдрыснул

>>3436546
код неси, не понятно. Но вообще вот
>вхождения я увеличиваю указатель на 1 (сдвигаю на следующую ячейку памяти)
так типо часто делают на с. Я бы предпочёл всё же скобочкаими это оформалять [] потому что это понятнее. Но разницы особо нет.
> Вообще это не считается болезнью, что теперь при решении любых задач я думаю про ячейки памяти и указатели?
Нет. Это как раз так сказать "парадигма" языка С, то что тут именно что байтоёбство и размышление в контексте байтов. Это как раз правильный подход. Вот мыслить категорями высокоуровневых яп это как раз вредно, например структуры пихать в качестве аргументов функций итд.
Аноним 21/04/25 Пнд 13:19:30 3436572 68
>>3436094
> Ты не сможешь за дизассеблить код с виднды, потому что на Винде нет полноценной библиотеки Си
Что? Я вообще нихуя не понял, это как? А .exe из-за святого духа работают? А компилятор объектники как делает?

> На Винде твой printf вызывает ConsoleWriteA, а тот в свою очередь вызывает NtDeviceIoControl
А это интересно уже. Лучше бы про это рассказал, а не про хуйню какую-то, про системные вызовы, что printf под капотом вызывает в винде, что в юниксах.

Только это всё ещё ты виноват, что код не работает, ты если бы нормально с компилятором умел работать, то увидел бы, что он предупреждения делает. Да и под винду у новых компиляторов такой проблемы нет.
Аноним 21/04/25 Пнд 13:25:05 3436579 69
>>3436569
Тебе первым же сообщением >>3435788, кстати, ответили, хуйло метиловое.
Аноним 21/04/25 Пнд 13:25:53 3436580 70
>>3436569
Ленивый выблядок, которого турнули из магистратуры, а он сюда пришёл ныться, пошёл в жопу, хуесос, ты мразь и гандон.
Аноним 21/04/25 Пнд 13:27:33 3436583 71
>>3436546
>Нормально ли использовать указатели для решения любой задачи на C?
Да.
>Эту задачу можно решить без указателей?
Да.
>это не считается болезнью, что теперь при решении любых задач я думаю про ячейки памяти и указатели?
Нет.
Аноним 21/04/25 Пнд 13:28:11 3436585 72
>>3436572
>Что? Я вообще нихуя не понял, это как? А .exe из-за святого духа работают? А компилятор объектники как делает?
Нихуя не понимаешь, да? Вот и молчи

>>3436579
Эти все предупреждения роли не играют, дятел. Число "с" там longlong, что соотвествует llx (long long hex).
К слову, на FreeBSD всё исправно работает. Пиздец долбоёб, увидел предупреждение и молится на него. Читать ты конечно же это предупреждение не читал.

>>3436580
утютю
Аноним 21/04/25 Пнд 13:32:21 3436593 73
>>3436585
Ты долбаёб или что? Ты же про CRT слышал и ещё пиздишь, что на винде нельзя дизассмеблировать Си код, ты буквально это и написал, скотина слепая.

> llx (long long hex)
Покажи мне такой тип hex, хуесосина, это флаг для форматного вывода, который работает с переменной как с безнаковой, пидор ты ебанный.

> К слову, на FreeBSD всё исправно работает.
на винде тоже можно написать код так, чтобы он исправно раюотал и даже компилятор с cppcheck ошибок не выдавал, это всё твоя вина, криворукая залупа.
Аноним 21/04/25 Пнд 13:37:23 3436596 74
>>3436593
>Ты долбаёб или что? Ты же про CRT слышал и ещё пиздишь, что на винде нельзя дизассмеблировать Си код, ты буквально это и написал, скотина слепая.
У тебя на винде код целиком и полностью на dll-ках работает. Даже с ключами -static. Если ты это не понимаешь - ну ты идиот.
>Покажи мне такой тип hex, хуесосина, это флаг для форматного вывода, который работает с переменной как с безнаковой, пидор ты ебанный.
Вай вай вай, какой умный малыш. И тебя не волнует что я long long hex нигде даже типом не назвал. Это расшифровка.
>всё твоя вина, криворукая залупа.
Соре, я не разработчик GCC, ты ошибся
Аноним 21/04/25 Пнд 13:42:13 3436598 75
>>3436596
Блять, а какой процесс на любой ОСи может работать без использования dll/so, если тебе в любом случае придётся взаимодействовать с железом через ОСь, даже если ты просто программу напишешь, в которой не будут подключаться библиотеки, ты про что говоришь, блять, сука ебанная.
Аноним 21/04/25 Пнд 13:44:55 3436600 76
>>3436598
>Блять, а какой процесс на любой ОСи может работать без использования dll/so, если тебе в любом случае придётся взаимодействовать с железом через ОСь
Через системные вызовы, порридж!!! Напрямую, через програмные прерывания, таблицу системных вызовов можно работать с обьектами ядра. И на windows это работает точнно так же. Если ты дизасемблируешь ntdll, то ты там не найдёшь ссылок на другие библиотеки. Ого, эво как да? А вот так, там чистые сисколы используются.
Аноним 21/04/25 Пнд 13:46:56 3436602 77
>>3436600
Напиши мне прогу которая в регистр EAX записывает 0xffff и делает возврат и, чтобы не было библиотек от ОСи.
Аноним 21/04/25 Пнд 13:50:54 3436604 78
image.png 47Кб, 160x160
160x160
>>3436602
>Напиши мне прогу которая в регистр EAX записывает 0xffff и делает возврат и, чтобы не было библиотек от ОСи.

mov eax, 0xffff
ret

та-дааам.
Аноним 21/04/25 Пнд 13:54:21 3436607 79
image 3Кб, 232x110
232x110
>>3436604
Угу, и по твоему ОСь не прилинкует сюда либы? Ну, ладно...

Я тебя не понимаю, ты на что опираешься? По моим подозрениям на том Танненбаума по ОСям.
Аноним 21/04/25 Пнд 13:58:46 3436610 80
>>3436607
>Угу, и по твоему ОСь не прилинкует сюда либы?
Какие либы? ret, mov - это всё мнемоники команд процессора, для них не нужны никакие либы.
Аноним 21/04/25 Пнд 13:59:40 3436611 81
>>3436607
>>3436610

Блять, ну, невозможно даже код на ассемблере написать, чтобы он не использовал kernel32 на винде, ибо там как раз эти ебучие сисколы.

Нихуя я блять тебя не понимаю, нихуя, блять.

Какую мне книгу прочитать, чтобы я понял, что ты, блять, пишешь?
Аноним 21/04/25 Пнд 14:00:30 3436612 82
>>3436611
Мы не говорим о BIOS и прошивках сейчас, мы говорим о коде в контексте ОСи.
Аноним 21/04/25 Пнд 14:05:09 3436614 83
>>3436610
А как ОСь должна понимать с каким ядром ты работаешь?
Я тебя не понимаю, вообще, блять, не понимаю.
Какую книгу мне надо прочитать, чтобы я тебя понял?
Аноним 21/04/25 Пнд 14:05:18 3436615 84
image.png 441Кб, 1280x593
1280x593
>>3436611
>Блять, ну, невозможно даже код на ассемблере написать, чтобы он не использовал kernel32 на винде, ибо там как раз эти ебучие сисколы.
Теоретически - возможно. Практически - все эти сисколы не задокументированы, и непонятно как они работают. Даже разработчики wine и ReactOS не всё знают. Поэтому, на винде можно пользоваться только kernel32.dll, потому что это последнее на что есть инфа.

Вот на скрине функция которая в конце концов использует сискол. Но что он делает - я так и не смог догадаться. Нужно знать как устроена windows чтобы понять как правильно использовать этот сискол. Я только PEB смог правильно интерпритировать. И то на угад.
Аноним 21/04/25 Пнд 14:09:46 3436618 85
>>3436615
Какую книгу мне надо прочитать, чтобы я тебя понял???
???
???
???
Аноним 21/04/25 Пнд 14:12:25 3436620 86
>>3436614
>А как ОСь должна понимать с каким ядром ты работаешь?
Она и не должна понимать. Ядро находится на 0 уровне. Когда ты совершаешь сискол, ты буквально даёшь процессору команду оторваться от юзермода и выполнить что-то из режима ядра. В режиме ядра по-идее всё архаично как на MS DOS, поэтому там всё работает по протоколу ядра - т.е. если ты что-то сделаешь неправильно, никто тебя об этом не предупредит. Протокол типо вот регистр eax нужен для того чтобы номер системного вызова передать - соглашение такое.

>>3436618
я хз.
Аноним 21/04/25 Пнд 14:16:18 3436627 87
>>3436620
Откуда ты эти знания подчерпнул?
Аноним 21/04/25 Пнд 14:18:53 3436631 88
>>3436627
столярова прочитал, попрограммировал немного
Аноним 21/04/25 Пнд 14:20:21 3436633 89
>>3436631
Какая книга Столярова или цикл книг? Про ОСи? Почему так сложно дать название? В какой программе код учился дизассемблировать?
Аноним 21/04/25 Пнд 14:22:00 3436635 90
>>3436633
учился код дизассемблированный читать*
Аноним 21/04/25 Пнд 14:25:31 3436639 91
>>3436633
>В какой программе код учился дизассемблировать?
Ghidra, бесплатная, кросплатформенная и довольно неплохо дизассемблирует
>Какая книга Столярова или цикл книг? Про ОСи?
Там просто "введение в профессию". Помоему у него других книг и нет (а те что есть - старьё ненужное). Второй том, помоему, после изучения С, идёт более подробный обзор устройства unix.
>учился код дизассемблированный читать
Не учился специально, просто смотрю чё там написано. Если адреса есть - значит это код дизассемблированный, если нет - значит это полезная информация всякая от гидры. Покопался немного, посмотрел как форматы PE .exe выглядят как система загружает программу. Вроде ничего больше не читал особо. Работу надо искать, а не байтоёбствовать.
Аноним 21/04/25 Пнд 14:32:29 3436643 92
>>3436639
Понял, спасибо, ладно, сорри, что бугуртил. Спасибо, что расписал, но мне кажется, что ты меня троллишь.
А у него реально в книге про Си о кольцах защиты расписано? Что-то не верится, если честно.
Аноним 21/04/25 Пнд 14:44:53 3436651 93
image.png 41Кб, 640x480
640x480
>>3436643
>А у него реально в книге про Си о кольцах защиты расписано? Что-то не верится, если честно.
Нет, там только общая информация. Но да, там обьяснено что такое "защита памяти" "юзерспейс" и зачем оно вообще нужно. Про кольца я слышал задолго до прочтения этой книги, но во всяких роликах мне затирали, что якобы "юзерспейс" нужен для "безопасности", что вот злые хакеры хотят попасть в ядро и похитить память, а защита памяти якобы защищает от этих хаккеров. У меня всегда это вызывало критику, потому что это звучит как бред. Ну и не только звучит, это и есть бред. Вот у столярова пояснено, что "защита памяти", по сути защищает компьютер от самого себя, а не от кого-то другого. Ведь на нулевом уровне всё просто и логично, до тех пор, пока не возникают парралельные процессы. Все же ОС сейчас многозадачные, никто не сидит на MS-DOS, поэтому появляются такие сущности как "параллелньые процессы", ну и их всех надо умело размещать в памяти, с учётом того, что каждый из них может в любой момент завершится. И ведь если всё складывать просто в "плоскую" абсолютную память, то появляется "фрагментация". т.е. процессы просто могут в шахматном порядке встать и заполонить всю память. Более того, процессы могут "разростаться" и аллоцировать больше памяти". Поэтому в реальности, абсолютная память забивается в случайном порядке, а процессы, видят сконвертированную на "страницы" память из mmu. Таким образом. получается сделать абстракцию в виде "гибкой" памяти, которую можно в любой момент выделить и освободить. И всё это само собой накладывает ограничения в виде необходимости не допустить ошибок. Поэтому и появляются разные кольца "защиты". Вприципе, можно сделать многозадачную ОС и на нулевом кольце защиты вон TempleOS, например. Но это не то, чтобы что-то работоспособное.
Аноним 21/04/25 Пнд 16:13:34 3436734 94
>>3436585
Слушай, а если всё таки возващаться, то что ты имел в виду под
>>3436094
> не сможешь за дизассеблить код с виднды, потому что на Винде нет полноценной библиотеки Си
Аноним 21/04/25 Пнд 17:03:40 3436796 95
>>3436734
Я имел ввиду, следующее: вот есть так называемая "стандартная библиотека С", откомпилированная статично libc.a и динамично libc.so. Функции в ней для ввода вывода типо printf используют системный вызов write (0x4), который собственно пишет информацию в стандартный поток вывода (stdio). Ты можешь откомпилировать unix-программу с флагом -static, и получить полностью самостоятельный машинный код, не содержащий в себе никаких зависимостей от динамических библиотек. То есть, если версия libc изменится, или вовсе если перекинуть эту программу на ОС без libc, то она запустится и будет работать. Собственно, при декомпиляции этой программы, ты можешь отследить какие системные вызовы она использует, и как этот код детально работает через дебаггер.
Вот только в винде ситуация другая. На винде нет таких элементов ядра как "стандартный поток вывода", на винде потоки устроены иначе. Более того, то как винда устроена - не задокументированно. Никто кроме разработчиков microsoft не знает как использовать системные вызовы. Следовательно, как работает printf на винде? Он на самом деле иммитирует работу printf, средствами winapi. То есть, стандартная библиотека под windows представляет собой Trunk-функции для windows-api и не более того. Как я уже говорил, printf вызывает WriteConsoleA, а та в свою очередь вызывает NtDeviceIoControl. Поэтому, даже когда ты с ключем --static компилируешь программу под винду, статично зашиваются все библиотеки кроме стандартной. На винде нет статичных версий библиотек ntdll (она даже называется dll лол). Поэтмоу, когда ты дизасемблируешь виндоусовскую программу - ты не видишь в ней ничего, кроме основного её функционала и ссылки на winapi. То есть, таким образом, портирование программы лишено смысла, потому что её релальный функционал проще изобрести самому - он находится на поверхности, его не сложно разработать с нуля, а остальной функционал отсутствует - он находится в динамических библиотеках.
Ну и тогда, само собой, могут появляться ошибки в выводе, потому что ничего не известно о том как винда обрабатывает буферы для вывода информации.
Аноним 21/04/25 Пнд 23:09:42 3437068 96
>>3430902 (OP)
> в русском переводе

^ Ничего не изменилось, Если вам нужен русский перевод - вы идете нахуй
Аноним 22/04/25 Втр 00:39:35 3437086 97
>>3436796
>На винде нет статичных версий библиотек ntdll (она даже называется dll лол).
ntdll это ядро, ты собрался ядро статически вкомпилировать в приложения, чтобы они работали мимо ядра, ебанат?
Если в линуксе так делают, значит там ядро говно, нихуя не реализовано, вот и костыляют функционал внешними библиотеками. Естественно такое говно ни с чем не совместимо, приходится компилировать отдельно на каждое ведро со своими костылями.
>Ну и тогда, само собой, могут появляться ошибки в выводе, потому что ничего не известно о том как винда обрабатывает буферы для вывода информации.
Винда - графическая ОС, консоль там для совместимости с DOS только, то есть не нужна, для обмена данными существуют другие механизмы, всё документировано. Лезешь в винду не понимая что это такое кукарекая зашоренные предрассудки.
Аноним 22/04/25 Втр 00:41:29 3437087 98
>>3437086
Товарищ Си, а что Вы посоветуете почитать, чтобы понять и осознать Вами написанное в полной мере? Таненбаум про ОСи подойдёт?
Аноним 22/04/25 Втр 02:28:52 3437105 99
image.png 98Кб, 230x219
230x219
>>3437086
>ntdll это ядро
Нет. Ядро работает на 0 кольце до загрузки системы. Ядро ты не видишь и не можешь увидеть, потому что это голый код. NtDll это user-mode библиотека, она по-умолчанию не может быть ядром. Чё несешь. ntdll ближе всех к ядру, потому что как раз она представляет собой обёртки системных вызовов.
>чтобы они работали мимо ядра, ебанат?
Ебанат это ты. Хотя бы википедию почитай перед тем как такой бред нести.>>3437086
>Если в линуксе так делают, значит там ядро говно, нихуя не реализовано, вот и костыляют функционал внешними библиотеками. Естественно такое говно ни с чем не совместимо, приходится компилировать отдельно на каждое ведро со своими костылями.
Ахаха что ты несёшь контуженный. Никто не собирается вкомпилировать ядро, это блядь вообще не так устроено. Ты хоть что-то собирал на голом железе, на микроконтрллерах?
Вот такие безграмотные олухи затируют что линукс - говно
>Винда - графическая ОС, консоль там для совместимости с DOS только, то есть не нужна, для обмена данными существуют другие механизмы, всё документировано.
"графическая ос" пиздец ты посмешище. Какая впизду "графическая ОС". Ты видел хоть одного человека с реальным терминалом в 2025 году?? Да при наличие настоящего vt100 ты можешь разбогатеть сдав его в антикварный магазин! У всех компьютеров всё выводится через монитор. На выводе монитора что написано? Правильно VGA - что тут значит буквока "А" - это означает "аналоговый". Это значит, скотина ты тупорылая, что у тебя вывод идёт через видеокарточку. И чтобы тебе консольку открыть - тебе приходится использовать драйвера видеокарточки для отрисовки знакосимволов. ОППА! получается Unix что тоже ГРАФИЧЕСКАЯ ОПЕРАЦИОННАЯ СИСТЕМА???? А что если я тебе скажу что на Unix ты тоже kldload'ом подгружаешь графическое ядро, и у тебя также вся графика xorg работает в kernelspace? Да да, прямо как на виндоус. Обтекай короче. Ты меня насмешил.

>>3437087
Он олух тупой. Столярова лучше прочитай. Столяров шиз - но вприципе неплохие книги пишет.
Аноним 22/04/25 Втр 02:37:16 3437106 100
>>3437105
И как тебя такого умного из маги турнули?
Аноним 22/04/25 Втр 02:45:14 3437107 101
>>3437106
У тебя был бы шанс иронично сманяврировать, если бы не предыдущий твой пост, исходя из котрого ты помоему даже 9 классов ещё пока не окончил.
Ntdll у него ядро! представте себе, файловой системы ещё нет никакой, а уже есть полноценная dll-ка! В следующий раз начинай сразу с оскорблений, не пытайся блеснуть знаниями которые у тебя отсутсвуют.
Аноним 22/04/25 Втр 03:13:10 3437110 102
>>3437107
Я другой анон, который вчера с тобой спорил.
Аноним 22/04/25 Втр 03:40:54 3437111 103
>>3437110
Я так-то без негатива, ты человек шарящий, просто у тебя подача порой странная и ты суть вопроса не раскрываешь, чтобы тебя мог понять другой человек, или хотя бы по запросу в поисковом фиде что-то найти.
Но у тебя крайне глубокие познания для человека, которые на АСУ ТП учился.
Аноним 22/04/25 Втр 03:46:47 3437112 104
>>3437111
Но при этом ты скомпилировал код без ключа на все предупреждения, да и вообще вопрос нахуя ты на 32битной виртуалке запускал код, если бы тебе было интересно как 32битная система работает с 64 битными значениями, то скорее всего бы под родной линухой скомпилил код с ключом -m32.

Короче, это всё максимально странно и подозрительно.
Аноним 22/04/25 Втр 03:56:57 3437114 105
>>3437111
>>3437112
Это вообще третий анон тебе ответил. Пиздец вы извращения тут устроили, геи
Аноним 22/04/25 Втр 03:58:37 3437115 106
>>3437112
>да и вообще вопрос нахуя ты на 32битной виртуалке запускал код, если бы тебе было интересно как 32битная система работает с 64 битными значениями,
да ты в глаза что ли долбишься? Там буквально на том же скришоте вывод назад всё нормально интерпритируется. Система 64 бит. Я сайзофом всё проверил. Очевидно, ошибка в gcc
Аноним 22/04/25 Втр 04:07:00 3437117 107
image.png 442Кб, 996x907
996x907
>>3437112
Вот специально для тебя выделил. Код абсолютно одинаковый.
Эти выражения выводятся в рамках одной программы.
llx -> c
llx -> c
И в третий раз, какого-то хуя он выводит непонятную крокозябру.
И заметь.. c - это у нас long long, т.е. llx.

Ну конечно... виноват я что какое-то предупреждение не посмотрел. А схуя ли я его смотреть должен?
У нас a и b - это int по 32 бита. Можем ли мы в 64 бита поместить 32? можем. Что мешает. Мы не можем в меньшее складывать большее. А в большее меньшее - можем. И портится при этом никак не связанная с этим переменная "с", которая соотвествует своему типу.

Ну конечно же виноват анон который -wall не поставил. Ни разу не разрабы gcc.
Аноним 22/04/25 Втр 04:20:26 3437118 108
image.png 25Кб, 632x552
632x552
>>3437115
Вот ещё пруф. Откопилировал при помощи tcc на этой же системе - Всё почему-то правильно работает. А вот gcc нет. Что же опять не так??? Может мне флаг -O0 сделать.. а нет не помогает ничерта.
Аноним 22/04/25 Втр 04:28:40 3437119 109
Я понял бы, если бы он крокозябрами показал числа a и b - там ведь неправильный тип используется llx когда нужно вроде просто x (или lx). Но ведь крокозябрами выходит именно что невиновная переменная "с", которая как раз таки соотвествует своей длине.
Аноним 22/04/25 Втр 04:39:34 3437120 110
image.png 29Кб, 632x552
632x552
типо он в один llx сразу две перемненные записывает. Потому что он хранит всё в одном стеке, и получается, чтобы вызать отдельно а и а он берёт сразу 2 а. И это вы хотите сказать корректное интуитивное поведение данной функции. Ну хз
Аноним 22/04/25 Втр 05:10:07 3437123 111
Аноним 22/04/25 Втр 05:17:40 3437124 112
>>3437123
проклятье. ну и чёрт с ним
Аноним 22/04/25 Втр 06:32:45 3437134 113
>>3437120
Ну, это относительно интуитивна реально понятно, ты прописал модификатор для 8 байт и оно 8байт из стэка и обработало, что не так? Это проблемы со stdarg скорее, чем с printf.
Аноним 22/04/25 Втр 09:29:01 3437181 114
>>3435647
> В ембедед сишка не является тут предметной областью.
Еще как является лол. На собесах теорию по сишке еще как спрашивают.
Аноним 22/04/25 Втр 11:25:10 3437297 115
>>3434109
Знал о том, что при флагах компиляции можно проверки на SEGV отключить? Нет? Так нахуй ты пришел блять сюда? Хуйню несёшь всякую
Аноним 22/04/25 Втр 11:50:58 3437317 116
>>3434109
Меня в свое время из-за физры чуть не отчислили
Аноним 22/04/25 Втр 11:55:59 3437324 117
>>3437105
>На выводе монитора что написано?
DisplayPort
Аноним 22/04/25 Втр 11:59:47 3437326 118
>>3437297
Можно и на канарейку отключить? Только зачем?
Аноним 22/04/25 Втр 13:39:35 3437434 119
>>3437326
Можно и без асана фузировать, но зачем?
Аноним 22/04/25 Втр 13:57:51 3437446 120
>>3437434
Я вбил в поисковик asan и так понял, что он отключается при оптимизации O2, а gcc же по дефолту с этим ключом объектники делает, разве нет?
Аноним 23/04/25 Срд 16:09:06 3438267 121
Dildobekk
Аноним 25/04/25 Птн 20:01:11 3440071 122
https://veresov.pro/cmustdie/

Почитал статью и это больше критика компилятора gcc, чем языка Си, но заголовок безусловно кликбейтный. Хотя и с большей частью проблем оптимизирующих флагов я, к счастью, не сталкивался.
Аноним 25/04/25 Птн 20:41:09 3440100 123
>>3440071
Эхх, а раньше этот аффффтар дрочил на столярова и критиковал раст
https://veresov.pro/rustmustdie/

А теперь ушёл в оппозицию и ругает власть.
Аноним 26/04/25 Суб 16:50:25 3440696 124
>>3440071
>>3440100
Обычная СМИ-шлюха, плевать что говорить, главное чтобы скандально и злободневно, привлекало клики. У телеящика нет мнения и никогда не было, цель только рейтинги.
Аноним 26/04/25 Суб 17:50:02 3440749 125
>>3440100
>https://veresov.pro/rustmustdie/
Так-то хуйню написал, кроме одного момента, пидораст, конечно, говно язык, но челик вообще не рубит.
Ну и по сайту какой-то он мастер на все руки, но на деле обычная институтка.
Аноним 26/04/25 Суб 21:45:09 3440849 126
Насколько сложно найти работу в С/микроконтроллерах?
Аноним 26/04/25 Суб 21:54:50 3440851 127
Аноним 26/04/25 Суб 22:20:16 3440862 128
Аноним 26/04/25 Суб 22:29:06 3440869 129
Аноним 27/04/25 Вск 10:50:25 3441050 130
>>3440849
Я сходил на одно собеседование - С вообще не спрашивали. Не приняли. На собес в другую компанию отказали, на собес в третью - даже не позвали, тупо проигнорили. Ну хз. Пока что как-то всрато выходит.
Аноним 27/04/25 Вск 12:13:31 3441103 131
Проебался
>>3401714 →
>Насколько сложно реализовать компилятор, это же пиздец.
Нет. Это легко. Все сложности написания комплияторов это не перевод, а оптимизации. Если на них глаза закрыть, то компилятор это не особо сложная программа. Можно даже без АСТ реализовать.
Можешь старый туториал от Джека Креншоу(Jack Crenshaw) навернуть.
Аноним 27/04/25 Вск 12:19:21 3441107 132
>>3441103
>Нет. Это легко
Именно поэтому МЦСТ ищет ценных кадров и с руками-ногами их отрывает? Очень легко, да...с какими же дегенератами тут сижу блядь.
Аноним 27/04/25 Вск 12:37:39 3441116 133
>>3441107
Ты дальше первых двух предложений читал? Или это слишком сложно для тебя?
Аноним 27/04/25 Вск 13:16:48 3441138 134
>>3441107
Любой, кто умеет в тот же лисп или хаскель, может свой мини-язычок сделать за неделю без проблем. Как я сказал и как упомянул анон выше ещё раз, основная сложность это оптимизации, все сложности связаны только с этим, проблему перевода решили ещё в 50-х.
По твоему стилю ты кстати похож на местного дегенарата, что по всей доске бегает и на виндузятников плюется. Это ты? То есть я был прав ты далбаеб-вкатун, который ничего не умеет и кукарекает лозунгами, подхваченному от всяких "гуру".
Аноним 27/04/25 Вск 14:05:51 3441190 135
>>3441138
Вкатун говорит вкатуну что он вкатун
Аноним 27/04/25 Вск 15:22:37 3441219 136
>>3440100
>https://veresov.pro/rustmustdie/
>- ЯРЯЯЯ СИ ДОЛЖИН УМИРИТЬ
>- -fwrapv -fno-strict-aliasing
>- о норм язык
Чёт проиграл с этого додика, да блядь, си сложный язык, всю хуйню надо знать.
Аноним 27/04/25 Вск 15:54:58 3441240 137
>>3441219
Что хорошего в знании? Бошка не резиновая, знания тоже нужно оптимизировать.
Аноним 27/04/25 Вск 16:10:41 3441254 138
>>3441240
Твой вопрос эквивалентен вопросу: "А какая погода сегодня на марсе?"
Аноним 27/04/25 Вск 17:08:41 3441288 139
>>3441240
>Что хорошего в знании?
Расширяет кругозор и этим помогает в работе.
>Бошка не резиновая
Мозг как раз таки очень резиновый, так что нужно изучать как можно больше всего.
Аноним 28/04/25 Пнд 10:20:26 3441667 140
>>3441107
Это те дибилы которые уже и не знают на чем бы еще распилить.
А для копиляторов есть ллвм, больше не надо колеса изобретать.
Аноним 28/04/25 Пнд 11:45:50 3441765 141
>>3441288
В работе помогает убедительно и вежливо послать всех пытающихся навесить на тебя работу, а когда нельзя послать, ту работу свалить на других. Оставшуюся работу от которой нельзя откосить или свалить на других сделать за пять минут и остальное время капчировать двач, играть в игры и т.д.
Аноним 28/04/25 Пнд 11:53:35 3441772 142
>>3441765
>убедительно и вежливо послать всех пытающихся навесить на тебя работу
>сделать за пять минут и остальное время капчировать двач, играть в игры
Дык это и есть знание и широкий кругозор.
Аноним 28/04/25 Пнд 14:14:08 3441906 143
>>3441667
У эльбруса хуевинький встроенный планировщик, им надо миллион человеко-часов вложить в оптимизирующий конпелятор.
>А для копиляторов есть ллвм, больше не надо колеса изобретать.
Ты - тупая хуйня просто.
Аноним 28/04/25 Пнд 15:14:32 3441954 144
>>3441906
Кланг работает. На ллвме новые кипиляторы для чего только не сделали уже, а
> Ты - тупая хуйня просто.
все копроьивляется.
Аноним 28/04/25 Пнд 15:30:34 3441975 145
>>3441954
Какой кланг, уёбок, я тебе про оптимизирующий компилятор под систему без планировщика, учитывающий микроархитектуру поделия от мцст, никто за них его не напишет, для подобных систем это не попильная прихоть, а тупо необходимость, они его будут улучшать до бесконечности.
Аноним 28/04/25 Пнд 16:28:38 3442029 146
>>3441975
Идиот анон спросил про написание компилятора, по нити пройдись.
А про ворье это даже писать больше не хочу.
Аноним 28/04/25 Пнд 17:12:08 3442058 147
>>3441975
>систему без планировщика
А изобрести велосипед транзистор аналоговнетные еще не придумали? Слышал, стоящая вещь.
Аноним 29/04/25 Втр 12:27:55 3442668 148
>>3441772
Знания и кругозор за тебя работу не сделают. Меньше работы только у того, кто от работы откосил. Получается, знания нужны для тунеядства, чтобы ничего не делать, но зарплату получать, воровство.
Аноним 29/04/25 Втр 18:45:24 3443007 149
>>3442668
>знания нужны для тунеядства, чтобы ничего не делать
Именно. Чем больше ты знаешь, тем быстрее ты можешь сделать РАБоту и проёбываться оставшееся время.
Аноним 29/04/25 Втр 20:56:17 3443102 150
>>3443007
Только платят тебе не за работу, а за время. Чем быстрее ты сделал задачу, тем быстрее метнулся делать следующую.
Аноним 29/04/25 Втр 23:50:22 3443201 151
>>3443102
Тебя никто не заставляет сразу по завершению всё коммитить и орать "сматрите какой я быстрый".
Аноним 02/05/25 Птн 06:49:51 3444712 152
>>3443007
>>для тунеядства, чтобы ничего не делать
>Именно.
>сделать РАБоту
Одебилевшее животное, посмотри значение тунеядства в словаре.

Делать работу это трудолюбие, а не тунеядство. Тунеядец потому и тунеядец, что НЕ делает работу, он косит от работы, а делает только хуйню для вида чтобы не выгнали, то есть на практике нихуя не делает, только штаны протирает изображая важную нужную персону.
Аноним 02/05/25 Птн 10:03:14 3444782 153
>>3442668
>>3443007
>>3443102
Хуйня всё. Ничего не нужно. Всё бессмысленно.

Хочешь получай знания, хочешь не получай, хотчешь работай, хочешь нет.
Аноним 09/05/25 Птн 21:40:55 3449775 154
>>3441906
Там и не должно быть планировщика, команды просто либо распихиваются по вычислительным блокам, либо все ждут, пока какой-то из них не освободится. Архитектура VLIW подразумевает, что блоки процессора выставлены наружу явно, и в момент генерации инструкций будет выполняться поиск оптимального их набора. Сэкономленные на отказе от сложного устройства транзисторы в теории можно перевести в работу за меньшее количество тактов, или большую синхронность, или повышение частоты, или более простой техпроцесс, и так далее.

Другое дело, что по факту это процессоры для каких-то радаров противоракетной обороны, следящих за целями, и их устройство (перевес вычислительных блоков для обработки данных) было определено исторически этой задачей (или же просто в оригинале несколько ящиков, набитых платами, заменили на один микропроцессор с точно такой же системой команд и внутренней схемой). То, что их представляют публике в качестве универсальных, — старый советский анекдот «только ребёнка через башню неудобно доставать». А у основного применения набор программ и требуемые характеристики производительности заданы заранее, там можно карьеру построить на оптимизации конкретно этих задач и до пенсии сидеть их вылизывать. Можно даже догадаться, что процессор модели такой-то заранее спроектирован так, чтобы выполнять известный код достаточно быстро.

Но что мы прицепились к конкретному примеру, можно ведь обсудить, что C при кажущейся универсальности ориентирован на вполне определённый класс систем времён своего появления и развития, а к остальному его прикручивали как получится.
Аноним 10/05/25 Суб 15:17:06 3450167 155
Парни научите прогать на си99, есть база по сетям/линуксам, коммерческий опыт 10+ лет. Прочел книги по сям. Но программировать так и не научился на этом языке. По сути код могу только смотреть подсказки писать. Не понимаю как из головы можно написать драйвер или операционку.
Аноним 10/05/25 Суб 16:19:25 3450234 156
Если я установил msys2 надо ли мне отдельно устанавливать компилятор clang?
Аноним 10/05/25 Суб 16:35:36 3450250 157
>>3450234
в Мсис2 установишь через пакеты
Аноним 10/05/25 Суб 16:38:41 3450256 158
а все понял, из=за сбоев интернета пакеты с зеркалами терялись и не получалось установить clang64
Аноним 10/05/25 Суб 16:39:56 3450258 159
>>3441219
как си может умереть если на нем написан весь интернет, вся инфраструктура, все операционки, все языки, даже небо, даже аллах?
Аноним 10/05/25 Суб 16:55:36 3450269 160
>>3450258
На коболе и ассемблере тоже много чего написано.
>все языки
Нет. Многие были написаны сами на себе. Та же джава.
Аноним 10/05/25 Суб 17:09:13 3450282 161
>>3450258
>даже аллах
Аллах на Перле
Аноним 10/05/25 Суб 19:15:21 3450424 162
>>3450269
Нельзя на самом себе написать изначально.
Джава на с++ написана изначально.
Аноним 10/05/25 Суб 19:35:17 3450440 163
>>3450269
>Нет. Многие были написаны сами на себе. Та же джава.
Где?
10/05/25 Суб 19:59:32 3450450 164
>>3450167
Стыдоба, в растотреде тебе бы сразу ответили.
Аноним 11/05/25 Вск 06:37:52 3450733 165
>>3450424
Можно. Придумываешь язык, пишешь на нем компилятор, дальше вручную компилируешь его, переводя в машинный, и у тебя есть компилятор. Дальше уже пишешь улучшенный компилятор и компилируешь готовым, получая новый компилятор и тд.
>Джава на с++ написана изначально.
Жвм да. Но компилятор джавы написан на джаве, открой их доки и посмотри.
>>3450440
https://web.archive.org/web/20080222200518/http://java.sun.com/docs/overviews/java/java-overview-1.html
> The Java system itself is quite portable. The compiler is written in Java and the runtime is written in ANSI C with a clean portability boundary. The portability boundary is essentially a POSIX subset.
Аноним 11/05/25 Вск 06:42:18 3450735 166
>>3450167
Так найди гайды, как это сделать. Можешь nand2tetris навернуть. Книгу на либгене скачаешь.
Аноним 11/05/25 Вск 14:19:29 3451037 167
>>3450167
>Не понимаю как из головы можно написать драйвер или операционку.
Это и не берется из головы. Это годы нахуй, просто годы написания кода, чтения документации, чужих примеров и так далее. Если ты видишь как кто-то написал пиздатый драйвер или что-то из той же оперы, то ты просто не видишь что за этим стояло: бессонные ночи, тонны прочитаных талмудов, дебаггинга, переписываний и тд и тп
Аноним 12/05/25 Пнд 10:12:28 3451728 168
>>3450733
а можно подробнее? допустим я хочу написать холиПитон, в мире нет ничего кроме ассемблера. как мне написать интерпритатор/компилятор для холиПитона, если компьюетры базарят только на ассембере?
Аноним 12/05/25 Пнд 10:47:30 3451776 169
>>3451728
просто берёшь Dragon book, там всё расписано
Аноним 12/05/25 Пнд 13:09:03 3451972 170
>>3451776
Ты хоть сам открывал этот драгон пук?
Хорошая книжка для начала Crafting Interpreters
Аноним 12/05/25 Пнд 15:19:06 3452167 171
>>3451972
Там не на ассемблере, не труъ.
Аноним 12/05/25 Пнд 16:03:49 3452230 172
>>3451728
Научись в циклы и условия на асме. Затем пишешь компилятор своего холиПитона на чём угодно, хоть на нём самом в тетрадку. Твоя программа будет состоять из циклов и условий, а ты умеешь их руками реализовывать на асме. Вручную компилируешь свой код и получаешь компилятор.
Естественно проще сделать урезанную версию языка для начала, и постепенно улучшать, но делая это на своем языке, а не на асме.
Я не знаю книг, где был бы реализован этот план.
>>3451972
Я бы начал с Let's Build a Compiler, оригинал на Паскале, но есть версии и С и Форта. Там оч. примитивный компилятор без AST и прочего, отчего можно хотя бы представление поиметь, что перевести эт овсё вручную в машинный код реально.
Аноним 12/05/25 Пнд 17:00:30 3452314 173
>>3450733
>Но компилятор джавы написан на джаве,

Нет, изначально он был написан на плюсах.
И только потому же переписали.
Невозможно написать компилятор или интерпретатор языка на нем самом в первый раз. Потому что язык это буквально просто набор слов.
Вообще хуею с уровня современных айтишников.
Аноним 12/05/25 Пнд 19:19:49 3452449 174
>>3452314
Дурачек, я уже написал, как это сделать. Буквально ручками.
Как по-твоему первый компилятор был сделан? Слетали в будущее, написали его на Хаскеле, а потом вернулись?
Представь что ты сделал первый компьютер. Ты программируешь в машинных кодах. Дальше ты понимаешь, что это нечитабельно и придумываешь мнемоники. Пишешь гайд, как мнемоники перевести в коды, нанимаешь сотрудников и они вручную твои программы переводят. В этом ничего сложного нет, любой человек с улицы справится.
Дальше ты пишешь свой ассемблер на... языке ассемблера и отдаешь сотрудникам, они его переводят и вот у тебя есть перфокарточка с ассемблером и отдел перевода больше не нужен.

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

Ты можешь сейчас спиздануть, что в примере выше он написан на асме. Но ты можешь заставить переводить в машинные коды напрямую.

Вуаля ты написал компилятор языка на самом языке, без использования промежуточных языков.
Аноним 13/05/25 Втр 12:28:43 3452908 175
>>3452449
>Как по-твоему первый компилятор был сделан?
В машкодах пишешь ассемблер, на ассемблере пишешь компилятор. Можно сразу в машкодах писать, если программа маленькая, и все вручную слинковать можно.
Шаг с бумажным компилятором и компилированием в голове - откровенная шиза, тупо потому, что ты без ошибок программу сходу не напишешь, а без рабочего компилятора ее не отладишь. Ну и, например, функциональные языки на ассемблер очень плохо ложаться, в голове их компилировать будет очень сложно.
Аноним 13/05/25 Втр 16:13:41 3453184 176
>>3452908
Тебя вроде никто и не заставляет сходу писать без ошибок. Функциональные точно так же пишутся, как анон выше описал:
https://www-formal.stanford.edu/jmc/history/lisp/node3.html
>we started by hand-compiling various functions into assembly language and writing subroutines to provide a LISP "environment"
Аноним 13/05/25 Втр 16:23:06 3453201 177
>>3452908
Конечно в 2025 это шиза. Но в 1955 нет.
Но если представить, что весь софт как-то уничтожится, то скорее всего всё восстановят по схеме типа: - асм - форт - лисп - с
Аноним 13/05/25 Втр 16:35:24 3453223 178
>>3453201
Ну и я, конечно, подтраливал. Конечно бутстрапинг джавы начинали с другого языка, а не вручную.
Аноним 13/05/25 Втр 22:17:14 3453487 179
>>3453184
>Функциональные точно так же пишутся
Лисп - такой же функциональный, как js или питон. То, что там лямбды есть, не делает его функциональным.
Аноним 14/05/25 Срд 11:15:25 3453853 180
>>3453487
Хорошо, пусть будет так.
Аноним 14/05/25 Срд 22:00:32 3454441 181
из протокола: р[...].png 36Кб, 282x96
282x96
программирование.mp4 9155Кб, 640x360, 00:02:19
640x360
Все мозги закомпостирвоал такой проблемой:

Есть динамическая библиотека libzalupa.so. Она линкуется с моей программой обычным путём.

В моей программе есть pthreads, в библиотеке тоже есть. У себя я использую Global dynamic TLS model, что использовано внутри библиотеки - непонятно, никаких торчащих наружу секций или инфы нету, но треды она там плодит и убивает.

В какой-то момент, после вызова пары-тройки функций из этой библиотеки, оказывается что malloc начинает выделять для меня память там, где он раньше уже выделял её мне, и там мои живые данные лежат, и я их не освобождал.

Что происходит?! malloc же тредобезопасный, да? При загрузке библиотеки через LD автоматически при старте программы оно же не копирует какое-нибудь состояние malloc и оно потом не может же расходиться?

Пиздец, я третий день мозги этим ебу, помогите!
Аноним 14/05/25 Срд 22:21:12 3454456 182
>>3454441
Нахуй ты делаешь маллоки во время работы программы? У тебя какие-то генеративные данные приходят, в огромных размерах? Парсишь половину интернета?

Нахуя в принципе выделять память вне инициализации?
Аноним 14/05/25 Срд 22:27:26 3454459 183
>>3454456

>Нахуя в принципе выделять память вне инициализации?

Именно на этапе инициализации проблема
Аноним 14/05/25 Срд 23:49:37 3454511 184
Аноним 15/05/25 Чтв 00:05:28 3454517 185
>>3454511
>>malloc же тредобезопасный, да?
>Нет
>https://github.com/rijish45/Thread-Safe-Malloc

Есть же стандарт, давно тредобезопасным его сделали. Он не реентерабельный, но там мьютекс на входе
Аноним 15/05/25 Чтв 00:06:48 3454518 186
>>3454441
>Пиздец, я третий день мозги этим ебу, помогите!

Нужна какая-нибудь софтина, которая запишет историю выделяемых и освобождаемых диапазонов. В логе увидишь тот диапазон который затирается и кто его затирает.

Только лог нужен с backtrace на каждый вызов malloc/free

Мимо
Аноним 15/05/25 Чтв 04:25:26 3454626 187
>>3454517
>Есть же стандарт, давно тредобезопасным его сделали.
Я конечно за стандартами не слежу, но ты там тогда настройки конпелятора и либ посмотри на соответсвие стандартам.
Аноним 15/05/25 Чтв 10:51:04 3454816 188
Аноним 30/05/25 Птн 23:41:43 3466359 189
Начал изучать вот эти ваши серьёзные языки после ЖСа. Уже в ахуе от работы со строками, но да ладно. Подскажите, вот я увидел такую практику использования указателей (там в контексте задачи, но похуй, пишу только необходимое)

void moving(char str)
{

str += 1;
// do something with
s
str += 1;
// do something with s

return some_value
}

int main()
{

char *s = "ABC";

moving(&s);


// do something

// и тут у меня вопрос. указатель уже стоит где-то, но не в начале строки, как мне теперь пользоваться этим указателем, если он хуй знает где? Норм практика? Или создовать доп. указатель, который можно двигать внутри другой функции, а оригинальный, что бы оставался только для использования в данной функции?

return 0;
}
Аноним 30/05/25 Птн 23:43:54 3466361 190
>>3466359
Блять, две звёздочки - это же жирный текст. Надеюсь, понятно в чём вопрос.
Аноним 31/05/25 Суб 00:43:54 3466383 191
>>3466359
>Или создовать доп. указатель, который можно двигать внутри другой функции, а оригинальный, что бы оставался только для использования в данной функции?
А зачем ты указатель увеличиваешь? Указатель указывает на начало, а ты увеличивай переменную и прибавляй ее к указателю для обхода
str + i++
Аноним 31/05/25 Суб 00:49:47 3466384 192
>>3466359
Функции moving ты зачем-то передаёшь указатель на указатель, s - это уже указатель на строку "ABC". Ну то есть так можно сделать, а в функции moving разыименовывать str, но так ты изменишь значение указателя s. Тогра придётся сохранить значение указателя перед вызовом moving, а потом вернуть его:

char ⚹s = "ABC";
char ⚹sBackup = s;
moving(&s);
s = sBackup;

Проще сделать так:

void moving(char ⚹str)
{
str += 1;
// do something with s
str += 1;
// do something with s
return some_value
}

int main()
{
char ⚹s = "ABC";
moving(s);
return 0;
}

Тогда изменение str не повлияет на s, т.к. str - это локальная переменная функции moving, которой присвоится значение s, в данном случае адрес строки в памяти.

И ещё взорву тебе мозг:

char ⚹my_func()
{
char ⚹str1 = "ABC"; //str1 указывает на строку, которая храниться в секции text и изменять её нельзя.

//str2,str3,str4 - одинаковые массивы, в них строки хранится в стэке функции и их можно изменять.
char str2[] = "ABC";
char str3[] = {'A','B','C','\0'};
char str4[] = {65,66,67,0};

str1[0]='a'; //тут будет ошибка, нельзя изменять строку в секции text

//str2,str3,str4 - можно изменять, т.к. строки находятся в стэки функции
str2[0]='a';
str3[0]='a';
str4[0]='a';

return str1; //можно возвращать указатель на строку в секции text, т.к. она останется в памяти до конца работы программы. str2,str3,str4 возвращать нельзя, т.к. они указывают на строки в стэке функции, который затрётся после выхода из функции.
}
Аноним 31/05/25 Суб 01:43:21 3466397 193
Снимок.JPG 28Кб, 309x846
309x846
>>3466383
>А зачем ты указатель увеличиваешь?
Ну у чувака на кодварс увидел такое использование и решил узнать, это ж ведь хуёво, что он двигает указатель в другой функции, просто что бы перебрать строку.
>>3466384
Мне интуитивно кажется, что лучше по максимуму пользоваться указателями, для манипуляции нелокальными переменными.
Скрин части решения чувака, которое я привёл в пример, может я что-то не так понял.
Аноним 31/05/25 Суб 02:33:45 3466406 194
>>3466397
>это ж ведь хуёво
Нет, он там строку парсит, поэтому двигает указатель на следующий терм, что бы скормить его другой функции. Это норма для парсинга.
Аноним 31/05/25 Суб 02:57:19 3466416 195
>>3466406
Так если я дальше буду использовать этот же указатель внутри функции main дальше где-то в коде, например, а он будет перемещён другой функцией?
Аноним 31/05/25 Суб 03:31:49 3466420 196
>>3466416
ну да, зависит зачем он тебе нужен, если нужен сделай копию
Аноним 31/05/25 Суб 16:03:23 3466636 197
image 131Кб, 1502x745
1502x745
>>3466384
Блять, и в правду, а как это работает?
Ведь по идее, что str1 это статический массив, что str2, мы же не выделяли память. При этом под строку "ABC" аж память в секции данных выделили.
Аноним 31/05/25 Суб 16:21:41 3466648 198
sample616c6caf2[...].jpg 82Кб, 850x833
850x833
Вот пытаюсь содрать кусок кода с одного эмбеддеда, завязанный на туче присутствующего кода, чтобы заставить его работать на ардуинке.
В теории казалось не так сложно, а потом я засучил рукава...

Раздражает, что даже при присутствии некоторой модульности (нечто похожее на интерфейс в виде VTables, а часть функционала вынесена в отдельные исходники), всё всё равно взаимосвязано, и мне нужно либо выдирать, либо реализовывать взаимосвязи. И все их нужно учесть...
Твёрдое чувство хаоса испытываю я, глядя на этот сишный код. И если обычно с ним можно смириться, то тут я по факту обязан рефакторить всю эту хуйню.

Мне кажется, нормальные люди не стали бы делать то, что делаю я.
Но при этом мне кажется, что я должен уметь так делать, если хочу право называть себя опытным огурцом и вообще сеньором (а я хуй знает кто).

держу в курсе
Аноним 31/05/25 Суб 17:07:29 3466673 199
image 171Кб, 1049x914
1049x914
image 26Кб, 655x448
655x448
>>3466384
Спасибо, анон. Не знал...
Но теперь я понял, что ассемблер вовсе не понимаю, см. 14 строчка - почему я не могу записать по адресу string, который хранится в регистре EAX, один байт. Но могу записать если пропишу "mov byte ptr string, BL", потому что сегмент данных можно и читать, и модифицировать.
Пиздец.
Аноним 31/05/25 Суб 17:14:16 3466679 200
image 30Кб, 1040x138
1040x138
image 22Кб, 467x407
467x407
>>3466673
А, нет. Всё нормально, я забыл, что в процессе вызова puts значения регистров EAX, ECX, EBX и ещё каких-то могут поменяться, согласно cdecl.
Тогда не понятно почему Си код ругается. Не уж то у пользователя нет доступа к сегменту данных программы, которую он же и запустил?
Аноним 31/05/25 Суб 19:51:07 3466747 201
>>3466636
У тебя ошибка:
char ⚹str2;
⚹str2 = 'A';

Ты объявил указатель str2 и не инициализировал его, его значение может быть каким угодно.
Потом ты по этому неинициализированному указателю записываешь ASCII код буквы A.
Т.е. ты в непонятно какой адрес памяти записываешь значение 65.
Аноним 31/05/25 Суб 20:01:04 3466754 202
>>3466636
И ещё, строки, на которые указывают str3 и str4, пропадут после выхода из функции fn т.к. они расположены в её стэке. Поэтому нельзя их использовать за пределами этой функции, а ты присваиваешь указатели на эти строки указателям ptr3 и ptr4, которые будут использоваться вне функции fn.
Аноним 01/06/25 Вск 14:52:20 3467103 203
Понадобилось заигнорить -Wварнинг в шаманском макросе, вопрос был решён. Угадайте как?
Аноним 01/06/25 Вск 23:00:21 3467331 204
>>3466384
>str1 указывает на строку, которая храниться в секции text и изменять её нельзя.
В любую секцию можно и писать и читать и выполнять (все зависит от флагов, компилятор за тебя решит или сам явно укажешь), да и к тому же секция .text обычно не имеет констант, хех. Тогда уж лучше было бы написать const char. Хотя конечно стоит уточнить что и не всегда строки пишутся в секцию, компилятор может и решить, что лучше прямо посимвольно нахуярить, или числом.
>char str2[] = "ABC";
Здесь тоже самое что и с str1, но шанс оказаться в секции данных выше.
>char str3[] = {'A','B','C','\0'};
Здесь да, компилятор скорее всего посимвольно грузанет все в стек.
>можно возвращать указатель на строку в секции text
Лучше не стоит

Итог: переходите на плюсы и не ебите себе мозги
Аноним 02/06/25 Пнд 00:47:07 3467364 205
>>3467331
>str1 указывает на строку, которая храниться в секции text и изменять её нельзя.
>В любую секцию можно и писать и читать и выполнять (все зависит от флагов, компилятор за тебя решит или сам явно укажешь), да и к тому же секция .text обычно не имеет констант, хех.

Строковый литерал хранится в read-only секции с кодом. Может быть, в каком-то конкретном компиляторе в неё и можно писать, но в общем случае нельзя.

>char str2[] = "ABC";
>Здесь тоже самое что и с str1, но шанс оказаться в секции данных выше.

Здесь создаётся массив в стэке функции и инициализируется строкой. Строка находится в стэке.

>можно возвращать указатель на строку в секции text
>Лучше не стоит

Строка никуда не пропадёт до конца работы программы, указатель на неё можно передавать куда угодно.

>Итог: переходите на плюсы и не ебите себе мозги
Иди к Линусу Торвальдсу со своим C++.
Аноним 02/06/25 Пнд 13:20:11 3467607 206
>>3467364
>но в общем случае нельзя
В общем случае можно, но это UB )).
>>3467364
>со своим C++.
Жаль, что плюсы не могут в быструю конпеляцию и нельзя как-то стряпать диалект из плюсов, чтобы ограничить набор фичей.
Аноним 02/06/25 Пнд 19:48:31 3467874 207
>>3467364
> Строка находится в стэке.
Там анон про другое наверно говорил, что в str2 будет так: memcpy(stack_str2, offset_blabla, 4)".
А в str3 так:
stack_str3[0] = 'A';
stack_str3[1] = 'B';
stack_str3[2] = 'C';
stack_str3[3] = 0;
Аноним 02/06/25 Пнд 20:19:48 3467893 208
>>3436615
>Практически - все эти сисколы не задокументированы
Все уже давно задокументировано, просто источники не всегда очевидные.
>непонятно как они работают
10 минут на дебаг потрать и все станет ясно как день.
>Поэтому, на винде можно пользоваться только kernel32.dll
В корне неверное заявление, используя сисколы иногда можно добиться 40% увеличения производительности, посмотри хотя бы в сторону файловой системы, удивишься.
>Но что он делает - я так и не смог догадаться.
Скрин посмотреть не смог. Покажи что у тебя за сисколл, если в виде номера, то тогда еще и версию винды.
Аноним 03/06/25 Втр 17:58:41 3468475 209
>>3436651
Защиты имели смысл до Windows XP включительно, дальше пошла анализация блокированием доступа пользователя к его собственному компьютеру, то есть отжимание собственности пользователя в пользу корпорации. Ну а визги про стабильность/безопасность шаблонная методичка которой сто лет в обед.
Аноним 03/06/25 Втр 22:40:00 3468669 210
>>3467364
> Строка никуда не пропадёт до конца работы программы, указатель на неё можно передавать куда угодно.
Куда угодно нельзя, только внутри своего приложения.
Аноним 03/06/25 Втр 22:53:11 3468679 211
>>3436651
Для наноядерных ос, которые не подразумевают наличия сложной логики в ядре, все уже давно придумано - обращение к памяти только через дескрипторы. Это было реализовано в последней symbian os которая так и не вышла, ее выкинули на гитхаб.
Самая главная проблема это то что в такой системе придется все ПО переделывать, Эльбрус у которого есть аппаратная адресация в дескрипторы доказывает что практически весь код придется если не переписывать то как минимум править. Весь.
Аноним 04/06/25 Срд 03:01:33 3468744 212
>>3468669
>Куда угодно нельзя
Можно куда угодно, даже вывести на экран и показать твоей мамаше шлюхе, а она передаст соседкам, указатель остается валидным.
Аноним 04/06/25 Срд 04:28:58 3468751 213
>>3468744
Нейро-макака ты? Узнал тебя по шизойдным высерам.
Аноним 05/06/25 Чтв 01:08:31 3469789 214
image.png 147Кб, 612x684
612x684
Аноним 05/06/25 Чтв 01:21:07 3469792 215
Снимок.JPG 15Кб, 422x303
422x303
Подскажите, это я правильно передал по ссылке указатель на массив или копией? По синтаксису, будто хуету сделал, но как ни крутил, получаются ошибки, вроде "passing argument 1 of 'calculate' from incompatible pointer type"
Аноним 05/06/25 Чтв 01:40:13 3469795 216
>>3469792
> это я правильно передал по ссылке указатель на массив или копией
Нет operand[] это ★operand, а ты еще его адрес берешь
Аноним 05/06/25 Чтв 01:56:02 3469803 217
>>3469789
Зачем в delete_list указатель на указатель в х?
Аноним 05/06/25 Чтв 02:07:44 3469805 218
Снимок.JPG 17Кб, 371x372
371x372
>>3469795
Спасибо. Вроде начал понимать слегка.
operands из calculate == &operands из main. Значит по ссылку передал. Ну и только что прочитал полезную вещь, что бы указать, можно или нельзя мутировать массив, лучше аргумент обозначать констом.
Аноним 05/06/25 Чтв 16:33:07 3470322 219
Не С, но думаю тут есть люди которые могут ответить.

Как работает маппинг устройств в память? Я понимаю, что с точки зрения программиста это удобный способ работы с устройствами (я даже не знаю не гугля какие еще способы можно придумать) - берешь мануал по железке и пишешь в память. Но как оно на уровне железа работает? В памятью +- понятно - есть шина, проц физически через свои ножки и мат плату по ней команды памяти отправляет, а память их уже как нибудь да распознает. Я примерно представляю как память хранит данные, видел 100500 видов защёлок и в целом верю, что можно сделать железку которая будет согласно какой нибудь спецификации давать читать/писать себя. Но вот как мать понимает, что когда на шине идет обращение к какому то определенному региону, то нужно это каким то образом (например у меня по usb что то подключено) в другую железку отправить?
Аноним 05/06/25 Чтв 16:40:31 3470332 220
>>3470322
P.S я вот вижу в доке к плате, что у нее память статически размечена и некоторые части не executable. А что будет, если всё таки попробовать? Illegal instruction проц выкинет или че? Как проц должен понять, что ему нельзя оттуда читать? Или ошбку доступа к памяти? А какая вообще для проца разница executable память или нет, если он только читает/пишет в нёё? Как это ограничение реализуцется?
Аноним 05/06/25 Чтв 19:37:46 3470473 221
>>3470332
Откроется новое достижение:
"Познал UB"
Аноним 05/06/25 Чтв 23:13:54 3470667 222
Аноним 06/06/25 Птн 10:44:22 3470843 223
>>3470322
>Но как оно на уровне железа работает?
>Но вот как мать понимает, что когда на шине идет обращение к какому то определенному региону, то нужно это каким то образом
Да просто там декодер стоит, который бивасом настраивается и контрольными регистрами.
>Как проц должен понять, что ему нельзя оттуда читать? Или ошбку доступа к памяти? А какая вообще для проца разница executable память или нет, если он только читает/пишет в нёё? Как это ограничение реализуцется?
Конкретно про штеуд, в даташите к алдерлейку vol1:
>The Intel Execute Disable Bit (EDB), also known as No eXecute (NX) bit, is a hardware-based security feature that helps protect against certain types of malware attacks, particularly those exploiting buffer overflow vulnerabilities
Гугли детали.
Аноним 06/06/25 Птн 11:42:02 3470910 224
Посоветуйте мне пожалуйста хорошую книжку на тему адресации памяти, страниц, вот этого всего книжку НЕ талмуд с океаном фактов из разряда в каком году потекло по штанине у Страуструпа, достаточно поверхностного концептуального ознакомления
Аноним 06/06/25 Птн 12:16:18 3470954 225
>>3470322
Если ты про mmap system call (https://man7.org/linux/man-pages/man2/mmap.2.html), то так как это системный вызов, то предположу что работает через ядро, ядро хранит соответствие между между адресом у тебя в памяти и адресом в памями устройства и соответственно транслирует адреса туда и обратно тоже ядро.
Моё предположение.
Аноним 06/06/25 Птн 12:28:04 3470967 226
>>3469789
Я бы предположил что память по указателю уже освобождена, возможно автоматически, например если ты туда передал указатель на стековую переменную, которая к этому моменту уже зачистилась
Аноним 06/06/25 Птн 13:19:20 3471024 227
IntelX99chipset[...].png 130Кб, 1024x853
1024x853
intelx58themeso[...].gif 28Кб, 580x532
580x532
>>3470322
В процессоре реализована некая логика, которая определяет, на какие ножки какой адрес выставить в зависимости от того, по какому физическому адресу обратилась программа.

Например, в процессоре есть встроенный PCI и есть диапазон адресов для работы с PCI. Если программа запишет в этот диапазон адресов, процессор выставит на ножки PCI адрес, по которому записала программа минус адрес начала диапазона адресов PCI. Т.е., например, если в процессоре адреса PCI начинаются с 0xb0000000 и программа записала по 0xb0001000, то процессор выставит на PCI адрес 0x1000.

Поддержка разных интерфейсов и устройств может быть реализована во внешних контроллерах, процессор соединён с ними через какую-либо шину.
Тогда, при обращении по адресам, соответствующим этим устройствам, процессор выставит обращение на эту шину, а дальше с устройством будет работать уже внешний контроллер. В контроллере может быть сложная логика работы с устройством, а со стороны процессора это выглядит как простая запись по адресу.
Аноним 06/06/25 Птн 17:00:47 3471231 228
>>3471024
Реально. Погуглил сокеты, там оказывается прям в процессоре должна быть поддержка usb, pcie
Аноним 06/06/25 Птн 17:24:59 3471276 229
>>3471231
Насколько я понял не обязательно, к этому просто пришли, раньше это управлялось специальным набором чипов для периферии, назыаемым Южный мост
https://en.wikipedia.org/wiki/Southbridge_(computing)
Аноним 06/06/25 Птн 17:46:46 3471308 230
>>3471231
>>3471276
Ну да, как я ответил выше, чтобы в устройства можно было читать/писать простым обращением к адресу, устройства должны быть либо реализованы в процессоре (SoC или система на кристалле по-русски), либо вынесены во внешний контроллер, но процессор должен знать, как работать с этим контроллером.
Тогда логику работы с устройством можно реализовать аппаратно. Т.е. грубо говоря функцию драйвера устройства выполняет процессор или чип и программа может работать с устройством простым обращением по адресам.
Аноним 06/06/25 Птн 18:21:04 3471328 231
Окей, но тогда еще вопрос. Если у меня не микроконтроллер, то адреса не захардкожены, на сколько я понимаю. Как проц их узнает?
Аноним 06/06/25 Птн 18:41:14 3471337 232
>>3471328
Насколько я понимаю за это драйвер устройства отвечает, он знает по каким адресам писать для какого устройства
Аноним 06/06/25 Птн 18:50:45 3471343 233
Аноним 06/06/25 Птн 19:00:27 3471350 234
>>3471343
Разработчик железа знает какие он чипы куда припаял и соответственно у кого какие адреса будут, он же и пишет драйвер
Аноним 06/06/25 Птн 19:04:16 3471354 235
>>3471350
Припаивает к процу производитель матери, а дрова пишет производитель видеокарты, например
Аноним 06/06/25 Птн 19:12:15 3471356 236
>>3471354
Нет, так у тебя в данном случае мать абстрагирует обмен данными через интерфейсы. Например проц знает что нужно послать данные на PCI-E, мать знает что это значит послать сигнал на такие-то ноги, уже внутри этого сообщения есть команда видеокарте, в её собственном формате, с её адресами, которое формируется драйвером этой конкретной видеокарты.
Насколько я понимаю это так примерно работает.
Аноним 06/06/25 Птн 19:14:24 3471360 237
>>3471356
>Например проц знает что нужно послать данные на PCI-E
Для этого нужно знать на какой адрес оно замаплено. В этом и вопрос. Куда эта инфа вшита?
Аноним 06/06/25 Птн 19:15:28 3471361 238
>>3471360
Ну в материнку, материнка же соединяет проц со всеми своими интерфейсами
Аноним 06/06/25 Птн 19:21:26 3471364 239
Аноним 06/06/25 Птн 19:24:41 3471366 240
>>3471361
В целом логично, наврное, если мать при запуске сначала выполняет программу в ROM, которая уже куда то сохраняет инфу о адресах, а потом проц уже использует это. Спасибо
Аноним 06/06/25 Птн 19:26:30 3471369 241
>>3471360
Я уже на таком уровне совсем мало знаю, но если ты возьмёшь свой процессор и вставишь в другую материнку с таким же сокетом и он будет работать, значит как-то разводка от сокета до чипсета материнки адресует запросы?
Строго говоря наврядли сам PCI-E замаплен на адрес, скорее всего там адрес в памяти процессора замаплен на определенные ноги, запись по адресу выставляет напряжение на ногах, этот сигнал идёт к материнке, а материнка знает что с этих ног идёт сигнал на определенный интерфейс.
Но это всё неточно.
Аноним 06/06/25 Птн 19:33:06 3471374 242
Как в итоге я все это себе представляю. У проца есть сокет - там физически разные пины подключены к разным девайсам (или просто портам на матери). Также у проца есть хуйня внутри которая обращения по адресам преобразует в сигнал на определенных пинах сокета. Делает это она в соответствии с инфой которая хранится внутри ее же и инициализируется мамкой, которая выполняет программу из rom при старте и опрашивает устройства. Делает это она каким то специфичным для конкретной мамки образом, но есть какое соглашение по тому как сохранить инфу о маппинге в проц и чтобы ос потом это выпросила
Аноним 06/06/25 Птн 19:50:50 3471381 243
Еще погуглил про TLB. Стало понятнее и теперь еще больше уверен в том, что оно работает так, как я написал
Аноним 07/06/25 Суб 01:00:24 3471498 244
Снимок экрана 2[...].png 84Кб, 870x1150
870x1150
Снимок экрана 2[...].png 74Кб, 598x678
598x678
Сейчас объясню, как работают PCI и PCIe.

У процессора есть выделенный диапазон адресов для PCI, см. пикрил 1. Взял его отсюда (качать под VPN) https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/10th-gen-core-families-datasheet-vol-2-datasheet.pdf

Смысл в том, что каждому устройству назначается диапазон адресов на шине PCI. Т.е. говорим устройству, чтобы оно отвечало только на назначенные ему адреса на шине PCI, а остальные игнорировало.
Потом драйвер обращается по какому-либо адресу из пространства PCI, процессор выставляет его на шину PCI, отвечает только то устройство, которому этот адрес был назначен.
В Windows назначенный устройству диапазон адресов можно посмотреть в диспетчере устройств, см. прикрил 2.

Чтобы назначить устройству адрес PCI, используются конфигурационные транзакции.
На шине PCI для выбора устройства в конфигурационной транзакции есть отдельная линия IDSEL для каждого устройства. На материнской плате к каждому разъёму PCI идёт отдельная линяя IDSEL.
На шине PCIe в конфигурационной транзакции устройство адресуется идентификатором виде bus:dev:function, устройство отвечает только на свой идентификатор.
В конфигурационной транзакции идёт чтение/запись конфигурационного пространства PCI, его начало стандартизировано https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%BE_PCI

Общение с устройством происходит через регистры Base Address Register, мы должны записать в них адрес на шине PCI, который хотим назначить устройству.
Например, чтобы записать в Base Address Register 0 адрес, мы в конфигурационной транзакции по смещению 0x10 записываем адрес на шине PCI, который хотим назначить устройству. Теперь устройство будет знать, что этот адрес на шине PCI относится к нему, и будет отвечать на него.
Не обязательно записывать адреса во все Base Address Register, это зависит от конкретного устройства.
Можно узнать нужный устройству размер памяти на шине PCI, нужно записать в соответствующий Base Address Register 0xffffffff, устройство ответит нужным ему размером.
Дальше общение с устройством будут происходить через адреса PCI, которые мы указали в Base Address Register, и конфигурационные транзакции больше не нужны, как и линия DEVSEL на PCI.

В x86 адреса PCI устройствам автоматически назначает Биос, поэтому операционной системе нет необходимости их назначать.

Советую почитать книгу Гук М. Ю. Шины PCI, USB и FireWire. Энциклопедия. 2005г., там описан PCI.
Аноним 07/06/25 Суб 01:14:38 3471502 245
>>3471381
TLB тут не при чём. Он нужен для быстрого преобразования логического адреса в физический. Т.е. чтобы процессор быстро узнал без обхода таблиц страниц, какой логический адрес в программе какому физическому адресу в ОЗУ соответствует
Аноним 09/06/25 Пнд 11:48:35 3472702 246
>>3435339
Может писать какие-нибудь сишные либы для питона? Ну Си наверное нигде кроме эмбеда массово не используется. Деньги в джава-крудах.
Аноним 09/06/25 Пнд 12:19:48 3472718 247
>>3472702
Опенсорс - маст ноу си. Полно кода на си, как коммерческого, так н коммерческого. Я например не сишник и вообще веб макака. На днях столкнулся с необходимостью писать кастомный сканер для три ситтера. Другого способа решить проблему просто нет.

Было бы желание, а задачи найдутся. Другое дело что без экспертных знаний ты врядли в сишке заработаешь на кусок хлеба, как например на питухоне.
Аноним 09/06/25 Пнд 12:50:58 3472756 248
>>3472702
>Ну Си наверное нигде кроме эмбеда массово не используется
В крик, примерно 99.99% системного софта - это Си.
>>3472718
>Триситтер
Даже обоссанный триситтер написан на Си.
>Другое дело что без экспертных знаний ты врядли в сишке заработаешь на кусок хлеба
При этом это не самый лучший инструмент.
Аноним 09/06/25 Пнд 12:57:41 3472767 249
>>3472756
>В крик, примерно 99.99% системного софта - это Си.
А вот и буквоед подъехал. Ну ок, крикун, раз так то думаю тогда ни у кого не составит труда грести деньги лопатой на Си, раз на нём столько софта.
Ой вей, а ведь тот софт весь поголовно в легаси моде и не развивается, а те крохи где развивается - там сидят вахтёры типа Торвальдса и туда никто не попадёт случайно. Вот ведь незадача.
Аноним 09/06/25 Пнд 13:01:45 3472769 250
>>3472767
Ты примерно на 99.99% неправ, по всем пунктам.
Аноним 09/06/25 Пнд 13:04:54 3472772 251
>>3472769
Безусловно, я никогда не спорю с С-фанатиками
Аноним 09/06/25 Пнд 13:09:57 3472774 252
>>3472772
Я не си фанатик, мне не нравится этот язык.
Аноним 09/06/25 Пнд 16:13:02 3472930 253
>>3472702
Бля, читать дизассемблированный питон код ещё труднее, чем читать Си-шный.
Аноним 09/06/25 Пнд 16:50:18 3472950 254
>>3472930
Что за дизассемблированый питон код? Питон интерпретируемый язык. Или ты из-под интерпретатора инструкции выхватываешь?
Аноним 09/06/25 Пнд 17:16:41 3472967 255
>>3472950
Есть IR, есть компиляторы питона. На самом деле нет строго интерпретируемых/компилирумых языков
Аноним 09/06/25 Пнд 17:29:12 3472982 256
>>3472967
Ну если ты не шипаешь питон программу в скомпилированном виде, то наверное он всё-таки не компилируемый.
Аноним 09/06/25 Пнд 22:55:00 3473179 257
Подскажите, вот я делаю себе массив
int leaders = malloc(element_numbers sizeof(nums[0]));

У меня есть другой массив nums с количеством элементов element_numbers.

Я в массив leaders буду записывать числа и в конце, в нём будет (100%!) меньше элементов, чем в nums.

Как мне в конце уменьшить память, выделенную для leaders (malloc(element_numbers * sizeof(nums[0]));)?

free(leaders)?

Я правильно понимаю, что делает функция free?
Аноним 09/06/25 Пнд 23:40:51 3473217 258
>>3473179
realloc
Функция free освободит целиком память, выделенную malloc. Т.е. сообщит операционной системе, что этот участок памяти больше не используется и может быть затёрт.
Аноним 09/06/25 Пнд 23:44:09 3473220 259
>>3473217
Аааа, типа, я малоком себе в функции выделил памяти для локального массива, что-то с ним сделал и если я этот массив не буду возвращать из функции, то я просто очищаю через free память. Ок, спасибо.
Аноним 10/06/25 Втр 08:01:01 3473279 260
>>3473179
>sizeof(nums[0])
Бля ну ты и ебанутый, ты в блокноте пишешь код что ли, нет там у тебя подсказок что это значит?
Как ты вообще в программировани на си то оказался, из какого стека/языка пришел?
Аноним 10/06/25 Втр 08:54:01 3473293 261
Аноним 10/06/25 Втр 08:55:07 3473294 262
>>3473279
Из джаваскрипт, решил попробовать ваше си. Ну и говно, как вы на этом пишете? Даже веб-фреймворков нормальных нет, кринж.
Аноним 10/06/25 Втр 09:03:54 3473299 263
>>3473293
Ну вообще питон это высокоуровневое продолжение си ящитаю, а там размер строки/массива помоему вычисляется через len(str | array) но блять даже в питонологике len(nums[0]) было бы странно.
Аноним 10/06/25 Втр 09:39:28 3473308 264
qt.png 5Кб, 370x442
370x442
>>3473294
> Даже веб-фреймворков нормальных нет
Аноним 10/06/25 Втр 10:55:58 3473353 265
>>3473279
>Бля ну ты и ебанутый, ты в блокноте пишешь код что ли, нет там у тебя подсказок что это значит?
А что не так с определением размера элемента массива с помощью sizeof(nums[0])?
Аноним 10/06/25 Втр 11:03:10 3473359 266
image 49Кб, 859x434
859x434
Аноним 10/06/25 Втр 11:31:15 3473377 267
>>3473359
У тебя ошибка на скрине.
Аноним 10/06/25 Втр 11:33:10 3473379 268
>>3473377
Нет ни единой ошибки на скрине, Вы просто не знаете синтаксис языка, которым оперируете.
Аноним 10/06/25 Втр 11:37:51 3473385 269
>>3473379
Дебилина у тебя malloc не проверяет на переполнение либо сам проверяй либо вызывай calloc.
Аноним 10/06/25 Втр 11:47:01 3473397 270
>>3473385
Со всеми паддингами структура займёт максимум байтов 12, давно ОСям стало трудно выделять 1200байт для процесса, ты из 90го капчуешь? Линукс наверное оптимизирует это настолько, что просто память в стэке выделит, ибо размер просто мизерный.
Аноним 10/06/25 Втр 11:51:59 3473403 271
>>3473397
А, не заметил, что там константа.
>давно ОСям стало трудно выделять 1200байт для процесса
Не в хуилионах памяти дело, а в потенциальном переполнении буфера.
Аноним 10/06/25 Втр 11:55:59 3473407 272
>>3473353
то, что ты:
1. выделяешь память для int leaders[] а в размере указываешь хуй знает что.
2. nums это просто указатель который можно переинтерпритировать как угодно в массив байтов.
3. sizeof съест препроцессор, а вот что делать с nums[0] компилятору придется решать, или убрать и сделать вид что никаких чтений перед вызовом небыло или въебать чтение которое потенциально может привести к падению (вдруг так задумано разработчиком).
Аноним 10/06/25 Втр 12:10:02 3473414 273
>>3473407
Блять, у нас тут в треде кто-то включил LLM для кода, поздравляю.

Только ЛЛМ могла выдать такую хуйню, ибо ей не хватает контекста кода, хотя по факту тут можно спокойно додумать, да и вопрос юзер_нейма вообще не в этом заключался.

ВЫРУБИТЕ ЛЛМ, БЛЯТЬ, СУКИ!
Аноним 10/06/25 Втр 12:25:00 3473433 274
>>3473414
Мозги себе вруби, шизойд, или отложи в сторону си и не подходи к нему на пушечный выстрел. На пистоне лабай, там есть защита от мартышкокодинга.
Аноним 10/06/25 Втр 12:36:34 3473443 275
>>3473407
>>3473433
Может хватит писать хуйню? У тебя не хватило мозгов понять, что при копировании кода потерялись звёздочки перед leaders и sizeof?
Аноним 10/06/25 Втр 13:43:23 3473494 276
>>3473443
Какую хуйню, клован? Ты вместо того что бы написать int[] A = malloc(n × sizeof(int)) как нормальные люди, положил грабли, которые простоелят тебе ноги в любой непредвиденной ситуации, и ты будешь бегать с горящей жопой по коду кумекать что же не так и не найдешь. Ты высрал уродливый просто потому что ты так привык, потому что ты макака, которая не заботится о читаемости безопасности и производительности. Не пиши на си больше, от тебя гоVNой воняет.
Аноним 10/06/25 Втр 14:45:38 3473528 277
>>3473494
>malloc(n × sizeof(int))
>нормальные люди
И как ебучий нормис получишь багу в программе.
Аноним 10/06/25 Втр 14:48:49 3473530 278
>>3473528
Какую багу и почему?
Аноним 10/06/25 Втр 14:52:13 3473533 279
>>3473530
Потому что ты не сделал приведение типа, ибо malloc возвращает void*.
Ты реально LLM какая-то, а не живой человек.
Аноним 10/06/25 Втр 14:54:59 3473534 280
image.png 24Кб, 467x288
467x288
>>3473494
>написать int[] A = malloc(n × sizeof(int)) как нормальные люди
Аноним 10/06/25 Втр 14:59:00 3473537 281
>>3473530
У тебя перед вызовом функции, идёт вычисление выражения, промоушен первого аргумента идёт до size_t типа, можно подобрать n, чтобы произошёл wrap around, в итоге в качесвте аргумента будет использовано меньшее значение, чем ожидаемо.
Аноним 10/06/25 Втр 15:25:02 3473553 282
>>3473279
Вот это ты говна на вентилятор накинул. Согласен с тобой, что sizeof(num[0]) - не Сишный код, а больше к простым языкам, где думать надо меньше (типа жс), я просто ещё не выработал привычки к sizeof(TYPE), так как реально пришёл из жса в котором массивы типизировать не надо. (Хотя обожаю ТС, но привычки ещё не выработал, да). Ну и вопрос был действительно не в этом, но тем не менее спасибо.

>>3473179-кун
Аноним 10/06/25 Втр 15:38:44 3473558 283
>>3473534
Это ошибка синтаксиса тогда, а не баг
Аноним 10/06/25 Втр 15:56:37 3473565 284
>>3473553
Если питон это высокоуровневый си, то жс это высокоуровневые плюсы, тебе лучше туда. Поймешь очень много о жс, например почему у него так все устроено что нет проверки типов , хотя у ts все по другом это уже всетаки другой язык ближе к сишарпу, если не сказать что просто с него срисованый.
Аноним 10/06/25 Втр 16:09:53 3473576 285
>>3473565
Я нюхаю Си, что бы МК программировать. Всё остальное (ну кроме Си++ и асемблера) требует ещё свистоперделки, которые в МК память занимают, да и на Си больше примеров/либ и т.д, чем на условном микропайтоне, а жс вообще только специальные платы поддерживают пока что. Хотя программировать на ТСе микроконтроллеры было бы пиздато, но это не подходящий инструмент вообще.
А вы помните? Аноним 10/06/25 Втр 16:29:22 3473593 286
image 79Кб, 870x842
870x842
Как дорогим дедам приходилось "мучаться", чтобы просто выделить память под матрицу, чтобы использовать как меньше системных вызовов?
Аноним 10/06/25 Втр 17:29:21 3473642 287
>>3473576
Ну это да, плюсовые библиотеки не для контроллеров, хотя где то смотрел жалобы эмбедщиков что заебало с сишкой дрючится, напряглись они и написали патч или скрипт сборки собирающий минимальный набор получили libstdc++ в 500кб что все равно как бы много по сравнению с сишными либами 300-100kb, но им вроде как норм.
Аноним 14/06/25 Суб 20:24:59 3476099 288
sizeof это не функция, а оператор
Аноним 14/06/25 Суб 21:30:30 3476142 289
>>3476099
М-ля, ну, так-то факт, но, типо, его легко спутать с функцией, ибо обычно в попсовых источниках его использование описывают как size( [type] | [object] ), опуская, что можно писать sizeof object, и не говоря, что "результат" превращается в константы времени компиляции.
Аноним 14/06/25 Суб 21:38:19 3476143 290
image 2Кб, 188x62
188x62
image 2Кб, 284x61
284x61
>>3476142
Ну, и это больше спор про синтаксис языка, что пиздецки сложно и требует изучения конечных автоматов и дохуя еболы, я с интересом такое читаю, но сам остановился на дискретной математике, поэтому мимо.


Для меня вообще обидно, что в Си
нельзя сделать пик1, только как пик2 можно.
Аноним 14/06/25 Суб 23:37:10 3476206 291
>>3476143
Ты мошоночный сосатель, иди нахуй.
Аноним 16/06/25 Пнд 02:41:18 3476823 292
Аноним 16/06/25 Пнд 08:48:04 3476865 293
А как получить список файлов в каталоге? Все функции в стандартной библиотеки работают только с одиночными файлами, а работы с каталогами ничего нет.
Аноним 16/06/25 Пнд 12:25:33 3476998 294
Аноним 16/06/25 Пнд 13:06:29 3477020 295
>>3476865
Придётся использовать функции, специфичные для конкретной операционки.
Как для Windows не знаю, а для Unix вот https://firststeps.ru/linux/r.php?20
Аноним 17/06/25 Втр 12:48:19 3477630 296
Аноним 18/06/25 Срд 13:33:22 3478468 297
Аноним 18/06/25 Срд 14:07:35 3478505 298
>>3478468
Потому что си не питон
Аноним 18/06/25 Срд 16:01:44 3478628 299
>>3478468
Потому что, внезапно, это функции привязанные к определённым ОСям со своей спецификой работы. В Си даже работа с файлами нельзя назвать универсальной, ибо помню кодил функцию для открытия, чтения и записи, чтобы отлавливали все ошибки и писали в stderr/лог. файл. Так даже там возникла сложность в том, что под Windows приходилось после fwrite дополнительно делать fseek, ибо указатель упорно не хотел сдвигаться, самое смешное, что даже ftell показывал, что указатель на дескриптор файла сдвинулся, но а по факту нет, вот...

А ты хочешь, чтобы была универсальная функция для работы с каталогами! И так большинство функций в итоге оборачиваться либо в системные вызовы, либо в вызовы WinAPI, чтобы просто байты в эмулятор консоли вывести.
Аноним 18/06/25 Срд 16:57:50 3478713 300
>>3478468
Чтобы жизнь мёдом не казалось
Это такая супер-портабельность, по-сишному
А почему за столько лет[19] ничего не поменялось? Аноним 18/06/25 Срд 17:46:28 3478789 301
image 79Кб, 524x155
524x155
image 191Кб, 593x299
593x299
Аноним 18/06/25 Срд 19:45:14 3478908 302
>>3478789
Всё так и есть, и чем дальше, тем хуже.
20 лет назад на компе с 1Гб оперативки я мог играть в Max Payne 2, Far Cry, Half-life 2, Doom 3, FEAR, Battlefield 2 и другие игры с передовой на тот момент графикой. Даже первый Crysis кое-как шёл.
А теперь такой комп нельзя использовать даже как печатную машинку, Windows 11 просто не заработает.

Для отображения web страниц в браузере без тормозов нужен комп по мощности, какими раньше были графические станции, на которых делали голливудские блокбастеры.
Хотя страницы не должны тормозить на Pentium 166MMX, т.к. это простая 2d графика.
C, сокеты и взаимодействие двух процессов по сети. Аноним 18/06/25 Срд 20:03:05 3478928 303
Вопрос такой: есть одно приложение(процесс в момент работы). Эта штука написана на java(просто запускается скрипт, который делает "java -jar prilozhenie.jar") и её изменять нельзя. Нужно перехватывать то, что эта штука отправляет и изменять ip адрес. Для решения такой проблемы мне пришла идея использовать всякие hook. Вопрос: как такое решить без hook?
Аноним 18/06/25 Срд 20:20:27 3478935 304
>>3478928
Так если у тебя есть целый jar-файл, то в чём проблема декомпилировать его? Я помню как-то декомпилировал старые игрушки на кнопочные телефоны с помощью обычного онлайн-java-декомпилятора и всё было вполне читаемо.

А не легче на уровне роутера/сетевой карты перехватить пакеты через фильтр и уже что-то там делать с ними?
Аноним 18/06/25 Срд 20:32:07 3478940 305
>>3478935
> её изменять нельзя
Ай эм сорри, жопой читаю.
Аноним 18/06/25 Срд 20:58:09 3478962 306
>>3478935
>А не легче на уровне роутера/сетевой карты перехватить пакеты через фильтр и уже что-то там делать с ними?
Я опишу ситуацию более подробно:
1) работаем с удаленным сервером
2) jar'ник может изменять другая группа людей, а я и ещё один человек можем лишь читать и исполнять(так настроены права)
3) так как все происходит на удаленном сервере, то делать финты с роутером тоже не могу - нет доступа к такому.

Проблему решили, но по-своему. За совет с роутера и спасибо.
Аноним 21/06/25 Суб 00:37:22 3480656 307
>>3478962
Анон, привет! Ты будешь моим интернет-товарищем?
Аноним 21/06/25 Суб 00:41:31 3480658 308
Аноним 22/06/25 Вск 15:14:43 3481577 309
>>3480658
Пожалуйста, стань моим товарищем :_(
Аноним 24/06/25 Втр 20:12:42 3483421 310
ТРЕДИК, ПРИВЕТ! ПОЛУЧИЛ ДИПЛОМ ВСЁ ТАКИ!
Аноним 24/06/25 Втр 20:58:50 3483455 311
>>3481577
Кто ты и что ты хочешь?
Аноним 24/06/25 Втр 20:59:30 3483456 312
>>3483421
Молодец.
Мне только в следующем году( если смогу)
Аноним 25/06/25 Срд 17:05:31 3484094 313
Здравствуйте. Я новичок и только начал изучать си. Можно ли тут задавать глупые вопросы и не ебаться с переименовыванием переменных для более легкого чтения кода?
Аноним 25/06/25 Срд 17:51:01 3484129 314
>>3484094
> Здравствуйте.
Привет!

> Я новичок и только начал изучать си.
Удачи в этом нелёгком деле, Си очень коварный язык и чтобы на нём уметь писать БЕЗОПАСНО - надо потратить долгие и долгие годы.

> Можно ли тут задавать глупые вопросы
А почему нет? Только АИ ассистенты тебе и быстрее ответят, и понятнее объяснят.

> и не ебаться с переименовыванием переменных для более легкого чтения кода?
Искусство правильно оформления кода только в процессе работы и познаётся и лучше сразу приучаться оформлять его правильно, поскольку в дальнейшем будет трудно переучиться! Это, конечно, больше относится к своеобразной философии программирования, а не с языком Си, поэтому советую почитать совершенный код.
Аноним 25/06/25 Срд 17:53:57 3484131 315
>>3483455
Я? Я Ярик! Я хочу подружиться!
Аноним 25/06/25 Срд 20:45:50 3484254 316
Аноним 26/06/25 Чтв 16:48:04 3484738 317
изображение.png 111Кб, 751x422
751x422
изображение.png 83Кб, 473x628
473x628
>>3484129
Отлично. Надеюсь смогу донести свою мысль.

В общем выполнял задание из учебника и обнаружил непонятную мне вещь, связанную с переменными.

Есть две программы.
Первая: https://pastebin.com/d7VuAM1f
Вторая: https://pastebin.com/EHmq5zFd

Первая программа это полностью законченное задание, а вот вторая это кусочек из первой программы, который я писал отдельно чтобы не путаться.
И вот у меня возникает проблема с переменной invertedNumber. Почему во второй программе можно не присваивать этой переменной никаких значений и она будет работать идеально, а первой нужно присвоить ноль, чтобы она работала корректно? Если этого не сделать и просто вставить код из второй программы в первую то результат будет отображаться как на второй картинке. В чем причина то? Это как то связанно с работой компилятора или есть более простой ответ?
Аноним 26/06/25 Чтв 16:54:35 3484742 318
>>3484738
А что это за учебник?
Аноним 26/06/25 Чтв 16:58:03 3484743 319
>>3484742
Программирование на языке C. Стефан Кочан
Мне один анон однажды посоветовал начать с него
Аноним 26/06/25 Чтв 17:06:04 3484748 320
>>3484738
Все сильно зависит от компилятора.
Почитай про мусор в переменных.
Аноним 26/06/25 Чтв 17:08:06 3484750 321
>>3484743
Попробуй сразу после объявления этой переменной вывести её значение.
Скорее всего, там что-то уже записано.
C - работающий без всяких рантайм/vm штук. И такое может быть.
Аноним 26/06/25 Чтв 17:40:28 3484769 322
изображение.png 29Кб, 566x532
566x532
глянь такое
Аноним 26/06/25 Чтв 17:40:52 3484770 323
>>3484748
>>3484750
Немного разобрался в чем дело. Странно конечно что некоторым переменным изначально присваивается ноль, а некоторым рандомное значение. С виду ведь вроде одинаковые переменные, магия какая то. Спасибо за помощь.
Аноним 26/06/25 Чтв 19:58:40 3484915 324
image 2Кб, 267x33
267x33
image 2Кб, 412x41
412x41
>>3484738
Такое кековое задание на самом деле, scanf сам преобразовывает считанную строку в int значение, а мы ещё и делаем обратную операцию.

У меня в целом претензии к написанному тобой алгоритму.

Во-первых, скрин1, в Си так никто не пишет, я не пойму, ты хотел сделать И или ИЛИ, но в условиях у тебя выполнялось проверка только на b != 1.

Во-вторых, ты алгоритм плохо написал, его можно сделать в разы лучше и без переворота введённого числа.

#include <stdio.h>

int main()
{
long long unsigned number;
const char *digits[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

//size of string eq to lg(2^64 - 1) + 1
char number_as_a_string[20];

//read from terminal number
scanf("%llu", &number);

//get every digit of input number and save in array
unsigned string_length = 0;
do
{
number_as_a_string[string_length++] = number % 10;
number /= 10;
} while ( number );

for (unsigned i = string_length; i; i--)
printf("%s ", digits[ number_as_a_string[i - 1] ] );

return 0;
}
Аноним 26/06/25 Чтв 20:00:53 3484917 325
>>3484738
А конкретно по твоему вопросу, тебе выше верно ответили. Когда будешь программировать на ассемблере, то даже сам будешь выделять память для переменных на стэке.
Аноним 26/06/25 Чтв 20:26:07 3484927 326
>>3484770
>>3484750

Неициализированные переменные это UB, полномочия С-семантики на этом месте всё.
Аноним 26/06/25 Чтв 20:30:59 3484932 327
>>3484917
Может он на асме эльбруса будет писать а там ничего не надо выделять, даже команд таких нет что бы со стеком что то делать.
Аноним 26/06/25 Чтв 20:32:26 3484934 328
>>3484932
Нихуясе, а где они там хранят массивы маленькие, для которых грех вызывать выделение памяти?
Аноним 26/06/25 Чтв 20:45:30 3484958 329
>>3484738
>В чем причина то? Это как то связанно с работой компилятора или есть более простой ответ?
Есть. Называется undefined behaviour.
Аноним 26/06/25 Чтв 20:56:41 3484974 330
>>3484934
Не знаю, чесно говоря помоему и интеле/арме то это в русную не делается, все операционная система выделяет, еще и ловушки ставит чтоб за определенные границы ты не выскочил.
Аноним 26/06/25 Чтв 21:00:24 3484980 331
>>3484974
>>3484974
> интеле/арме то это в русную не делается
Что-то прохладно звучит, я недавно дебажил программу и своими глазами видел массив на стэке.

> чтоб за определенные границы ты не выскочил.
Сегфолты это не то же самое, что проверки выхода за границы массива в Питоне или Расте.
Аноним 26/06/25 Чтв 21:03:40 3484986 332
>>3484915
>так никто не пишет
Почему тогда это работает с компилятором?
В предыдущем треде кто-то показывал один финт, который поддерживается gcc, но ты крайне редко его встретишь. Это был финт с штуками вида ({...}).

А по поводу while(exp1,exp2) скажу, что gcc такое жуёт.
Так что... Или ты просто не знаешь спецификаций C для отдельных компиляторов, или просто тролль.
Аноним 26/06/25 Чтв 21:12:13 3484995 333
>>3484986
Мужик, ты делаешь буквально лишнее сравнее, которое умный оптимизирующий компилятор убирает, я поэтому вопрос и занял, ты нахуя это сравнение делаешь, если оно ни к чему не приведёт?

> Это был финт с штуками вида ({...}).
То синтаксический сахар удобный, а у тебя какой-то кал в коде.

> Или ты просто не знаешь спецификаций C для отдельных компиляторов, или просто тролль.
Лол, тролль походу тут только ты, буквально два сравнения делаешь, при котором одно ни на что не влияет в последующем, а ещё выёбываешься!
Аноним 26/06/25 Чтв 22:47:19 3485072 334
>>3484980
> своими глазами видел массив на стэке.
Как ты его видел?
> Сегфолты это не то же самое, что проверки выхода
Шизойд блять.
Аноним 26/06/25 Чтв 23:14:13 3485094 335
image 38Кб, 607x292
607x292
image 6Кб, 495x135
495x135
>>3485072
> Как ты его видел?
Видел его в стэке, лол. В x64dbg лень открывать.

> Шизойд блять.
Лол, поясняй давай.
Аноним 27/06/25 Птн 06:30:41 3485183 336
IMG202506270826[...].jpg 159Кб, 646x1405
646x1405
>>3484915
>Во-первых, скрин1, в Си так никто не пишет, я не пойму, ты хотел сделать И или ИЛИ
Да, сглупил тут. Совсем забыл про закорючки && и ||. Как вернусь домой поправлю код.


>Во-вторых, ты алгоритм плохо написал, его можно сделать в разы лучше и без переворота введённого числа.
Массивы будут изучаться в следующей главе, так что их использовать нельзя. Применял только то что было изучено в предыдущих главах.
Аноним 27/06/25 Птн 08:57:15 3485219 337
>>3485183
> Массивы будут изучаться в следующей главе
Об этом не знал...

Что ж, тогда рекурсивные функции!

#include <stdio.h>

void print_digit_as_a_string(long long unsigned number)
{
if ( number ){

print_digit_as_a_string(number / 10);

unsigned char digit = number % 10;

switch (digit) {
case 0:
printf("zero ");
break;
case 1:
printf("one ");
break;
case 2:
printf("two ");
break;
case 3:
printf("three ");
break;
case 4:
printf("four ");
break;
case 5:
printf("five ");
break;
case 6:
printf("six ");
break;
case 7:
printf("seven ");
break;
case 8:
printf("eight ");
break;
case 9:
printf("nine ");
break;
}

}

return;
}

int main()
{
long long unsigned number;

//read number from terminal
scanf("%llu", &number);

//print every digit of number
if ( number ) {
print_digit_as_a_string(number);
putchar('\n');
}
else
printf("zero\n");

return 0;
}
Аноним 28/06/25 Суб 17:31:37 3486363 338
>>3484995
>ты делаешь
Не я.

>синтаксический сахар удобный
Тут тоже выходит некоторый синтаксический сахар, который позволяет сделать осуществление какой-то операции(к примеру, вызова процедуры) каждую итерацию, а уже потом какое-нибудь сравнение. Так что твоя претензия "синтаксический сахар удобный" и твоё "так никто не пишет" выглядят странно.

>тролль походу тут только ты
Ничуть.

>два сравнения делаешь, при котором одно ни на что не влияет в последующем
1) не я
2) прочти выше.

>а ещё
Да-да... Я выделываюсь, а не ты - человек "так никто не пишет".
Аноним 01/07/25 Втр 12:07:49 3488467 339
>>3484915
>while (number > 0, b != -1)
Охуеть, вот ето метопрограммирование.
>>3484995
>если оно ни к чему не приведёт?
Если у number указать модификатор volatile, то тут побочка в виде load операции, которую никто не выкинет, плюсом тут оператор запятая, что вставляет sequence point.
Аноним 01/07/25 Втр 20:46:52 3488791 340
image 35Кб, 1768x234
1768x234
>>3488467
Честно признаться, то я никогда не видел код, где использовался бы этот модификатор.
> load операции
Это что?
> sequence point
О, узнал новую подтему, спасибо.

P.S. проверил листинг ассемблера при ключе оптимизации -O2. проверки на то, что number больше нуля - нет, модификатор добавил. Но зато есть запись этого самого числа number в регистр EAX, это и есть load операция?
Аноним 02/07/25 Срд 13:03:07 3489138 341
>>3488791
> что это?
Это экзамен на твою профпригодность к си. Ты не сдал, вылазь.
Аноним 02/07/25 Срд 14:55:33 3489236 342
>>3489138
Всё, операцию присваивания не узнал, сразу в петухи попал, пиздос.
Кто в РФ и РБ вообще говорит load operation?
Аноним 02/07/25 Срд 15:08:51 3489245 343
двач, допустим я пишу библиотеку для какого то проекта. Допустим ей нужны математические функции для работы (например min, max и т.д). Где именно должны быть реализованы эти функции? в другой отдельной "математической" библиотеке? а если я ещё и в главном файле хочу эти функции использовать, мне и там подключать через #include, и в библиотечном?
Аноним 02/07/25 Срд 18:37:54 3489443 344
>>3489236
Там перед фразой про load которую ты бегаешь надрачиваешь была другая, очень важная часть предложения, которую ты или не понял или проигнорировал по причине рассеиного внимания.
Тебе с такими проблемами ни за си ни за руль нельзя, только за хуй браться можно.
Аноним 02/07/25 Срд 19:01:13 3489453 345
>>3489245
min max обычно макросами реализуют типа:
#define _MIN(a, b) (a)<(b)? (a):(b)
#define _MAX(a, b) (a)>(b)? (a):(b)

Это если у тебя простые целочисленные типы.

Использовать функции мат библиотеки необходимо только в следующих случаях:
1. У тебя вещественные числа в которых могут быть всякие NaN и Infinite (если не предполагаются то смотри сам что удобнее, по идее в процессоре есть инструкции для вещественных min/max, библиотека скорее всего просто их модсунет вместо функций).

2. У тебя вектор из нескольких элементов (правда это уже наверное интринсики надо подтыкать а не мат библиотеку).
Аноним 03/07/25 Чтв 11:05:53 3489796 346
>>3489453
суть вопроса остаётся такой же, только теперь вместо функций дефайны
Аноним 03/07/25 Чтв 11:49:17 3489828 347
>>3489796
Собери всякую такую общую хуйню в зоголовочный фаил, например defines.h в нем обязательно пропиши

#ifndef _DEFS_H
#define _DEFS_H
// ... Тут все твои дефайны (точнее общие для всех исходников, типа MAX_INT итд, локальные сюда выписывать лучше не надо)
#endif

И да инклюдить в те файлы где что то из этого используется.
Аноним 03/07/25 Чтв 13:13:05 3489931 348
>>3489236
>Кто в РФ и РБ вообще говорит load operation?
Любой, кто программирует под load/store машины?
Аноним 03/07/25 Чтв 13:26:53 3489949 349
>>3489931
Бля, ебал я в рот ваше программирование.
Аноним 03/07/25 Чтв 16:23:59 3490120 350
Сап. Слышал, что C это "база" и его надо знать всем. Насколько правда и что скажете о книгах Столярова?
Аноним 03/07/25 Чтв 17:34:51 3490170 351
>>3490120
Лишним знание C точно не будет, даже если использовать его не будешь в работе. У Столярова вроде хорошие книги, но сам их глубоко не читал.
Аноним 03/07/25 Чтв 18:56:37 3490238 352
>>3490120
Столяров это который в городке играет или который древнюю развитую цивилизацию ищет?
Аноним 03/07/25 Чтв 19:50:50 3490292 353
>>3490120
>Сап. Слышал, что C это "база" и его надо знать всем. Насколько правда
Ни на сколько. На 0%. Всем знать точно не нужно. Знание С никак не поможет "лучше освоить" python/java/php/c#/golang. Если тебе показать внутрянку какого-нибудь питона, ты нихуя не поймёшь. Там миллионы строк кода. Если так судить, то ассемблер ещё "базовее", потому что он ещё более низкоуровневый чем С. А машинные коды ещё "базовее" чем ассемблер. Так можно дойти вообще до проводов. Смотри - там нейтроны позитроны летают. Вот это надо изучать, а не это ваше программирование!
Аноним 03/07/25 Чтв 20:07:11 3490319 354
>>3490292
Ассемблер это уже ISA+API конкретной машины, а си это язык программирования, который можно компильнуть под что угодно, питон нельзя, его на микроконтроллерах, и голанга там нет. А си есть и поэтому он база, хотя я тоже против того чтоб его изучали первым (то есть с него начинали) и высирали на нем школокод.
Аноним 03/07/25 Чтв 20:34:48 3490341 355
>>3490319
Ни о чём не говорит. Проблемы с которыми сталкиваются программисты на С не имеют никакого отношения к высокоуровневым языкам - python/java/php/c#/golang. Высокоуровневый программист вообще не думает о таких вещах как управление строками или конкатенация строк. Или когда переполняется int. Или когда дважды освобождается память free() free(). Если ты сам не можешь объяснить зачем тебе си, то он тебе и не нужен. Приведу пример: я хочу сделать автономный дрон с функцией SLAM. Тогда имеет смысл изучать. А просто учить "на всякий случай" - тупо.
Аноним 03/07/25 Чтв 21:47:11 3490384 356
>>3490341
>как управление строками или конкатенация строк.
>Или когда дважды освобождается память free() free().
Как хорошо, что есть плюсы с удобными контейнерами в стандартной либе, которые всё это жуткое байтоёбское говно надёжно прячут у себя в кишках в 99% случаев.
Аноним 04/07/25 Птн 02:06:17 3490494 357
>>3490341
>Высокоуровневый программист вообще не думает о таких вещах как управление строками или конкатенация строк.
Т.е. такими вещами никакой высокоуровневый программист не занимается? Даже в python никто так не делает?
>Или когда переполняется int.
На высокоуровневых языках тоже бывает переполнение типов. В java такое есть.
А вот как бывает при переполнении целого типа в php:
Если PHP обнаружил, что число превышает размер типа int, язык будет интерпретировать число как float.
>>3490341
>Если ты сам не можешь объяснить зачем тебе си, то он тебе и не нужен.
Согласен с таким. При этом на всяких направлениях в вузах с началом кодировки на 01, 02 и 03 постоянно преподается C на первом курсе, а потом со второго и далее почему-то все задачи решаются python'ом и кучей библиотек или всякими специальными программами. При этом у всех какой-то культ C/C++.
Аноним 04/07/25 Птн 05:14:32 3490505 358
>>3490120
Вот прямо знать знать - нахуй не нужно. Но какое-то поверхностное понимание иметь стоит, всё-таки большинство языков используют C-подобный синтаксис.
Аноним 04/07/25 Птн 05:40:09 3490509 359
>>3490341
Давай рпределимся с терминами. Низкоуровневый стиль программирования можно применять везде, байтоебством можно и на джаваскипте заниматься, там даже есть объект DataView для чтения бинарных структур и компилятор glsl.
Да и сам js похож на си, я как то взял сишный исходник A-law декодера для wave audio поменял только оператор переменных и оно просто заработало, все побитовые операции совпадают, (ну кроме некоторых). На джаваскрипте вообще можно было бы многое но слабая динамическая типизация не позволяет (Например в джаваскрипте все отрицательные числа на самом деле флоаты, соответственно к ним уже битовые операции неприменимы и конвертация в uint тоже не работает). Ну и jit тоже накладывает ограничения.

А что касается переполнения инта и его относимости к низкому уровню, то типизация (любая) это как раз базовый атрибут ЯВУ. В машинном коде нету типизации как таковой, там есть регистры на 32бита каждый и операции над определенными типами данных, что на эти регистры положат ему откровенно похую. Можно на вещественный регистр положить инты и сделать вещественное умножение, можно вещественное число положить на целочисленный регистр и поменять ему знак например или сделать невалидным сохранив экспаненту. А можно f16 состряпать что все и делают для неиронок. Машине похуй на переполнение она его просто делает, а следит как раз высокоуровневая система типов напяленая на это все, и следящая что бы ты господин программист не обосрался. Она бывает строгая статическая, как вси, а бывает динамическая как в жс и пхп.

У каждой типизации свои задачи, если ты считаешь что байтики-хуяйтики и контроль за типами это сугубо низкоуровневая ебала для отсталых сишников, то получается на высокоуровневых языках в принципе ничего нельзя написать кроме веба и бизнес прикладух для бухгалтеров. Прикладные приложения требуют опускания в это все и нормальную типизацию.
Аноним 04/07/25 Птн 11:53:25 3490685 360
>>3490509
>там есть регистры на 32бита каждый
так не каждый же
Аноним 04/07/25 Птн 13:50:59 3490795 361
>>3473593
1. Маллок не системный вызов.
2. На пике говнокод с перерасходом памяти и циклов на мойсив указателей. Деды писали макрос АT(i, j).
Аноним 04/07/25 Птн 14:09:16 3490814 362
>>3490494
>культ C/C++
Они возможно приравнивают ето к фундаментальным знаниям, поэтому преподают. Я бы вообще не преподавал языки, чисто блоксхемами обошёлся бы, альзо, типовой выпускничок обычно не делает разницы между Си и плюсодерьмом, как так получается х3.
Аноним 04/07/25 Птн 17:31:52 3491110 363
>>3490120
>Сап. Слышал, что C это "база" и его надо знать всем.
Хуяза. Всем надо знать, что существует альтернатива венде в виде линух. Дальнейшее - дроч на тяжелое наследие pdp-11.
Аноним 04/07/25 Птн 17:40:55 3491121 364
>>3489245
Или так. Главное, чтобы твои min/max не ломали компиляцию тому, кто добавит твой library.h
Аноним 04/07/25 Птн 21:08:39 3491277 365
image.png 21Кб, 312x390
312x390
Методом тыка по аналогии с другими языками вот на такое наткнулся. Как это называется и какие это пункты в стандарте? Если вокруг фигурных скобочек добавить круглые, то получается выражение с последним значением, которое было в блоке в фигурных скобках. Без круглых получается ошибка.

https://ideone.com/kRDeRb
Аноним 04/07/25 Птн 21:39:14 3491297 366
>>3490795
1. Но сводится то к API вызову и запросу у ОСи чуть-чуть памяти, который уже потом сводится к системному вызову.
2. Ну, тут да, можно убрать память под указатели на строки и обращаться с матрицей как с массивом через i * ROW + j, но с другой стороны тут появляется операция умножения, что не очень приятно тоже.
Аноним 04/07/25 Птн 21:45:49 3491303 367
>>3491297
Вариант с массивом указателей может быть лучше. Там у тебя много выделений памяти маленькими блочками на каждую строку. В libpng такое используется. Памяти мало, и виртуальной вообще нахуй нет, например, в WASM под браузером. С маленькими кусочками оно у тебя на пределе может как-то прочихаться, а с большим сразу на всю матрицу (например, картинку) просто упадет.
Аноним 04/07/25 Птн 22:13:15 3491328 368
>>3491303
А?
Если надо порционно обработать данные, то мы просто выделим кусочек нужный и будем в него всё грузить же.

А в чём разница между тем, чтобы выделить память несколькими запросами или одним?
Аноним 04/07/25 Птн 22:15:07 3491333 369
>>3491328
Под один свободного куска такого размера в куче может не быть, если она сильно фрагментирована.
Аноним 04/07/25 Птн 22:20:07 3491338 370
>>3491333
А... Теперь звучит действительно резонно. Но как работают страницы памяти я так и не понял, подскажите что для этого надо прочитать, пожалуйста.
Аноним 04/07/25 Птн 23:22:43 3491399 371
>>3491338
>как работают страницы памяти
Если без деталей, то адресное пространство, которое видит твое программа или ты в отладчике, называется виртуальным, оно транслируется в физическое (адрес на пинах микросхем ОЗУ) блоками по 4 килобайта - страницами. Транслируется по таблице, то есть тупо через массив. Дает операционке всякие плюшки при работе с памятью, например, очень сильно и быстро увеличивать длину уже выделенных блоков (realloc) без полного копирования, или через метож "копирование при записи" быстро выделять огромные массивы, заполненные нулями, которые при этом в физической памяти ссылаются на одну единственную страницу из нулей. Полезная штука, но realloc, например, НЕ используется в крестовой стандартной либе. Разницу видно, когда пытаешься большие данные провернуть на питоне - он всю систему тормозит, или на крестах - работает помедленнее, но меньше затрагивает другие процессы. Но последнее это может быть мое субъективное.
Аноним 04/07/25 Птн 23:52:27 3491433 372
image.png 107Кб, 1169x617
1169x617
"Покажи мне свой код" - самая неудобная просьба для тру-сишника.

Никогда не спрашивайте у женщины про ее возраст, у бизнесмена - про размер его доходов, у низкоуровневого кодера - про его код.
Аноним 05/07/25 Суб 12:43:04 3491717 373
>>3491433
Тру-сишников один на 1кк. Тру-сишник всё с нуля пишет и дрочится с FPGA.
Аноним 05/07/25 Суб 13:04:14 3491737 374
>>3491433
"Покажи мне свой хуй" - самая неудобная просьба для джаваскуфника.

Никогда не спрашивайте у женщины про ее возраст, у бизнесмена - про размер его доходов, у банкоуровневого кодера - что у него под пузом.
Аноним 05/07/25 Суб 15:30:55 3491917 375
Покажи мне свою IDE.
Аноним 07/07/25 Пнд 10:11:15 3493041 376
Почему не выходят новые книги по си?
Аноним 07/07/25 Пнд 11:28:35 3493127 377
>>3430902 (OP)
>Стивен Прата
Книга не полная. Не рассматривает многопоточка и многие сложные темы тоже пропускаются. Это скорей учебник для абсолютных новичков, кто не знает основ программирования. Автор учит не сколько языку Си, а сколько базовым алгоритмам: поиск, сортировка, связные списки и т.п. Для людей знакомым с программированием книга будет душной, т.к. 90% они уже знают.
Аноним 07/07/25 Пнд 11:54:41 3493162 378
>>3493127
Соглы лучше 99штандарт пусть читают заместо Праты.
Аноним 07/07/25 Пнд 12:04:31 3493191 379
>>3493041
Лол, а ты все старые прочитал?
Аноним 07/07/25 Пнд 12:31:45 3493261 380
>>3493191
Там уже 23 стандарт вышел, а все книги остались на старом 11.
Аноним 07/07/25 Пнд 12:35:16 3493270 381
>>3493041
Си мертвый язык. Не перспективно
Аноним 07/07/25 Пнд 12:47:53 3493295 382
>>3493261
>23 стандарт
В котором нихуя вкусного нет.
Аноним 07/07/25 Пнд 12:54:15 3493305 383
>>3493041
ModernC вроде 24 edition.
>>3493295
>нихуя вкусного нет
На вскидку, там nullptr завезли как кейворд, портабельные интовые операции с чеком, битовые литералы, typeof, который в gnuc был, ебала _Bitint, ещё куча всего, что не помню. Ебейший апдейт на самом деле.
Аноним 07/07/25 Пнд 17:50:41 3493620 384
>>3493270
На мертвых языках не пишут ОС и кучу другого системного софта.
Аноним 07/07/25 Пнд 17:53:15 3493622 385
>>3493305
>ModernC
Она же на английском только и ещё на торрентах никто не выкладывает
Аноним 07/07/25 Пнд 18:04:03 3493630 386
>>3493270
Что перспективно ракать в 2к25?
Аноним 07/07/25 Пнд 19:22:47 3493687 387
>>3493620
Есть кхгм тенденция даже там использовать плюсы. Я долго был фонатом чистого си, но работа навела на мысоль, что классы и абстрактные коллекции (пусть неэффективные) лучше иметь из коробки, чем создавать их снова и снова из жвачки и спичек.
Аноним 07/07/25 Пнд 19:40:21 3493698 388
>>3493041
зачем нужны книги если есть стандарт языка? читай его
Аноним 07/07/25 Пнд 19:51:31 3493701 389
>>3490292
>Вот это надо изучать, а не это ваше программирование!
чел, буквально так и изучают
бмстушный курс на ИУ буквально такой как ты и написал.
физика квантовых эффектов p-n переходов, реализации транзисторов, технология производства кристаллов, литография, общая архитектура процессоров, их схемотехника (включая верилог и вхдл), общая архитекутра компьютеров на примере x86, асмы, программируемые чипы, си для армов, базовые алгоритмы на сишке, потом уже жава, питон, матлаб и все остальное
Аноним 07/07/25 Пнд 20:27:39 3493718 390
>>3491277
Фишка в том, что выражение вида ({...}) Будет возвращать результат последней "инструкции".

Т.е. в случае с примером будет возвращаться 1, если a+b равно 3, а иначе 0.

Такая штука не всюду работает, но gcc такое точно жует.
Аноним 07/07/25 Пнд 21:39:19 3493749 391
>>3493718
>выражение вида ({...})
Блок называется
Аноним 07/07/25 Пнд 23:48:54 3493803 392
>>3493749
Блок это {...}, А тут ({...}).
Аноним 08/07/25 Втр 00:05:58 3493817 393
>>3493749
>>3493803
Да мне уже подсказали в ньюфаг-треде. Это gnu-extension, которое работает в gcc, clang и visual studio, но не работает в intel. А мне нравится эта фигня, можно в макрос передавать функцию, сделать в макросе что-то до ее вызова, вызвать ее, сделать что-то еще, а ее результат все равно вернуть. Что-то типа декораторов в петухоне.
Аноним 08/07/25 Втр 09:15:06 3493897 394
>>3493698
Где его читать на русском?
Аноним 08/07/25 Втр 09:18:35 3493898 395
>>3493687
Дак они раз создал, а потом переиспользуешь. Это как бы должно стимилировать писать подобные вещи в виде библиотеки и самому же её использовать в своих программах. У опытного сишника уже всё это есть. А новичкам полезно написать, для лучшего понимания. Вроде даже на джаве некоторые преподы рекомендуют самим писать базовые коллекции, чтобы раз и навсегда понять как они работают в стандартной библиотеке. А если будешь пользоваться готовыми, то придётся учить 100500 исключений как нельзя их применять, не понимая при этом почему это так, а когда сам реализовал, то понимание будет.
Аноним 08/07/25 Втр 11:18:13 3493991 396
>>3493897
там английский крайне простой, буквально для начальной школы. перевод будет сложнее даже, так как будешь во фрустрацию впадать от переведенных терминов

https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf

если уж совсем плохо то просто скорми пдф дипсику и попроси перевод
Аноним 08/07/25 Втр 11:25:02 3493998 397
>>3493898
>У опытного сишника уже всё это есть.
ну это мем 30-летней давности, у каждого сишника есть своя собственная библиотека для работы со строками
Аноним 08/07/25 Втр 12:24:26 3494090 398
>>3491277
Кто это ублюдство придумал? Оторвать руки нахуй надо
Аноним 08/07/25 Втр 12:32:13 3494098 399
>>3494090
Довольно удобно в некоторых случаях. Придумали (вроде) создатели компилера GCC.
Аноним 08/07/25 Втр 12:44:40 3494110 400
>>3494098
Буквально слизали с раста. А ещё это выглядит несуразно, это как в питоне добавили присваивание переменных в условиях по типу if (var := expression): ...
Совершенно противоречит семантике языка
Аноним 08/07/25 Втр 12:55:04 3494126 401
>>3494110
>Буквально слизали с раста
Есть и другие языки, в которых значение блока получается из последнего выражения в нем. Они появились на десятки лет раньше раста. А вообще я лично считаю этот момент довольно разумным. Не зря его в раст взяли.
>это выглядит несуразно
Зато дает дополнительные возможности в макросах, а они местами очень нужны, поскольку C сам по себе все же довольно беден как язык.
>в питоне добавили присваивание переменных в условиях по типу if (var := expression
Добавили потому, что это было нужно и можно. Они где-то многострочные лямбды обсуждали, Гвидо или кто-то другой написал, что там пиздец с индентами получается. Это тоже нужно, но нельзя.
Аноним 08/07/25 Втр 16:31:46 3494356 402
>>3493622
Челибос, она на сцайте автора лежит.
>>3494126
>А вообще я лично считаю этот момент довольно разумным
Самое разумное, что это расширение, и его не тащат в стандарт, хотя всякий кал типо VLA затащили. И я не против экстеншонов, сам пользую присвоение меток в одном из проектктов.
Аноним 08/07/25 Втр 16:38:23 3494363 403
>>3494356
Там только английская версия, а русской нету
Аноним 08/07/25 Втр 17:15:27 3494394 404
Untitled.png 67Кб, 1091x376
1091x376
Читал что в некоторых компиляторах можно не указывать размер массива при его обявлении. Что это за компиляторы такие и где их скачать без вирусов?
Аноним 08/07/25 Втр 17:45:54 3494445 405
>>3494394
Представь себя на месте компилятора, тебя юзер попросил выделить место под массив хуй какого размера, но ладно бы ещё перечислил ещё элементы этого самого массива, так юзер просто попросил выделить место в стэке хуй пойми под какой размер, вот и думай головой, что этому проклятому юзеру надо.
Аноним 08/07/25 Втр 18:50:55 3494520 406
>>3494363
А зачем тебе русская?
Аноним 08/07/25 Втр 18:52:09 3494524 407
>>3494445
>что этому проклятому юзеру надо
Динамический массив.
Аноним 08/07/25 Втр 18:57:35 3494527 408
>>3493701
>технология производства кристаллов
>литография
>верилог и вхдл
>программируемые чипы
>си для армов
У нас такого не было.
мимо иушонок
Аноним 08/07/25 Втр 19:18:07 3494542 409
>>3494524
У него другой синтаксис
Аноним 08/07/25 Втр 19:46:33 3494556 410
>>3490120

>Слышал, что C это "база" и его надо знать всем
Это правда, если тебе 12 лет и ты учишься в школе. Тогда обязательно начинай с C. Если ты уже на первом курсе, то можешь посвятить 1 семестр. Если нет, то забей хуй.
Аноним 08/07/25 Втр 19:50:13 3494557 411
>>3493701

физика квантовых эффектов p-n переходов, реализации транзисторов, технология производства кристаллов, литография, общая архитектура процессоров, их схемотехника (включая верилог и вхдл), общая архитекутра компьютеров на примере x86, асмы, программируемые чипы, си для армов, базовые алгоритмы на сишке, а потом уже диплом и выпускной

Поправил.
Аноним 08/07/25 Втр 20:08:09 3494561 412
>>3490292
Что-то мне кажется, что под "базовостью" в этом случае понимается не близость к железу, а особенности синтаксиса. Зная C на поверхностном уровне (а то, как его изучают в начале вышки) будет куда проще учить как минимум 3 из перечисленных тобой языка.
Аноним 08/07/25 Втр 20:52:12 3494596 413
>>3494527
на иу1-иу5 по идее низкоуровневая шняга должна быть обязательно, была по крайней мере 20 лет назад точно
Аноним 08/07/25 Втр 23:15:42 3494686 414
>>3493701
>физика квантовых эффектов p-n переходов, реализации транзисторов, технология производства кристаллов, литография, общая архитектура процессоров, их схемотехника
На ИУ7 немного этого касаются, но только очень поверхностно, в основном все сводилось к изучению диодов, транзисторов и триггеров в схемотехнике. Про литографию и технологию производства кристаллов ничего не рассказывали, но оно и нахуй не надо программистам.

мимо иу7
Аноним 08/07/25 Втр 23:28:39 3494691 415
>>3494596
Я бы больше в иу6 поверил, что там это трогают, чем на остальных кафедрах. Я тоже с 7ки, учился чуть больше 10 лет назад, у нас только физ. основы электроники были и архитектура эвм, где хоть как-то не программной части касаются. А так асм, ОС, дрова.
Аноним 08/07/25 Втр 23:31:29 3494693 416
>>3494356
>Самое разумное, что это расширение, и его не тащат в стандарт
А потом код использующий это расширение, собирается только одним компилятором, классная переносимость
Аноним 09/07/25 Срд 00:22:42 3494714 417
>>3494542
Какой? Как его написать? Как его потрогать? Как инициализировать его по полной? Хочу его
Аноним 09/07/25 Срд 07:51:44 3494756 418
>>3494520
Только русский знаю
Аноним 09/07/25 Срд 10:43:32 3494824 419
>>3494394
Это разрешается для последнего элемента структуры, но память ты должен будешь выделить сам.
Аноним 09/07/25 Срд 13:04:41 3494981 420
>>3494714
Лучше свой динамический массив реализовать. Столяров кстати запретил использовать динамические массивы, которые добавили террористы-стандартизаторы.
Аноним 09/07/25 Срд 15:47:01 3495096 421
>>3494756
А онлайн-переводчики не справляются? Хотя там с терминами наверняка косяки будут...
Аноним 09/07/25 Срд 16:20:22 3495119 422
>>3494693
>классная переносимость
На вывеске уже висит, что это расширение gcc, дебич.
Аноним 09/07/25 Срд 17:36:20 3495176 423
>>3495096
Они принимают только текст, а не pdf-файл не принимают
Аноним 09/07/25 Срд 18:41:35 3495206 424
>>3494981
>Столяров кстати запретил использовать динамические массивы
Он сделал свой компилятор, который ругается на динамический массив?
Аноним 09/07/25 Срд 18:54:46 3495210 425
>>3495119
Дебич, напиши код с этой мокрописькой и собери его чем-то кроме gcc.
Аноним 09/07/25 Срд 21:20:38 3495271 426
>>3495176
Конвертируй pdfину в текст. И вообще, либо учи английский, либо сразу пиздуй к дегенератам в 1С тред.
Аноним 10/07/25 Чтв 05:54:07 3495400 427
>>3495206
>компилятор, который ругается на динамический массив
Компилятор C++.
Пишешь сишный код в .cpp и компилируешь соответственно как С++. Если что-то не компилируется, значит это неправильный С, исправляешь по стандарту С++. Заодно можешь воспользоваться например строками, которых в С нет и не будет никогда.
Аноним 10/07/25 Чтв 07:26:50 3495417 428
>>3495400
В С есть строки в формате массива байт, который заканчивается нулевым байтом. Это универсальный тип. Можно хранить какие угодно кодировки.
Аноним 10/07/25 Чтв 07:47:29 3495420 429
Вспомнил вскукареки про нет строк в Си.
Так вот, наличие строчных литералов это опровергает. А встроенных операций над строками нет, потому что не было на pdp-11 команд типа rep movsb.
Аноним 10/07/25 Чтв 08:05:53 3495438 430
>>3495417
>В С есть строки в формате массива байт
Ассемблерное говно. Байты это тупо байты, ни больше, ни меньше, не являются ни чем кроме байтов, остальное пердолинг, источник жопоболи и багов из за говна костыляемого вручную бедным ущербным программистом. А я говорил про строки реализованные в языке. В Си не реализованы никакие строки и никогда не будут из за отсутствия поддержки объектов (классов).
Аноним 10/07/25 Чтв 08:10:35 3495440 431
>>3495438
>никогда не будут из за отсутствия поддержки объектов (классов)
Зачем нужны классы для строк?
Аноним 10/07/25 Чтв 08:23:04 3495447 432
>>3495440
Потому что строки не работают без кода. Чтобы сложить две строки требуется код, код в типе это классы, без классов сложные типы реализовать невозможно.

То же самое с массивами, строка это разновидность массива, в Си массивов не существует и не может существовать.
Массив это std::vector, а сишная хуета это лишь сахар над арифметикой указателя, вместо ∗(ptr+i) пишут ptr, ну и плюс делают указатель константным чтобы случайно не переписали, только толку-то хуй, всё равно запросто выходишь за пределы этого "хуйсива" который вовсе не массив. За пределы типа невозможно выйти по определению, сишная поебень это не массив, а костыль указателей, так же как ассемблерные строки не строки никакие.
Аноним 10/07/25 Чтв 08:25:16 3495449 433
>>3495447
>вместо ∗(ptr+i) пишут ptr[i]
Аноним 10/07/25 Чтв 08:29:19 3495450 434
>>3495447
>Массив это std::vector,
Жирно. Вот в Quake C или прологе действительно нет массевов. Улавливаешь разницу? Если нет, порешай задачи на одном из этих языков, потом возращайся.
Аноним 10/07/25 Чтв 08:48:21 3495456 435
>>3495450
>пук
Обтекай, тупое говно.

Указатели это указатели, сырая память, не типы никакие. Отсюда и проблемы дебилов лезущих в Си не понимая этого факта. Память это не шутки, "типы" через указатель это как обращение к файлам по секторам, любая ошибка и файловая система пошла по пизде вместе с данными и твоей порванной жопой, дебил. Потому что секторы это не файлы, и сишная поебень это сырая память - указатель, а вовсе не строки и массивы.
Аноним 10/07/25 Чтв 08:50:32 3495457 436
>>3495447
>код в типе это классы, без классов сложные типы реализовать невозможно
Почему? ФП языки же обходятся без классов, просто структуры и функции для работы с ними выделяют в модуль. В Go классов в чистом виде тоже нет.
Аноним 10/07/25 Чтв 08:58:26 3495462 437
>>3495457
Потому что это скрипты, а Си это язык программирования. У скрипта всё под капотом черного ящика, а программирование когда программист видит код. Разумеется можно засунуть код под капот, только это будет скриптинг, а не программирование. Программирование это дословно "программирование компьютера на некие действия", то есть "управление железом". Программист должен видеть что происходит от его действий, а вовсе сидеть как скрипто-баран и ждать результата от волшебного джина черного ящика.
Аноним 10/07/25 Чтв 09:10:21 3495467 438
>>3495462
>У скрипта всё под капотом черного ящика, а программирование когда программист видит код
Не понимаю. В C++ строки реализованы в стандартной библиотеке, ты её не "видишь" из своего кода, а просто вызываешь методы как чёрный ящик. В каком-нибудь функциональном языке будет точно такая же реализация в стандартной библиотеке, или вообще в самом языке. Разница только в том, что в одном языке используются классы, а в другом структуры.
Аноним 10/07/25 Чтв 09:16:54 3495472 439
>>3495210
>и собери его чем-то кроме gcc.
Но зачем?
Аноним 10/07/25 Чтв 10:25:06 3495521 440
>>3495210
>Дебич, напиши код с этой мокрописькой и собери его чем-то кроме gcc.
Блядь, уебите этого тупого мудака кто-нибудь.
Аноним 10/07/25 Чтв 10:28:39 3495524 441
>>3495456
>Указатели это указатели, сырая память, не типы никакие
При этом практически указатели на не совместимые типы (и не только) воспринимаются, как указатели на разные объекты.
Аноним 10/07/25 Чтв 10:33:09 3495531 442
>>3495456
Просто переполнение а[5] не обнаруживается. Ты еще скажи, что в Си нет чисел, потому что переполнение + не обнаруживается.
Операция а шире по возможностям, чем индексация КЛАСИЧИСКАГО массива, поэтому такие массивы есть как подмножество Си.
Аноним 10/07/25 Чтв 12:18:48 3495660 443
>>3495531
>в Си нет чисел
Мне в универе когда-то объясняли, что чисел там реально нет. Там скорее кольцо классов вычетов по 2^n, где n может быть равно 16/32/64.
Аноним 10/07/25 Чтв 19:15:46 3496046 444
>>3495521
Спешите видеть, обезьяна не понимает зачем нужны стандарты
Аноним 11/07/25 Птн 00:56:30 3496249 445
>>3495531
В Си есть числа, потому что числа есть в инструкциях процессора, а вот массивов и строк в процессорах нет, вот и в Си нет. Поэтому сишка бесполезное говно без элементарных типов которые приходится костылять через жопу с охуительными багами:
> напечатал "hello"+"world"
> @
> коррупция стека с непредсказуемыми последствиями и возможностью инжектить на выполнение произвольный код
Аноним 11/07/25 Птн 10:19:02 3496359 446
Кто в чем пишет на Си, кроме вима-нано?
Аноним 11/07/25 Птн 10:40:53 3496379 447
>>3496249
>В Си есть числа, потому что числа есть в инструкциях процессора, а вот массивов и строк в процессорах нет, вот и в Си нет.
Да, а что же тогда значат лиетралы " и [] в си?
Аноним 11/07/25 Птн 10:48:49 3496383 448
>>3496249
>В Си есть числа, потому что числа есть в инструкциях процессора,
Это дебильный аргумент, потому что фичи языка могут не быть в цпу, и наоборот..
> массивов и строк в процессорах нет, вот и в Си нет.
В процессоре нет "hello\n", а в Си есть. Шах и мат!
>напечатал "hello"+"world"
Варнинг в лоб тобi.
Аноним 11/07/25 Птн 10:51:34 3496385 449
>>3496379
синтаксический сахар для указателей
Аноним 11/07/25 Птн 10:52:30 3496387 450
Аноним 11/07/25 Птн 10:57:18 3496389 451
>>3496387
subscript operator (это не литерал кстати) де-факто просто указывает на смещение от начала массива
Аноним 11/07/25 Птн 10:57:54 3496392 452
>>3496389
В смысле что там pointer arithmetic под капотом
Аноним 11/07/25 Птн 10:59:53 3496394 453
>>3495660
Для беззнаковых типов результат i+1 всегда определен, а для знаковых не всегда. Вот тебе и числа.
Аноним 11/07/25 Птн 11:04:22 3496404 454
Аноним 11/07/25 Птн 11:15:06 3496416 455
>>3496404
Ну если это просто указатели на адреса памяти, ты ты можешь написать int array[] = "string"; и всё прекрасно скомпилируется
Аноним 11/07/25 Птн 11:15:29 3496417 456
Аноним 11/07/25 Птн 13:35:17 3496525 457
17501336427530.jpg 226Кб, 640x640
640x640
ануаны, кто шарит в написание хуков для игор? скажем, если мой хук перехватывает функцию только для получения информации и выведения ее в консоль, то античит (похуй какой) это заметит и ебанет меня? или они ебут только когда пытаешь подменить функцию и заэксплойтить ее в игру?
Аноним 11/07/25 Птн 14:59:37 3496590 458
>>3496404
>на адреса в памяти
Указатель не на адрес, а на объект в памятит, додич.
Аноним 11/07/25 Птн 20:06:21 3496798 459
>>3496249
Ты опять выходишь на связь, пидорас? ( >>3490341 )
Тебе макаке напихали хуев вроде, ты опять пришел ту же хуйню нести.
Какие числа ты нашел в инструкциях к процессору, ты с ассемблером работал вообще, клован?
Аноним 11/07/25 Птн 21:40:23 3496839 460
>>3496416
Потому что компилятор откажется это компилить, а не потому что оно физически не могло бы работать, если бы скомпилилось (что ты подразумеваешь). Это какая-то непостижимая концепция для senior php.js девелопидора?
Аноним 12/07/25 Суб 04:52:41 3496960 461
>>3496359
VS Code
Пробовал эти вимы-нано - жутко неудобно. Пока удобного консольного редактора не сделали.
Аноним 12/07/25 Суб 08:11:39 3496973 462
изображение.png 19Кб, 334x202
334x202
изображение.png 23Кб, 334x202
334x202
>>3496960
Расширение от МС? У меня почему-то ругается на #include <gtk/gtk.h>, хотя я указал где искать. Чего ему еще надо?
Аноним 12/07/25 Суб 09:47:18 3497004 463
>>3496960
На голых TUI-редакторах никто не пишет, обычно берут nvim и обмазывают плагинами реально удобно реально под себя
Аноним 12/07/25 Суб 11:01:44 3497041 464
>>3496960
Ты просто привык мышкой тракторить.
Аноним 12/07/25 Суб 13:41:33 3497119 465
>>3497004
Долго настраивать. Вс код - это готовое решение и плагины легко ставятся, а тут надо самому конфиги писать. Адекватных инструкций тоже сложно найти и многие уже устарели.

>>3497041
Сейчас работаю на ноуте без мышки и настроил вс код на управление с клавы.
Аноним 13/07/25 Вск 10:49:53 3497639 466
>>3497119
>Долго настраивать
У тебя emacs должен был быть настроен лет 10-20 назад.
Аноним 13/07/25 Вск 21:02:19 3497918 467
>>3496839
Ну так а где у тебя сам "язык С"? Там где компилируется или там где физически работает? А, джуниор пхп девелопер?
Аноним 14/07/25 Пнд 10:10:09 3498142 468
>>3497639
Я тогда линупсом не пользовался, а была только винда хр, а в ней нормальные редакторы типа вижлы или борланд с++ 3.1
Аноним 15/07/25 Втр 14:12:51 3498883 469
>>3494445
Представил, ну раз размер не указан, то пусть будет 0.
Аноним 16/07/25 Срд 09:42:03 3499259 470
images.jpg 7Кб, 275x183
275x183
Аноны, я тут увлекся leetcode'ом, решаю и радуюсь. И решал конечно всё на Python. А потом попалась задачка на структуры данных, и я решил написать её на C. И понеслась. Читаю теперь про всякие деревья и как сомелье выбираю какое дерево мне посадить. И я, наверное, сам всё запилю. Но для интереса спрошу, чем сейчас современные Си-синьёры пользуются, когда нужны стандартные структуры данных? Это есть в stdlib ? Я уже нихуя не помню. Помню C++ STL
Аноним 16/07/25 Срд 09:52:49 3499269 471
image.png 16Кб, 701x175
701x175
>>3499259
Вот это охуенный язык, вот это я понимаю.
Аноним 16/07/25 Срд 10:19:17 3499298 472
Аноним 16/07/25 Срд 10:49:57 3499318 473
Аноним 16/07/25 Срд 11:22:56 3499352 474
Аноним 16/07/25 Срд 11:28:23 3499358 475
>>3499352
Ты не понял, это был только пример, как обстоят дела в Си с сабжем.
Аноним 16/07/25 Срд 11:49:03 3499375 476
>>3499358
Да я понял, принято велосипедить.

В nginx должен быть хороший код, чебы не спиздить от туда красно-черные деревья по Корману.
Аноним 17/07/25 Чтв 09:00:50 3499915 477
Почему Керниган и Ритчи не написали книгу по 99 и 11 стандартам? Они тоже не поддерживают террористическую деятельность стандартизаторов?
Аноним 17/07/25 Чтв 10:02:06 3499944 478
images.jpg 6Кб, 259x194
259x194
>>3499915
Может они писали свою книгу в каком-нибудь 72-м году ?
Аноним 17/07/25 Чтв 16:05:39 3500197 479
Аноним 17/07/25 Чтв 16:08:37 3500199 480
Аноним 18/07/25 Птн 07:59:52 3500597 481
>>3499944
В 89 же они написали второе издание по ANSI-стандарту.
Аноним 19/07/25 Суб 13:43:03 3501567 482
>>3435134
а - она закрыта, где красивость то смотреть?
б - частично на плюсах и хаскеле
Аноним 19/07/25 Суб 14:59:35 3501603 483
>>3501567
>частично на плюсах и хаскеле
А на хаскеле там что? ДСЛ который в си транслируется?
Аноним 19/07/25 Суб 15:19:10 3501618 484
>>3501603
ну, закрыта же, точно не сказать по публичной информации (DSL, что-то из ядра).
покрайней мере нанимают со знанием хаскеля для разработки ОС
Аноним 19/07/25 Суб 23:36:33 3501866 485
Я запутался в структурах и указателях. Что делать? Я не понимаю что происходит в моей программе.
Аноним 20/07/25 Вск 02:56:00 3501899 486
>>3501866
Скидывай код, тут помогут разобраться! Но это неточно.
Аноним 22/07/25 Втр 19:30:12 3503680 487
>>3499375
Не лучшие. Возьми у Andrea Archangeli.
Аноним 26/07/25 Суб 17:59:09 3506290 488
>>3499269
Больше всего боли вызывает отсутствие хешмап из под капота. Очереди/стеки/листы делаются буквально за пару минут
Аноним 27/07/25 Вск 07:27:14 3506581 489
>>3506290
Что мешает написать такую либу один раз и пользоваться ей?
Аноним 27/07/25 Вск 15:47:09 3506818 490
А что мешает найти уже готовую, оттестированную и испробавнную людьми либу и пользоваться ей? или в си надо всегда велосипеды городить, главное что все свое?
Аноним 27/07/25 Вск 16:33:54 3506875 491
>>3506818
А что мешает ее стандартизовать? хуевость си в работе с адт
Аноним 27/07/25 Вск 20:27:59 3507019 492
Что круче, С++ или С?
Аноним 28/07/25 Пнд 05:46:35 3507183 493
>>3507019
Зависит от ситуации.

Но если лень мучаться с такими темпами, как своевременное удаление объектов(высвобождение памяти), то рекомендую посмотреть java/kotlin/c#/rust. Если не хочется мучать себя типизацией, то стоит посмотреть js/python.

А ещё, самое главное, сначала надо определиться с целью. Без этого никуда.
Аноним 28/07/25 Пнд 06:03:27 3507184 494
>>3506875
С++ мешает, это си для людей, а чистая сишка маргинальный кал для хипстеров-нитакусиков, разумеется там никого и ничего нет, только копаться в помойках на каждую потребность.
Аноним 28/07/25 Пнд 08:06:01 3507193 495
>>3507019
С лучше для обучения, язык проще и заставляет изучить все базовые алгоритмы, реализовать ручками все типовые структуры данных.
В С++ есть std и рекомендуется пользоваться ей. Не факт, что программист, изучит как она устроена внутри и поэтому не будет понимать все тонкие моменты.
Поэтому учиться лучше на С, а потом переходить на С++.

Есть направления, где применяют только С - это написание ОС, ембедед и т.п.
Аноним 28/07/25 Пнд 09:21:36 3507206 496
Аноним 28/07/25 Пнд 11:28:47 3507320 497
>>3507193
Для обучения лучше бейсик и ассемблер как на старых компьютерах где в качестве ОС был этот самый бейсик. Сначала программируешь по-простому на бейсике, потом оптимизируешь ассемблером.

А сишка, там синтаксис математический (функции-хуюнкции), это говно изуродует мозг, всё равно что хаскелем учить программирование, ничего кроме урода такое обучение не вырастит.
Аноним 28/07/25 Пнд 11:35:27 3507330 498
>>3507019
Ну смотри. Банальнейший пример. В С чтобы передать объект без копирования, ты просто передаешь указатель, все. В c++ говне тебе нужно: сделать класс, сделать конструктор, сделать конструктор копирования, сделать конструктор перемещения. Вот и думай головой. Сиплюс кал - усложнение ради усложнения
Аноним 28/07/25 Пнд 12:07:53 3507396 499
>>3507330
>>3507330
Эээ, падажи ёбана, в плюсах также можно передать через указатель, плюс есть механизм ссылок, который тоже позволяет передавать объект без его копирования. Ну, да ссылки тоже на указателях основаны и что?
Аноним 28/07/25 Пнд 12:09:47 3507401 500
>>3507396
>в плюсах также можно передать через указатель
Да, можно, но тогда встаёт вопрос, нахуя тогда вообще плюсокал нужен, если проще и быстрее писать на чистом си?
Аноним 28/07/25 Пнд 12:50:18 3507453 501
>>3507401
шаблоны, перегрузка функций и операторов, ссылки, ну и ООП само собой.
мимо
Аноним 28/07/25 Пнд 12:50:31 3507454 502
>>3507401
Анон, люди программируют на чём считают нужным и не надо ебать им мозги.
Аноним 28/07/25 Пнд 16:53:38 3507755 503
>>3507401
>если проще и быстрее писать на чистом си?
Сколько больших проектов довелось видеть/писать на чистом C?

C++ позволяет за счёт перегрузки функций и методов не писать множество имет типа add_vector_(...), add_matrix_(...), add_strings(...) И это я ещё сократил имена, а писать под каждый тип одно имя.

Я уже молчу про то, что возможность работы с методами объектов.

Не скажу про полиморфизм. Он во всех более-менее серьезных вещах почти не встречается. Но вот штука с инкапсуляцией вещь хорошая.

А трюк с namespace, что позволяет подключить h/cpp файл и взять то, что нужно, что не приводит к тому, что потом может начать ругаться компилятор на то, что где-то дважды идёт переопределение функций/методов, вообще замечательная вещь.
Аноним 28/07/25 Пнд 17:44:36 3507808 504
>>3507330
на что ты в си "просто передаешь" указатель? на неинициализированную память?
В си надо выделить память определенного размера скажем под структуру, обязательно инициализировать ручками или мемсетом и передать в некую функцию обрабатывающую структуру, которая в плюсах будет просто методом класса и вообще не требует его явной передачи в виде аргумента.
И выделять инициализировать ничего не нужно, и вообще в плюсах ручная алокация не приветствуется и практически не требуется.
Аноним 28/07/25 Пнд 18:19:48 3507837 505
>>3507808
Пчел, тебе точно так же нужно выделять память через new/смарт поинтер и инициализировать в конструкторе
Аноним 28/07/25 Пнд 19:14:01 3507898 506
>>3507837
нет помойму на плюсах все нулями заполняется всегда. Единственный аналог маллока в плюсах это std::vector<T>::reserve(size_t) то есть память резервируется так же как в сях через маллок, однако размер вектора пр этом остается нулевой и его не получится итерировать и прочее. То есть доступ к немнициализированным данным в плюсах не предполагается в принципе.
Аноним 28/07/25 Пнд 19:32:22 3507905 507
>>3507898
Аллоцирование памяти в плюсах это буквально что то вроде маллок+вызов конструктора. Существует еще placement new, когда нужно не тратить время на аллокацию объекта, а сразу инициализировать в уже аллоцированной памяти
Аноним 28/07/25 Пнд 20:30:24 3507948 508
>>3507905
Да нет просто calloc, конструктор это не столько про инициализацию (проинициализировать объект можно даже без запуска конструктора), но вот если объект наследуется от других объектов, тем более если это внешние классы вроде классов из Qt, то нужен конструктор который перед собственной инициализацией запускает конструкторы всех наследуемых
Аноним 29/07/25 Втр 17:08:57 3508475 509
Блять.

Указатель на char передаеться в printf и в вывде терминала действительно строка.

Я смотрю на него и думаю, что за хуйня, каким образом указатель на один char может быть строкой, то есть массивов char если вместе с указателей не была передана длина массива? Как printf может знать где заканчивается строка если всё что он знает это адресс начала массива char?

А он и вообще куча всего оказывается читает по указателю пока не натытыкается на символ \0 окончания строки.

Охуенно. Каким блять образом я должен был это узнать из кода? Хуле для всех остальных типов нужно явно передавать длину массива, а с char не нужно.
Аноним 29/07/25 Втр 19:08:20 3508530 510
>>3508475
Ну, на самом-то деле передавать размер строки надо, что в Linux, что в Win10, просто умные системные вызовы это делают за тебя. Да и это так-то база, на любом базовом курсе рассказывают, что "строка" в Си заканчивается терминированным нулём.
Аноним 29/07/25 Втр 19:28:46 3508550 511
>>3508530
> это база
Понимаю. Только это нарушает существующую логику с остальными типами.
Аноним 29/07/25 Втр 21:08:42 3508636 512
>>3508550
Хз, ну, это особенность Си, довольно удобная, что в строке тебе никогда не попадётся байт 0x00 и поэтому удобно вычислять размер строки, просто ища этот самый ноль, что не так? Не баг, а фича.

А по факту ты строку можешь сам реализовать, либо как в Си++ на основе векторов, либо с нуля написать свою структуру строка, это уровень второго курса слабого универа.
Аноним 29/07/25 Втр 21:59:11 3508675 513
>>3508636
Да я то могу, вот только мне приходиться работать с другими библиотеками. Как не сложно догадаться я жабист, который вынужден рефакторить код С++ разработчика.
Аноним 30/07/25 Срд 18:37:34 3509420 514
изображение.png 6Кб, 623x128
623x128
Почему у меня это не работает?
Аноним 31/07/25 Чтв 19:32:11 3510071 515
>>3508530
>>3508475
Обоим курить доки по Си быстро решительно. На строку размер не нужен, строка заканчивается нультерминатором.
Аноним 31/07/25 Чтв 19:37:02 3510075 516
>>3510071
И это не логично. Почему массив из интов не заканчивается нультерминатором?
Аноним 31/07/25 Чтв 19:56:14 3510086 517
>>3508675
>>3508550
бля сишарпмакака была, теперь еще жабамакака.
> нарушает логику
>с типами
забудь про типы из жабы, и логика здесь другая, более низкоуровневая.
у строки тип - указатель на даные только для чтения, в си поддерживаются только восьмибитные кодировки, но уже тогда было понятно что это серьезное ограничение. В плюсах есть объект std::string толерантный ко всем кодировкам с любым размером на символ
Аноним 31/07/25 Чтв 20:15:50 3510107 518
Аноним 31/07/25 Чтв 20:44:43 3510131 519
>>3510075
потому что массив это просто массив а строка это зависимая от таблицы символов (кодировки) сущность, нулевой код - это конец строки. Помоему от 0 до 10 идут спецсимволы не являющиеся кодом таблицы.

В си объектных типов нет, здесь типы это метаинформация о размере и роде операций над данными. строка это константный указатель на байты. почему константный потому что строка может быть в незаписываемой области памяти (в бинарнике программы тупо вшита). В противном случае у тебя не строка, а буфер допустим максимально на 1024 символа, в который ты поочереди записываешь строки
"kukarek" "\0"
"puk" "\0"

и передаешь для вывода, размер буфера печатающей функции знать не нужно она натыкается на нольи останавливается. Дальше другую. тебе не надо подтирать весь буфер или выделять новый, просто пишешь строку, ебашишь нуль вконце и передаешь на вывод. Всё. Так работает все в сишных программах в позикс терминалах. И поэтому оно работает быстро и не жрет 100мб псмяти как жаба.

Но да питоновые или жабовые строки так не работают и у людей которые пытаются скомуницировать с си из этих языков, начинаются проблемы. Но тут такое дело во первых в си есть функции которые печатают не по правилам c_str а по указанному в переменной N размеру, соответственно в обратную сторону надо тоже не c_str отправлять а обычный массив байт, это значит что buf[] = "puk kukarek" писать нельзя в конце к строковым литералам подставляют нультерминатор, дели на чары buf[] = {'p','u','k',' ' ...}

хотя питон вроде умеет правильно энкодить/декодить, сишные строки в том числе, там в аргументах энкодеру декодеру надо аргумент какой то указывать вроде.
Аноним 31/07/25 Чтв 21:02:43 3510139 520
>>3510131
> buf[] = "puk kukarek" писать нельзя в конце к строковым литералам подставляют нультерминатор
всмысле компиляторы в строчный литерал подставляют автоматом нулевой символ в конце, чтоб printf не распидорасило если забыл, ну или просто что бы не загоязнять код спецсимволами.
Аноним 31/07/25 Чтв 21:23:03 3510145 521
>>3510131
Спасибо! Правда хорошо объяснил
Аноним 01/08/25 Птн 06:54:40 3510369 522
image.png 51Кб, 653x335
653x335
>>3510071
Ага-ага, не нужны, ты хоть раз системные вызовы щупал, мужик? Ты меня своим комментарием обидел, если ты достойный человек, то прошу тебе признать свою неправоту.
Аноним 01/08/25 Птн 10:14:09 3510449 523
>>3510369
и что это значит? на что именно ты отвечаешь, шизик?
Аноним 01/08/25 Птн 10:21:10 3510458 524
>>3510369
а ну окей, я думал на другой пост ответ.
хотя я все равно не понял что ты принес, причем здесь сисколы. Ядро операционной системы и ее вызовы какое отношение к стандарту си имеет? никакого, ты еще спроси где тут кодировка. второй момент про нультерминаторы ты ниже сам сказал. Нуль терминатор обязательный атрибут в сишной строке, если строка заканчивается просто границей буфера то это UB.
Аноним 01/08/25 Птн 10:24:48 3510462 525
>>3510369
Ну да, в write надо передавать размер, т.к. это системный вызов и он ожидает буфер и его размер, только вот перед этим в обертке printf он получает размер строки по нулл-терминированности, проходит по строке, получает размер и уже потом все это передает в системный вызов write
Аноним 01/08/25 Птн 17:24:34 3510895 526
image 27Кб, 1072x294
1072x294
здарова педрилы
уб шизику отдельный привет
итак внимание вопрос

напишите задачу в которой понадобилось бы вернуть множество значений из функции (не указатель на массив/стрингу/байтшлак а именно мультипол валуес которые не реализованы в си, многократный ретурн нахуй)
Аноним 01/08/25 Птн 17:26:57 3510896 527
>>3509420
для этой хуйни вроде нужна жужжалка на материнке а их перестали делать с какого то там бородатого года
Аноним 01/08/25 Птн 18:29:28 3510918 528
>>3510895
>напишите задачу
защеку тебе написал
формулировать научись, долбоебина. Тред по си наверное создан что бы решать задачи на этом языке, а не что бы их тебе задавать на твоих же условиях, наркоман блять.

struct mval { double f; bool ok; };

struct mval foo(...)
{
double d; bool y;
//...
return (struct mval){ d, y };
}

вот тебе multiple vals, какая то особая поддержка не нужна для этого.
Аноним 01/08/25 Птн 18:40:17 3510926 529
>>3510918
ты ебало то закрой раз не умеешь подкат читать хуесосина тупорылая
Аноним 01/08/25 Птн 18:46:05 3510935 530
>>3510918
Единственный способ борьбы с долбоебами на анонимных бордах это их игнорирование
мимо
Аноним 01/08/25 Птн 18:52:00 3510940 531
>>3510935
тоесть ты ща дедулю Маккарти долбоебом назвал получается хуясе у тебя чсв орунах
Аноним 01/08/25 Птн 19:11:04 3510955 532
>>3510935
чет в последнее время во всех разделах тематики наплыв каких то агрессирующих шизиков, то ли с каникул ананимусы возвращаются откормленые бабкиной сметаной, то ли где то свет давно не отключали, и надо бы вернуть профилактику, хорошо помогала.
Аноним 01/08/25 Птн 19:18:27 3510959 533
>>3510955
Мне кажется это один и тот же человек или двое, потому что стилистика сообщений схожа
Аноним 01/08/25 Птн 19:19:28 3510960 534
вощим как обычно сиблядки не в состоянии осилить текст в посте и пукают обиженным ря так и запишем
Аноним 01/08/25 Птн 19:38:10 3510970 535
>>3510959
Не ну один то я, проявляю слабость.
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов