Добавлена поддержка ЭЧ/Ech (ex-Escapechan) и Ежчана (ejchan.net, ejchan.site). Набегаем, тестируем архивацию, сообщаем о замеченных проблемах.
К сожалению, значительная часть сохранённых до 2024 г. изображений и видео была потеряна (подробности случившегося). Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Единственный тред по СИ clang /clang/

 Аноним 08/01/26 Чтв 03:00:43 #1 №3619616 
channels4profile.jpg
photo2026-01-0802-43-09.jpg
photo2026-01-0802-57-46.jpg
Тред для всех кто хочет погрузиться в низкоуровневое и системное программирование дедушки си

Обсуждаем чужие гитхабы, коды, программирование микроконтроллеров.

сам учился на степике, всем советую прочитать книгу Брайана Кернигана и Денниса Ритчи «Язык программирования Си»

ЗАДАВАЙТЕ ВОПРОСЫ И ПОЛУЧАЙТЕ ОТВЕТЫ!
Аноним 08/01/26 Чтв 03:03:06 #2 №3619617 
>>3619616 (OP)
мой гитхаб https://github.com/fomkiryaCRAZYboy
Аноним 08/01/26 Чтв 03:06:16 #3 №3619620 
неплохие примеры кодов в репозитории))
Аноним 08/01/26 Чтв 09:04:08 #4 №3619664 
>>3619620
ахахах да прикольно , ржу нимагу)))) давайте,встречу айтишников сделаем ,пивка по пьем ёпт)))))
Аноним 08/01/26 Чтв 18:34:06 #5 №3619995 
Стоит ли читать Столярова 2 том?
Аноним 08/01/26 Чтв 19:34:41 #6 №3620026 
>>3619995
ну если нужно что-то более менее простенькое прочитать, то норм
вавилен 09/01/26 Птн 01:22:26 #7 №3620188 
дано: плата с микроконтроллером esp32 и допплеровский датчик движения rcwl-0516. щас расскажу что с этим делать)

для начала схема подключения:

gnd (rcwl-0510) - gnd (esp32)
vin - 5v
out - любой свободный gpio

суть в том, что при обнаружении движения, датчик выдает напряжение на контакт OUT, программно мы опрашиваем наш gpio pin, и при возникновении там логической единицы понимаем, что китайцы прислали рабочий датчик.

вот так максимально просто это реализовано на си:

```
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "driver/gpio.h"

#include "log.h"

#define MOTION_SENSOR_GPIO 22

static const char TAG = "GOVN0_SL0NA_main";
void app_main(void)
{
gpio_config_t io_conf = {
.intr_type = GPIO_INTR_DISABLE,
.mode = GPIO_MODE_INPUT,
.pin_bit_mask = (1ULL << MOTION_SENSOR_GPIO),
.pull_down_en = GPIO_PULLDOWN_ENABLE,
.pull_up_en = GPIO_PULLUP_DISABLE,
};
gpio_config(&io_conf);

int motion_sensor_state = 0;
int previous_state = 0;

while (1) {
motion_sensor_state = gpio_get_level(MOTION_SENSOR_GPIO);

/
регистрируем движение только при переходе с 0 на 1 /
if (motion_sensor_state == 1)
{
TickType_t current_time = xTaskGetTickCount();
uint32_t time_ms = current_time
portTICK_PERIOD_MS;
ESP_LOGI(" -- ", "Motion sensor detected motion! Time: %lu ms (%.2f seconds)\n",
(unsigned long)time_ms, time_ms / 1000.0f);
}

ESP_LOGI(" -- ", "Motion sensor state: %d\n", motion_sensor_state);

vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
```

из логов видно, что все работает:

```
I (283) main_task: Calling app_main()
I (283) -- : Motion sensor state: 0

I (4283) -- : Motion sensor state: 0

I (5283) -- : Motion sensor state: 0

I (6283) -- : Motion sensor state: 0

I (11283) -- : Motion sensor detected motion! Time: 11010 ms (11.01 seconds)

I (11283) -- : Motion sensor state: 1

I (12283) -- : Motion sensor detected motion! Time: 12010 ms (12.01 seconds)
```


всё лучшее - на СИ!
Аноним 09/01/26 Птн 07:59:14 #8 №3620215 
>>3620188
>vTaskDelay(1000 / portTICK_PERIOD_MS);
>while (1)
В гпио же ивенты были?
Аноним 09/01/26 Птн 08:31:09 #9 №3620219 
>>3619616 (OP)
ASM или Си?
вавилен 09/01/26 Птн 12:04:06 #10 №3620287 
>>3620215

это так, простенький пример, лучше конечно создавать отдельную задачу для опрашивания gpio и очередь для передачи событий из прерывания в задачу
Аноним 09/01/26 Птн 13:49:28 #11 №3620337 
>>3620219
сиси
интересный пост на хабре про умный дом с есп32 вавилен 09/01/26 Птн 23:40:52 #12 №3620683 
https://habr.com/ru/articles/983860/
Аноним 12/01/26 Пнд 09:47:08 #13 №3621833 
Почему в си используются только строки ASCIIZ? Что если я хочу строки в стиле паскаля: размер строки и массив символов? Допустим даже напишу свои функции для работы с такими строками, но строковые константы (которые в двойных кавычках, типа "привет, мир!") всё равно останутся с '\0' в конце. Как поменять формат строковых констант на свой?
Аноним 12/01/26 Пнд 18:37:05 #14 №3622290 
>>3621833
У строк в Паскале есть один минус. Они ограниченны, не больше 255 символов. В С строки в этом смысле лучше, ты войну и мир вместить в одну строку можешь. В Паскале придется мастерить что-то динамическое, типа связного списка.
>но строковые константы
Писать наверное какой-нибудь конвертор для них, хз.
>Как поменять формат строковых констант на свой?
Скорее всего никак. Только компилятор переписывать.
Аноним 12/01/26 Пнд 19:36:56 #15 №3622333 
>>3622290
Хотя в С тоже придется динамический массив делать для войны и мира. Но ты понял, это просто массив, а не какая-то нетривиальная структура.
Но в новом паскале наверное это как-то решили. Последний раз программировал ещё на турбо.
Аноним 13/01/26 Втр 08:46:17 #16 №3622522 
>>3622290
Наверно только генерировать массив из отдельных символов, типа
const char str[] = { 'H', 'e', 'l', 'l', 'o' };
noSANITIZER вавилен 13/01/26 Втр 17:44:54 #17 №3622887 
изображение.png
Сегодня выяснилось что в нашем mips-тулчейне отсутствуют библиотеки санитайзеров (libasan.so,..).

для примера возьмём такую программку с явной проблемой:

int main(void)
{
int arr[5];
for (int i = 0; i <= 5; i++) {
arr = i;
}
return 0;
}


имеется выход за пределы массива

компилируем с необходимыми флагами:
gcc test_file.c -fsanitize=address -g -O0 -o test_file

запускаем и видим ошибку времени исполнения:

==352074==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7f2e77c00034 at pc 0x5563dcbb222e bp 0x7ffc0c6fa970 sp 0x7ffc0c6fa968
...
...


именно так это и должно работать, но при попытке собрать эту программу нашим компилятором:

/opt/mipsel-unknown-linux-gnu/bin/mipsel-unknown-linux-gnu-gcc nsm/test_file.c -fsanitize=address -g -O0 -o test_file
/opt/mipsel-unknown-linux-gnu/bin/../lib/gcc/mipsel-unknown-linux-gnu/12.2.0/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find libasan_preinit.o: Нет такого файла или каталога
/opt/mipsel-unknown-linux-gnu/bin/../lib/gcc/mipsel-unknown-linux-gnu/12.2.0/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find -lasan: Нет такого файла или каталога
collect2: error: ld returned 1 exit status

на фотке переписка с тимлидом. че делать
Аноним 13/01/26 Втр 18:32:58 #18 №3622932 
>>3622887
>Белые люди изобрели божественный абсолютно безопасный Раст
>Продолжать пользоваться дырявыми С/С++
Вы заслуживаете все ваши беды.
Аноним 13/01/26 Втр 20:29:02 #19 №3622975 
>>3622932
Раст успел уже обосраться и в ядре линупса и в сетевой инфраструктуре амазона. Ни какой безопасностью там и не пахнет, если программист накосячил, то раст не спасает. А вот мозги, при написании программ, выносит изрядно.
Аноним 13/01/26 Втр 20:48:49 #20 №3622989 
>>3622932
>Белые люди
Ты не охуел там? Тебя пидорасты за такой хейтспич закэнселят, рэйсист неинклюзивный.
Аноним 14/01/26 Срд 05:22:51 #21 №3623347 
>>3622932
Ты просто бык. Быку кнут. А плюсы для тех кто по натуре своей свободу любит.
Аноним 15/01/26 Чтв 12:34:01 #22 №3624457 
>>3620026
А есть что-то более сложное? Там вроде довольно много инфы написано. Пожалуй, даже больше, чем в типовых книгах по си.
Аноним 15/01/26 Чтв 14:17:26 #23 №3624563 
484-0[1]
>>3623347
>быку кнут
Аноним 15/01/26 Чтв 22:27:25 #24 №3624985 
>>3619616 (OP)
Существует ли книга, после прочтения обложки которой вы не сказали "нуу и хуйня ебаная"?
Аноним 16/01/26 Птн 01:28:15 #25 №3625080 
>>3624985
Книга дракона.
Аноним 17/01/26 Суб 21:42:46 #26 №3626325 
>>3621833
Странно. Вот тип строки как в паскале, ограничение на длину строки - 4 гига.
struct strptr
{
char *begin;
uint32_t len;
};

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

Да и от сегфолта с переполнением буфера оно помогает
Аноним 18/01/26 Вск 12:29:13 #27 №3626595 
>>3626325
Всё верно, речь больше про строковые константы.
Аноним 18/01/26 Вск 13:41:03 #28 №3626652 
>>3619616 (OP)
@monkey обосри язык программирования СИ
Аноним 18/01/26 Вск 22:25:22 #29 №3627129 
2026 год, в ситреде платиновая дрочка строк.
Убирать 0 из внутреннего буфера = стрелять себе в ногу, если твои строки не собираются жить в песочнице, а логика с оплатой размера строки, но экономии 1 байта...
Аноним 19/01/26 Пнд 12:24:15 #30 №3627378 
>>3627129
Там нет экономии в 1 байт, потому что он используется для хранения размера строки, а на деле 1 байта мало, поэтому используют 2 или 4. Так что напротив расход по памяти выше.
Аноним 24/01/26 Суб 20:06:21 #31 №3631694 
Сконпелируйте энто сначала как есть. Работает как ожидается. Затем у последнего printf уберите \n и сконпелируйте заново.

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/epoll.h>
#include <linux/input.h>
void main () {
struct input_event kbev;
struct epoll_event epev;
int kbfd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
if(kbfd < 0) {
printf("Failed open event0\n");
return;
}
int epfd = epoll_create(1);
if(epfd < 0) {
printf("Failed to create epoll\n");
return;
}
epev.data.fd = kbfd;
epev.events = EPOLLIN;
if(epoll_ctl(epfd, EPOLL_CTL_ADD, kbfd, &epev) != 0) {
printf("Failed to configure epoll\n");
return;
}
int evn;
for(;;) {
evn = epoll_wait(epfd, &epev, 1, 0);
if(evn) {
if(evn == -1) {
printf("epoll_wait error");
return;
} else if(evn > 0) {
read(kbfd, &kbev, sizeof(struct input_event));
printf("%d\n", kbev.time.tv_sec);
}
}
}
close(epfd);
}
Аноним 31/01/26 Суб 19:53:02 #32 №3634597 
плохой язык. в те года можно было сделать лучше, примеры были. лисп пацкаль мл. один только факт, что в недавних сырцах юниха 4 нашли уязвимость говорит о многом о языке. юних кста тоже кал и всё что с ним связано худшее, даже в те времена уже были системы лучше.
Аноним 01/02/26 Вск 11:22:08 #33 №3634890 
>>3634597
Ну и тем не менее он выстрелил так, что большинство базового ПО написано на нем и произошедшем от него С++.
Аноним 01/02/26 Вск 22:15:27 #34 №3635469 
>>3634597
>нашли уязвимость
Т.е. если появляется уязвимость, то это вина языка, на котором написано по?
Аноним 01/02/26 Вск 23:52:42 #35 №3635491 
>>3622932
Напомни, где пидрРаст-тред. Я его найти не могу.
Аноним 02/02/26 Пнд 08:37:32 #36 №3635576 
>>3635469
да. юних же писали сами создатели языка и обосрались. и тогда уже были лиспы, паскаль, форт, фортран, апл, алгол, симула, пролог, смолтолк даже мл хоть и вышли примерно в одно время, они все безопасные и си в 72м это не си в 78м, когда все эти языки уже были, те уже тогда си был отсталым калом.
но си уже так сильно всё засрал, что похуй, это уже не исправить для этого надо убить все сиподобные языки, уничтожить весь софт на них, убить всех программистов, уничтожить всё железо и начать заново. хотя новые сиподобные языки норм типа шарпа
Аноним 02/02/26 Пнд 08:54:02 #37 №3635583 
>>3635576
>типа шарпа
Более каловый язык ещё поискать. Это буквально синтаксическая помойка, куда тащат абсолютно бесполезный сахарок, ломая изначальную задумку.
Аноним 02/02/26 Пнд 09:41:31 #38 №3635591 
>>3622932
>безопасный раст
А что делать с небезопасным растом?
Аноним 02/02/26 Пнд 15:06:00 #39 №3635778 
>>3635576
Давно в тематике такого бреда не видал.
Аноним 02/02/26 Пнд 16:42:51 #40 №3635870 
>>3635576
Какие ОС написаны на этих "безопасных" языках? Си создавался под конкретные нужды - писать ОС на языке высокого уровня, а не на ассемблере. Также удалось добиться определенной степени кроссплатформенности.
Аноним 02/02/26 Пнд 20:04:33 #41 №3635978 
>>3635576
Очень много жира с экрана потекло. Очень много
Аноним 03/02/26 Втр 15:21:45 #42 №3636315 
>>3635870
Под Лисп даже свое железо делали
>>3635491
> где пидрРаст-тред. Я его найти не могу
реально, где? Тоже искал сегодня вопросик задать
Аноним 04/02/26 Срд 15:42:14 #43 №3637000 
>>3635870
на чём угодно можно писать ос. надо портировать виртуальную машину, в си конретной нет, но есть модель пдп11 и надо портировать библиотеки например стандартную библиотеку. как это сделать? на ассемблере в любом случае для любого языка.
Аноним 04/02/26 Срд 16:56:27 #44 №3637034 
>>3637000
>на чём угодно можно писать ос.
>надо портировать виртуальную машину
Мне кажется тебе стоит подтянуть знания в этой области прежде, чем писать подобные утверждения.
Аноним 06/02/26 Птн 21:33:52 #45 №3638884 
>>3637034
шиз как ты портируешь языкнейм на платформунейм? все языки построены по принципу, что они выполняются на абстрактной машине в этом и суть абстратных машин они работают с языком и код пишется для них. на жабе под жвм, на си под пдп-11 это модель во что транслируется похуй. поэтому для порта надо чтобы платформа соотвествовала этой модели.
Аноним 06/02/26 Птн 23:09:23 #46 №3638931 
>>3638884
сделать компилятор/препроцессор/постпроцессор/чтоугодно
Посмотри на котлин, он умеет компилироваться под джвм, джс и ллвм, потому что компилятор имеет разные бэкенды.
мимо
Аноним 07/02/26 Суб 08:35:24 #47 №3639093 
>>3638884
Си транслируется в машинный код конкретной машины. Что gcc, что clang, что msvc. Ни в какую pdp-11 никто ничего не транслируется, если ты не пользуешься древним си, который писали под pdp-11.
Причём под каждую платформу пишут свой компилятор си. Например, под ZX Spectrum тоже есть си, но из-за ограничений машины он там даже стандарт не поддерживает и очень урезанный по возможностям.
А джава с джв - это совсем другой мир. Это языки под виртуальные машины для которых нужна работающая ОС, которая будет выполнять код этой вм. Ни какую ОС ты не напишешь, потому что без ОС твоя жвм даже не запустится. Это сугубо прикладная программа. А си - это системный язык, на котором можно написать практически что угодно.
Аноним 09/02/26 Пнд 16:36:26 #48 №3640769 
Гайс, я собираю shared object (допустим libmylib.so), потом бинарь, к которому линкую библиотеку, находящуюся в той же папке. -L. -lmylib
Линкер отрабатывает, ошибок не выкидывает.

При исполнении бинаря падает ошибка, что библиотека не найдена, хотя она в папке с бинарём лежит.
> error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory

Кто объяснит поч так происходит? При исполнении поиск
Аноним 09/02/26 Пнд 18:13:58 #49 №3640845 
>>3640769
Возможно дело в переменных окружения. Попробуй добавить директорию с библиотекой в LD_LIBRARY_PATH
Аноним 10/02/26 Втр 00:09:20 #50 №3641076 
>>3640845
Спс, разобрался, добавил локальную диру через rpath.
Аноним 10/02/26 Втр 19:25:50 #51 №3641704 
>>3639093
>>3638931
о том и речь. трансляция в промежуточный код, который должен отображаться на целевую архитектуру и проблема в точности и качестве такого отображения. и от этого же зависят требования к рантайму. а для ос всё равно придётся писать на языке платформы.
Аноним 25/02/26 Срд 19:22:09 #52 №3651724 
>советую прочитать книгу Брайана Кернигана и Денниса Ритчи «Язык программирования Си»
Мы игнорируем тот факт что ее можно прочитать только если ты уже знаешь Си потому что там задачки +- фулл бесполезные?
Аноним 27/02/26 Птн 20:23:59 #53 №3653126 
>>3635576
Как бы не хотелось согласиться, попробуем восстановить реальную ситуацию, которая имела место в то время.
>лиспы
Тормозной скрипт, для которого только-только научились писать вменяемый GC. Требует передового железа, иначе пригоден лишь как DSL для экспертных систем без строгих требований к производительности.
>паскаль
Учебный язык. За пределами учебных задач такая же байтопараша, как си.
>форт
DSL для написания встраиваемых систем. В некоторых задачах тормозит, сцука.
>фортран
Хорош только библиотеками. В остальном кривая параша, которая с самого начала разрабатывалась бессистемно. В нём даже рекурсии не было, блеать.
>апл
DSL для математических расчётов. Да ещё с GOTO.
>алгол
Алгол 60 - неюзабелен из-за call by name, который очень тяжело оптимизировать. Алгол 68 - слишком сложный, был потеснён Паскалем.
>Симула
См. Алгол 68.
>пролог
Подмножество Лиспа, расширенное недетерминизмом и тормозной унификацией. Юз кейсы ещё уже, чем у Лиспа.
>смоллтолк
Экзотичен как Симула и тормознут как Лисп.
>мл
DSL для доказательств теорем, о котором за пределами Эдинбурга вообще никто не знает. Если не ошибаюсь, в первых версиях даже мутабельных переменных не было. Тормозит как Лисп (в который, собственно говоря, и транслируется).
Аноним 28/02/26 Суб 11:03:42 #54 №3653460 
>>3651724
Если не стесняться гуглить сложные моменты, то там нет ничего такого чего нельзя было бы освоить с нуля. Ну разве что пара алгоритмов, которые можно либо скипнуть либо тоже погуглить. Задачки можно решать с отладчиком если что-то непонятно. А вообще процентов 70 книги это очень простые упражнения. Самый главный плюс КиР в том что она короткая - 150-200 страниц. Тот же Прата уже в 5 раз длинее на все 1000 страниц.
Аноним 28/02/26 Суб 14:08:09 #55 №3653548 
>>3653126
Как ты удобно всё перечислил, но забыл про Ada который как раз и разрабатывался как безопасный в отличие от паскаля.
Аноним 20/03/26 Птн 11:22:34 #56 №3668048 
Ребята, я уже 3 месяц изучаю Си.

И это бомба. Я забыл про все языки на которых писал до. Зачем, когда можно обращаться указателями на указатели и быть по настоящему счастливым, а не вот это вот все.
sage[mailto:sage] Аноним 20/03/26 Птн 11:36:26 #57 №3668063 
>>3653126
SML был очень годным языком, первый и единственный юзабельный со статической типизацией. У Аппеля он компилировался в машкод для мипса и спарка.
Аноним 21/03/26 Суб 01:50:16 #58 №3668721 
>>3622932
Хуесос малолетний, ты даже в глаза не видел раст.
Аноним 21/03/26 Суб 01:56:22 #59 №3668723 
>>3668048
Попробуй ассемблер на x86
Кончать будешь каждый день.
Аноним 21/03/26 Суб 01:58:45 #60 №3668724 
>>3653126
Чмохенс, ты даже не понимаешь, что там написано. Нейросеть хуева .
Аноним 25/03/26 Срд 10:51:27 #61 №3672044 
>>3651724
Насколько тяжело войти в 2026 в низкоуровневое программирование,есть базовое знание си ,и булевой алгебры и понимание архитектуры фон Неймана но нет коммерческой практики ,и есть ли ейджизм при трудоустройстве?
27 лет
Аноним 25/03/26 Срд 10:53:31 #62 №3672045 
>>3672044
>>3653460
В керигане ничего сложного нет я даже не уверен что его достаточно
Аноним 25/03/26 Срд 11:31:18 #63 №3672070 
>>3672044
>Вкат в низкоуровневое программирование
Достаточно базового знания бурне егейн шелла https://habr.com/ru/articles/1004854/
>>3672045
Си - довольно сложный язык на самом деле.
Аноним 25/03/26 Срд 13:48:30 #64 №3672241 
>>3672044
Ты по масти программист или вкатунец? Вкатунца сходу попалят, а программист на 99-й фене петики покажет с гитхабовскими звездами.
Аноним 25/03/26 Срд 19:18:18 #65 №3672531 
>>3672241
На звёзды в гитхабе никто не смотрит, их можно за копейки купить
Аноним 26/03/26 Чтв 17:48:56 #66 №3673229 
Использую Си, когда нужно переписать или скрыть какую-то логику на Питоне. В повседневных и бизнес задачах сейчас уже в основном бесполезный: телеграм бота, бэкенд вебсайту, десктопное приложение вы на нем писать не будете.
Аноним 26/03/26 Чтв 18:06:37 #67 №3673238 
Где сейчас Си и Си++ можно исполтзовать, если речь не о микроконтроллерах и всякой дедовской хйне:

Модификация кода известных программ, например десктоп клиента Телеграма написан на С++, некоторые создают кастомные клиенты, модифицируя разные моменты в телеграмме: пример Котатограм, некограм и тд.

Или тот же браузер Мозилла, на С++, кто-то модифицирует его код, чтобытна базе его создать свой браузер, например с целью большей приватности, например Tor или Camoufox.

Разработка VPN приложений, всяческие средства обзода блокировкой все пишутся на Си или Си++, там где нужно натнизком уровне изменять настройки сети.

Разработка Игр для Андроид. Сам код игры может быть написан на Си++, собран в бинарный файл типа lib.so, другая часть, сам интерфейс написан на Java, и через бридж JNI вызываются функции уже из бинарного файла.

И в общем и целом где нужна работа с графикой, звуком, сетью, все пишется на Си/Си++.

Примеры: PhotoShop, Gimp, VLC player и тд.

Если прям хочется, то можно создать что-то свое, конкурировать с Фотошопом условным вряд ли сможете, скорее как учебный проект, который может перерасти в хороший Опенсорс.

Черные хакеры используют Си/Си++, чтобы писать вредоносное ПО. Хотя тут имхо, любой язык подойдет, тот же питон или джаваскрипт, на любом можно сделать малварь.

Вот это основные наверное направления, ради в которых можно вписаться в изучение Си/Си++.
Аноним 26/03/26 Чтв 18:11:22 #68 №3673245 
>>3673229
На cython можно, но я не особо его распробовал.
>>3673238
Почему у тебя в одной строчке си и плюсоговно?
Аноним 27/03/26 Птн 16:27:45 #69 №3673924 
>>3673238
>где нужно быстро и грязно, там С
Упростил твой пост
Аноним 27/03/26 Птн 19:44:46 #70 №3674047 
Cython отличная тема. Он транспиллирует код Python в Си, а затем в бинарный файл (.pyd/.so).

Я его использую, когда к примеру мне нужно продать какую-то программу, но при этом сохранить контроль над интеллектуальной собственностью.

Чтобы покупатель не нашел какого-то другого программиста, не модифицировал код, не "дал другу погонять", не перепродал.

Поэтому да отличная тема, всем советую, кто на Python пишет, но тред не про него конечно.

А по Си, ну честно сказать, тяжело на нем писать, даже те, кто на нем много лет пишет, говорят, что иногда лучше сделать на php, python, js, c# если это сайт/бот/десктоп. Но области применения по прежнему есть, выше расписал.
sage[mailto:sage] Аноним 27/03/26 Птн 21:37:06 #71 №3674113 
>>3668063
SML появился только в начале 80х, а современный стандарт вообще только в 90е. До него был только просто ML, на котором ничего, кроме расширений для пруверов, не писали.
>первый и единственный юзабельный со статической типизацией
В некоторых задачах сабтайпинга не хватает, а так согласен.
Аноним 28/03/26 Суб 16:03:24 #72 №3674467 
>>3674047
Ну такая себе шутейка.
Аноним 28/03/26 Суб 16:31:49 #73 №3674495 
>>3674047
Какой в итоге размер твоих файлов получается?
Аноним 29/03/26 Вск 18:27:25 #74 №3675134 
>>3635576
>лиспы
годнота кста
Аноним 31/03/26 Втр 12:38:07 #75 №3676262 
>>3674495
Какая нахуй разница?
Аноним 31/03/26 Втр 13:52:07 #76 №3676308 
>>3673238
>микроконтроллерах и всякой дедовской хйне:
Ну как дедовской, вся индустрия это си и плюсы по-сути: промышленные роботы всякие, тачки, самолёты.
Всё что ты расписал это какая-то хуета для школьников.
Аноним 31/03/26 Втр 14:17:22 #77 №3676324 
>>3676308
У того дебича си и c++ это одно и то же.
Аноним 31/03/26 Втр 18:07:10 #78 №3676520 
>>3676324
в сути своей оно так и есть
Аноним 01/04/26 Срд 15:15:03 #79 №3677108 
>>3676520
Мда мхех, понятно всё.
Аноним 01/04/26 Срд 17:16:31 #80 №3677278 
>>3677108
>плюсовик порвался
Аноним 05/04/26 Вск 18:37:55 #81 №3679972 
>>3622887

Пересобирать gcc или искать готовый бинарник
Аноним 06/04/26 Пнд 04:48:18 #82 №3680174 
>>3622932
С++ датчанин сделал, куда уж белее?
Аноним 06/04/26 Пнд 23:15:36 #83 №3680958 
>>3680956 →
наваливаю базы:
C это ООП язык
Java это истинное развитие C
new в цикле это моветон
Аноним 07/04/26 Втр 20:36:51 #84 №3681893 
>>3680958
>>3680958
тише говно
Аноним 08/04/26 Срд 09:26:30 #85 №3682140 
А я люблю называть переменные new. И что вы мне сделаете?
Аноним 08/04/26 Срд 17:09:04 #86 №3682682 
>>3682140
перезвоним
Аноним 08/04/26 Срд 18:49:21 #87 №3682768 
>>3673238
>некограм
Это мобильынй клиент на джаве, шизик. Дальше не читал
Аноним 20/04/26 Пнд 22:20:56 #88 №3690601 
>>3619616 (OP)
>сам учился на степике
На каком/-их курсе/-ах?
Аноним 21/04/26 Втр 03:38:51 #89 №3690642 
>>3668048
Си - это чистое сияние разума, очищенное созерцанием истинной пустоты войда от привязанностей к паттернам и типам, от страстей исключений и суеты функциональной ереси. По мере просветления ты ощутишь, как последние оковы стандартной библиотеки спадают с тебя и ты обретаешь истинную бинарность.
Аноним 21/04/26 Втр 19:47:34 #90 №3691030 
>>3675134
>говндота
Аноним 21/04/26 Втр 21:05:22 #91 №3691079 
>>3691030
посредственный, спок
Аноним 29/04/26 Срд 10:39:09 #92 №3696144 
Абсолютно зеленый долбоеб который вообще нихуя не понимант в программировании. Прям 0

Как язык работает с железом? Может ли он в целом делать это напрямую? Например с сетевой картой
Аноним 29/04/26 Срд 12:11:24 #93 №3696218 
>>3680958
ООП - это когда абсолютно бессмысленная хуйня придуманная только для того чтобы одного недопрограммиста можно было легко заменить на другого.
Вообще орал когда читал СтраусТРАПА и он такой пишет - ну Си короче сложный, я придумал си с классами чтобы проще было нахуй.
Аноним 29/04/26 Срд 12:13:48 #94 №3696220 
>>3696144
>железом
Что такое железо?
>Может ли он в целом делать это напрямую?
В мире погроммистов напрямую - это работа с регистрами устройств, у тебя, допустим, есть устройство с регистрами доступное по такому то адресу, на деле ты будешь долбиться через интерконект (или шину).
>Например с сетевой картой
Да, вот читни исходник для примера https://github.com/torvalds/linux/tree/master/drivers/net/ethernet/intel/e1000
Аноним 29/04/26 Срд 12:14:37 #95 №3696221 
>>3696218
В Си тоже можно vtbl напихать, это будет та же ООП хуйня.
Аноним 29/04/26 Срд 13:02:31 #96 №3696257 
изображение.png
>>3696218
Предлагаю тебе парсер мат. выражений написать на чистом Си. Особенно AST весело на Си писать. Тебе либо придется делать костыльный аналог полиморфизма, делая свою vtable, либо почувствовать себя магом и кастовать типы, молясь нигде не проебаться.
Аноним 29/04/26 Срд 14:49:42 #97 №3696371 
>>3696257

Тебе скажут что есть дидовые YACCи прочие дидовые BISON и FLEX.
Аноним 29/04/26 Срд 19:53:09 #98 №3696632 
>>3696257
У тебя от джаваскрипта мозг вытек нахуй. Берешь и пишешь свич по int nodeType, у тебя их всего три.
Аноним 29/04/26 Срд 20:35:26 #99 №3696678 
>>3696632
Окей, у тебя есть struct Node { int num, type; Node* lhs, rhs }. Ты оформил 5 кейсов, 4 операции арифметические и взятия числа.
Потом ты подумал. Какой же калькулятор без 1) мат. констант 2) встроенных дефолтных функций вроде корней, синусов и пр.
Как выкручиваться будешь?
Аноним 29/04/26 Срд 20:55:19 #100 №3696696 
>>3696678
У меня будет, скажем, штук 20 свичей по инту вместо полиморфизма. Я добавляю новую операцию, надо поправить все свичи. Без правок программа должна упасть на тестах. Если не падает, пишу тесты, которые уронят. И так пока все не заработает.
Необходимость ООП сильно преувеличена. В процедурном коде у тебя весь алгоритм перед глазами, хоть там и простыня ифов. С ООП логика размазана по сотням визиторов в сотнях файлов, пара строк на каждый, охуеешь собирать этот пазл.
Аноним 29/04/26 Срд 21:04:39 #101 №3696698 
>>3696696
База. Ты настоящий программист. Не то что эти соевые ООП-петушки.
sage[mailto:sage] Аноним 30/04/26 Чтв 09:42:35 #102 №3696969 
>>3696698
Всё правильно. Единственный случай, где нужен динамик диспатч - это если количество кейсов заранее неизвестно и они подгружаются динамически (плагины), так что схожий код в одном месте принципиально не поместить. Иначе просто пиши свитч.
sage Аноним 01/05/26 Птн 15:26:52 #103 №3697971 
если вы искали задачу для пет проекта/вката, то их есть у меня

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

предлагаю вам подумать над проблемой автогромкости (на базе карманного аудиоплеера с гулькиным хуем мощностей)
Аноним 01/05/26 Птн 16:29:04 #104 №3698013 
>>3697971
> музяку
говно для быдла
Аноним 01/05/26 Птн 21:21:10 #105 №3698191 
>>3677278
Так не рвись, говно
Аноним 02/05/26 Суб 11:09:50 #106 №3698390 
>>3696632
В православном ocaml так и пишут парсеры, но там это называется паттерн матчинг на типах.
Аноним 02/05/26 Суб 11:12:49 #107 №3698391 
>>3697971
>предлагаю вам подумать над проблемой автогромкости
Громкость в атомобиле?
Была статейка на хабре https://habr.com/ru/articles/1022424/
Аноним 02/05/26 Суб 15:42:15 #108 №3698528 
>>3698391
Это для разговоров по телефону, а не музыки. Музыка по дизайну не одной громкости, выравнивая громкость ты испортишь музыку, всё равно что слушать нейрокал вместо музыки, свинское говноедство.
Аноним 02/05/26 Суб 16:11:09 #109 №3698555 
>>3698528
>выравнивая громкость ты испортишь музыку
вот тут поподробнее пжалста
тоесть выходит по вашим словам, что ежели я к примеру слушаю элджея на волуме 20 и потом играет агата кристи на тех же волумях но тихо, то прибавив волумя я прорываю пространственно временной континуум и получаю нейрокал?

таблетки
Аноним 02/05/26 Суб 16:35:25 #110 №3698564 
>>3698555
Это значит ты не можешь слушать стримы, сначала надо закешировать треки полностью и их проанализировать целиком, и только потом слушать. Так и делают музыкальные плееры, сначала сканируют всю фонотеку, а потом только слушаешь. А в реальном времени регулировать громкость, это для разговоров по телефону, чтобы речь было нормально слышно, а музыку это всирает, тупая свинья.
Аноним 02/05/26 Суб 16:43:11 #111 №3698568 
>>3698564
>Так и делают музыкальные плееры
ни один плеер так не делает, не надо вводить анона в заблуждение
вот играет элджей с айфона по яндекспатпиське и вот агата кристи еле слышно. запускаем тот же самый тест на плеере хуй-сунь-в-чай: результат тот же. и в очередной раз я спрошу, каким образом прибавка волумев на той же тихой агате кристи всирает ее, ответь уж нам, шизло?
Аноним 03/05/26 Вск 01:48:31 #112 №3698757 
>>3698568
Дебил ебучий, replay gain включи.
Аноним 03/05/26 Вск 08:00:18 #113 №3698789 
>>3698757
программирывовай, говно инцельское
Аноним 07/05/26 Чтв 17:31:03 #114 №3701751 
Кокой дурак придумал звездочки создавать указатели, но потом вызывать их без звездочки, но зато для разыменования опять использовать звездочку? Типо лишних символов на клаве не хватило?
Чтоб потом когда кто-то будет читать вложенные друг в друга указатели нельзя ничего было понять?
Аноним 07/05/26 Чтв 18:36:23 #115 №3701775 
>>3701751
Дыа🤡 у них были телетайпы🖕🖕🔥иногда даже без звездочек✨
Аноним 07/05/26 Чтв 18:39:24 #116 №3701777 
>>3701751
>но потом вызывать их без звездочки
так вызывай со звёздочкой
Аноним 07/05/26 Чтв 19:28:25 #117 №3701806 
>>3701777
Так это тогда будет не переменная-указатель где хранится адрес, а разыменованный указатель.
Аноним 07/05/26 Чтв 19:57:39 #118 №3701839 
Встретил два вариант написания:

char c;
char
c;


С точки зрения компилятора одно и то же, но какая версия все-таки лучше?
Аноним 07/05/26 Чтв 19:58:14 #119 №3701840 
>>3701839
сука звезды пропали

char c;
char
c;
Аноним 07/05/26 Чтв 19:59:13 #120 №3701841 
>>3701840
Короче, разметка не дает написать.
Но смысл такой что в одном варианте звездочка рядом с типом, а в другом рядом с именем переменной.
Аноним 08/05/26 Птн 05:38:07 #121 №3702026 
>>3701841
Есть 2 стула
ХЗ как правильно, я предпочитаю рядом с переменной,
плюс возможны конструкции

char c1, * c2, c3.
А если нарисуешь рядом с char, то указателем будет только первая переменная.
Аноним 08/05/26 Птн 10:49:38 #122 №3702141 
>>3701839
Звездочка относится к идентификатору, поэтому должна быть к нему ближе.
int i, @p, @@pp;

typedef int @ip_t, @@ipp_t;
Аноним 08/05/26 Птн 16:16:34 #123 №3702577 
>>3701751
полагаю тут дело в кривой нотации
звездочка при объявлении указателя относится к типу, а не к имени указателя тип_звезда указатеельнейм
вот такой должны была быть трушная нотация, но пендосы все проебали
дело закрыто
Аноним 08/05/26 Птн 16:29:01 #124 №3702589 
и вероятно вся эта путаница из за того, што компилер неверно обрабатывает оператор запятая конкретно в этом кейсе

char\ psymbol, psomeshit; //поидее должно быть так, ведь мы создаем две переменные типа указатель на char, но компилер спотыкается об оператор запятая в этом месте и нам приходится явно протягивать объявление типа дальше

char \
psymbol, \psomeshit; //тут вы скажете что звездочка относится к имени переменной, но тогда конструкция \psymbol = &strarr[3] должна корректно работать, однако этого не происходит, отсюда мы и делаем вывод, что звездочка относится к типу, а не к имени переменной

ваще эт древний холивар
Аноним 08/05/26 Птн 16:56:49 #125 №3702606 
image
а что если звезда не относится ни к типу, ни к переменной? а является сокращенной записью каста к типу, как (int)someshit только \someshit
Аноним 08/05/26 Птн 21:21:48 #126 №3702848 
>>3701839
Мне нравилось рядом с типом ставить, это же логично. Особенно когда const используешь
const char✰ p = нельзя менять туда куда указывает p
char✰ const p = нельзя менять поинтер
но если ставить рядом с именем
const char ✰p
char const ✰p
то получается не очень, особенно вторая строчка, как по мне.

Но олды-перды ''так принято,, писать ✰ рядом с именем. Потому делаю так же.
Аноним 08/05/26 Птн 21:43:54 #127 №3702859 
>>3702848
Короче погуглил, и старый вариант щёлкнул. Если читать справа налево, то ✰p = указатель, а дальше на что, на конст кар или кар.
Если слева-направо читать, то ✰p = переменная типа указатель на кар.
>>3702026
Никогда не объявлял несколько переменных в одной строке. Всегда дарил строчку.
Аноним 09/05/26 Суб 01:33:13 #128 №3702946 
>>3702026
>char c1, * c2, c3
За такие конструкции в статементах прилетает по ебалу лопатой.
Аноним 09/05/26 Суб 02:43:58 #129 №3702954 
>>3702946
Да кто спорит, просто сказал, как это работает и можно обдристаться написав звезду со стороны типа.
Аноним 09/05/26 Суб 02:46:31 #130 №3702956 
>>3702954
Даже не сторогы типа, а сделав дефайн на тип укащателя вместо тайпдефа.
Аноним 09/05/26 Суб 17:08:57 #131 №3703206 
функция с неопределенным кол-вом параметров.jpg
не понимаю почему в счетчике используется "count", если count это просто параметр функции?
Он же никак не связан с количеством переменных параметров.

Спросил АИ, он сначала сказал что этот параметр должен быть равен количеству переменных параметров, но когда я спросил что он должен значит всегда быть int быстро пошел на попятную лол.
Аноним 09/05/26 Суб 17:12:49 #132 №3703210 
функция с неопределенным кол-вом параметров2.jpg
Вот так он сначала ответил
Аноним 09/05/26 Суб 17:13:25 #133 №3703211 
функция с неопределенным кол-вом параметров3.jpg
...five minutes later
Аноним 09/05/26 Суб 17:15:09 #134 №3703213 
>>3702026
Что мешает однозначно писать char c1; char c2; char c3; ?
Всегда угорал с этих "оптимизаций", шизоидные скобочки от КР туда же. Зачем жертвовать читабельностью кода? Чтобы места на дискетке хватило или монитор 13 дюймов как у пра-дидов?
Аноним 09/05/26 Суб 17:15:58 #135 №3703214 
>>3703213
Бл, звездочки в макабе пролюбливаются.
Аноним 09/05/26 Суб 17:43:13 #136 №3703237 
>>3702848
const char ✰p
char const ✰p

Это одно и то же вроде
Аноним 09/05/26 Суб 18:03:13 #137 №3703251 
>>3703237
Да, ты прав. Как тогда написать char* const p, ставя звёздочку около p?
Аноним 09/05/26 Суб 18:13:13 #138 №3703262 
ну например
int ✰f(double);

это обычная функция, возвращающая указатель на инт, т.е. звездочка как бы относится к инт возвращаемому значению
Аноним 09/05/26 Суб 18:30:15 #139 №3703274 
int (✰(✰d)(int))[10];
Аноним 09/05/26 Суб 19:28:41 #140 №3703305 
void (✰signal(int, void (✰)(int)))(int);

Вот что я не понимаю, почему определение функции signal идет без указания возвращаемого значения пусть даже она и возвращает указатель
Аноним 10/05/26 Вск 07:35:08 #141 №3703492 
>>3691079
Лиспоед, где решения на твоём языке? Где операционки, компиляторы, базы? Цыгане украли? Враги сделать помешали?
Аноним 10/05/26 Вск 12:23:42 #142 №3703559 
>>3703213
Чем меньше строк, тем больше видно на екране.
Аноним 11/05/26 Пнд 15:33:55 #143 №3704235 
>>3703213
Ты себе монитор побольше купи чтобы видеть больше 1 поста.
Я ответил уже, что делать так не надо.
Аноним 12/05/26 Втр 16:54:38 #144 №3704803 
указатели на структуры.png
Тут что-то неправильно, да?
Разве можно при описании структуры сразу ей присвоить указатель.
Аноним 13/05/26 Срд 01:49:57 #145 №3705078 
>>3704803
Тут все верно. Просто у структуры нет имени. И создаются(объявляются) два указателя.
Аноним 13/05/26 Срд 02:04:29 #146 №3705079 
>>3704803
Всё правильно.
Во время компиляции создаются два объекта структуры на которые ссылаются указатели p1 и p2.
Так делать можно, но не нужно. Велика вероятность, что прилетит по ебалу лопатой, если работаешь в команде.
Аноним 13/05/26 Срд 09:27:46 #147 №3705113 
>>3704803
Нормискот не способен поня, что struct {...} обозначает тип ровно так же, как int.
Аноним 13/05/26 Срд 13:59:39 #148 №3705313 
>>3705078
Мне нейронка говорит что эти указатели будут указывать на мусор, а не на структуры, потому что нет переменной структуры и значит память не выделена под нее.
>>3705113
С чего ты взял? Тут очевидно что это тип, даже при инициализации переменной для структуры.
Аноним 13/05/26 Срд 18:30:48 #149 №3705563 
555.jpg
Меня нейросетка даже гнобит нахуй.
Аноним 13/05/26 Срд 19:41:09 #150 №3705587 
>>3704803
>Разве можно при описании структуры сразу ей присвоить указатель.
Нельзя. Если не ошибаюсь, тут мы объявляем переменную p. Тип у этой переменной - указатель. Указатель это просто 8 байт адрес, ему в общем-то насрать что там будет, это просто адрес. Но для компилятора мы говорим что это указатель именно на структуру struct { int val; }

То есть
struct { int val } ⚹p;
Всё равно что
int ⚹p

Ты обьявляешь указатель. Инициализировать ты его можешь адресом, как там и показано &kate

Это всё чисто для компилятора. Так то можно сделать и
void ⚹p
И уже ему присваивать всё что угодно. Я так делаю, например когда нужно произвольные данные передать в обработчик
Аноним 13/05/26 Срд 21:06:22 #151 №3705621 
image
>>3705587
>Нельзя.
>можна
мдамс

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

>>3703492
у тебя цыгане интернет украли. в соседнем треде все разжевано.

пикчу штоли приклеить, а то какой то скучный тредик
Аноним 13/05/26 Срд 21:47:54 #152 №3705639 
а, вот еще чо добавлю исключительно для неофитов и пожалуй под спойлер спрячу, а то ща начнется

как бы вы там не старались создавать супербыстрые алгоритмы, изучать биг оу и прочую хуйню, у вас абсолютно всегда останутся ограничения по железу. так уж вышло, что типикал шина данных интовая и железо попросту физически не может сделать то, что вы хотите, чтобы оно сделало. вы хотите за 1 шаг цикла пробросить неровный размер байт, да еще и что то длинное? круто классно. вас наверняка похвалит ментор, или все скажут вау на ваше решение по литкоду. но при этом шина данных хлопнет не 1 раз, а проц еще будет туда сюда гонять данные отрезая лишний байт, который вы не хотели получать. очень мало действий по коду и очень много по железу. крч, не забивайте себе голову, пишите по классике, не экономьте память, юзайте интовые размеры и все будет гуд.
Аноним 13/05/26 Срд 23:26:26 #153 №3705668 
>>3680174
Современный C++ - коллективная разработка. Датчанин там чисто затравку сделал.
Аноним 13/05/26 Срд 23:32:21 #154 №3705672 
>>3705313
>Мне нейронка говорит что эти указатели будут указывать на мусор, а не на структуры, потому что нет переменной структуры и значит память не выделена под нее.
Или ты не так понял, или нейронка троллит тебя.
Сначала объявляется неименнованный тип структуры, а потом в этом же статементе инициализируются два указателя с выделением памяти для двух структур во время конпеляции. В рантайме ты можешь работать с этими двумя указателями и они будут указывать на структуры, но там будет мусор т.к. сами структуры не инициализированы никакими значениями.
Аноним 14/05/26 Чтв 10:27:17 #155 №3705930 
>>3705672
Не слушай этого волка. Выделяются два указателя, два слова. В них мусор. Ты можешь вместо мусора записать адрес структуры. Но структуры еще нет, ее надо выделить.
Аноним 14/05/26 Чтв 12:49:18 #156 №3706039 
>>3705930
Это высокоуровневая макака, макака не понимает код, она пишет магические заклинания. Поэтому они так любят нейросети и считают, что нейросети заменят человека, нейросеть как магический джинн, ты ему пук, тот в ответ среньк.
Аноним 14/05/26 Чтв 13:19:46 #157 №3706054 
блять вы заебали
определитесь уже происходит аллокация с выравниванием по структуре или не происходит? всем похуй на мусор
Аноним 14/05/26 Чтв 14:36:31 #158 №3706080 
>>3705621
не понял, сам-то указатель займет 7 байт вместо 8 если структура на которую он указывает будет 7 байт?
Аноним 14/05/26 Чтв 14:53:02 #159 №3706087 
>>3706054
Два указателя будет аллоцировано, инициализированных by NULL.
Аноним 14/05/26 Чтв 15:03:41 #160 №3706089 
>>3706080
да схуяли это нахуй ты вял то? адреса сжал что ли, сжиматель? там же разжевано что это про сдвиги ++ няхуй -- вот это вот, адресная арифметика ептель моптель

>>3706087
есто ясно, ты ваньку не валяй, отвечай прямо будут ли алоцированы экземпляры под указателями?
Аноним 14/05/26 Чтв 15:34:14 #161 №3706100 
image
лан решил сам проверить пока есть минутка
экземпляры не аллоцируются
Аноним 14/05/26 Чтв 15:35:02 #162 №3706102 
>>3706089
>будут ли алоцированы экземпляры
Нахуя, если только указатели данного типа объявлены. Их и имеешь в итоге.
Если напишешь
struct
{
int age;
int name[20];
} ⚹p1, ⚹p2, t1, t2;
то будут тебе экземпляры t1 и t2, при этом p1==p2==NULL.
Аноним 14/05/26 Чтв 15:43:39 #163 №3706114 
о, спасибо за звездочку на макабе
не забудьте впендюрить звезду в шапку переката
Аноним 14/05/26 Чтв 15:46:59 #164 №3706118 
test
test
test
test
Аноним 14/05/26 Чтв 15:47:59 #165 №3706119 
⚹ я подумал что звездочка заработала
Аноним 14/05/26 Чтв 19:11:43 #166 №3706200 
image
чота решил проверить иначе, возникла гипотеза что поинтеры смотрять в нулл, но алокация мб и произошла, просто поинтеры не выставлены например

теперь я чот не понял, а схуяли между адресами интов 1 байт, если инты 4байтные? чота туплю наверн, абиснити
Аноним 14/05/26 Чтв 19:15:34 #167 №3706201 
или в бинаре какой то другой формат? ну типа не однорродная рам память, а например ноды(поинтеры) на хип?
Аноним 14/05/26 Чтв 19:42:49 #168 №3706210 
все, разобрался
надо было кастануть в ансигнед лонг лонг перед арифметикой
Аноним 14/05/26 Чтв 19:51:19 #169 №3706218 
но все равно непонятно схуяли я не могу ПРОСТО вычесть адреса, это же числа ептумать

вот если я из адреса вычитаю инт - тогда выходит я из адреса вычитаю интчислосдвигов типоразмера данного адреса
для примера если это поинтер на инт - интчислораз по 4 байта вверх (влево) кому как удобнее

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

загадка жаки фрески прям
Аноним 14/05/26 Чтв 20:15:29 #170 №3706229 
>>3706200
>ну типа возми любой адрес в памяти и сдвинь квадрилионы раз влево - упрешься в нулл
Или в 738, или в 921324, а может вообще на месте останешься.
>схуяли между адресами интов 1 байт
anyptr + 1 == (unsigned long)anyptr + sizeof(any)
Аноним 15/05/26 Птн 04:27:27 #171 №3706352 
>>3706218
Попробуй сначала адреса привести к типу void "две звезды", а уже потом делать арифметику с вычитанием и прочим.
Аноним 15/05/26 Птн 04:34:25 #172 №3706354 
>>3706200
Устанавливаешь IDE и двумя кликами открываешь дебагер, смотришь память, читаешь ассемблер.
Аноним 15/05/26 Птн 06:11:41 #173 №3706369 
>>3706354
в треде спрошу
Аноним 15/05/26 Птн 08:07:42 #174 №3706381 
>>3706354
>Устанавливаешь приложение
И тут "программист" уже слился, слишком много требуешь от будущего короля Си.
Аноним 15/05/26 Птн 10:10:02 #175 №3706440 
>>3706381
Зачем себе жизнь усложнять ненужными мелочами? Цель программирования это писать программы для людей. Зачем тратить время на ёблю с флагами и прочую чушь? Это не влияет на твой скилл писать программы.
Ты юзаешь ОС, юзаешь терминал, юзаешь компилятор, а не программируешь на голом железе, но тут внезапно ЭТО ДРУГОЕ, а вот ИДЕ это не тру и плохо-плохо.
Аноним 15/05/26 Птн 18:32:20 #176 №3706783 
>>3673238
можно еще программировать дроны и прочую технику, а также какую-нибудь симуляцию накодировать
Аноним 15/05/26 Птн 19:19:24 #177 №3706801 
>>3706440
не все любят когда их водят за ручку
да и вот давеча мне надо было пробросить байтослоп прикинувшись будто бы я кидаю объект класса из обжектив си в какаву, уверен и дэ е слилась бы и посоветовал просто выучить обжектив си
Аноним 16/05/26 Суб 03:01:27 #178 №3706908 
>>3706801
Тебя ОС за ручку водит гораздо больше.
Аноним 16/05/26 Суб 07:34:14 #179 №3706926 
>>3706440
Тогда и не программируй, дворнику куда проще, там тебе и место. Зачем лезть туда где тебе не место и гадить? В любой работе требуется тщательность, даже ботинки полировать надо как следует, а не как попало "зачем себе усложнять жизнь". Неусложнятель значит тунеядец, таких надо пиздить и гнать нахуй.
И если что, это касается любой профессии, и начальников, если начальник тоже неусложнятель у которого всегда виноваты подчиненные, такого надо точно так же пиздить и гнать нахуй. Вы все одинаковое бесполезное говно которое только гадит. Ни одна ленивая погань не делает и не сделает никаких полезных программ для людей, только говно наносящее людям вред чтобы на этом нажиться самому.
Аноним 16/05/26 Суб 08:22:40 #180 №3706933 
>>3706908
да не пизди
Аноним 16/05/26 Суб 15:30:14 #181 №3707169 
>>3706218
я думаю считается что тебе незачем вычитать из адреса просто число - ты просто получишь какой-то рандомный или мусорный адрес, а вот когда вычитаешь размер типа то можешь двигаться массиву
Аноним 16/05/26 Суб 18:22:30 #182 №3707253 
>>3707169
весьма странное решение именно в этом аспекте сделать бронированную ногу
Аноним 17/05/26 Вск 09:07:58 #183 №3707465 
>>3707253
Указвтель+число помогает двигаться по массиву. На целое число элементов. Укащатель-указатель показывает пройденное расстояние. В элементах. Надо было сделать хуже?
Аноним 17/05/26 Вск 10:52:38 #184 №3707494 
17790041313330171672[1].png
Живое воплощение указателя
Аноним 17/05/26 Вск 11:55:40 #185 №3707533 
image
Живое воплощение компилера
Аноним 17/05/26 Вск 12:02:46 #186 №3707539 
image
Живое воплощение IDE
Аноним 17/05/26 Вск 12:13:49 #187 №3707545 
timeline1409611851138513518100055.jpg
>>3707533
А это тогда кто?
Аноним 17/05/26 Вск 12:19:11 #188 №3707548 
>>3707545
вебмакака
Аноним 17/05/26 Вск 12:22:39 #189 №3707550 
>>3707545
А это segmentation fault
Аноним 17/05/26 Вск 12:34:13 #190 №3707553 
image
>>3707550
вот сегфолт
Аноним 17/05/26 Вск 12:42:19 #191 №3707558 
могу запостить стак оверфлоу если моча не потрет
Аноним 17/05/26 Вск 23:05:02 #192 №3707828 
>>3705639
> типикал шина данных интовая
о какой шине данных речь
Аноним 17/05/26 Вск 23:07:58 #193 №3707830 
>>3705639
>за 1 шаг цикла пробросить неровный размер байт, да еще и что то длинное
mmx sse avx для x86
Аноним 17/05/26 Вск 23:13:21 #194 №3707832 
>>3705639
>проц еще будет туда сюда гонять данные отрезая лишний байт
хм но в структурах для решения проблемы data misaligment по умолчанию вставляются паддинги, а запрещаешь принудительное выравнивание ты для того чтобы в бинарный протокол например упаковать, ну и надо делать упаковку/распаковку, и обрабатывать далее уже с выровненными данными
Аноним 17/05/26 Вск 23:20:24 #195 №3707834 
>>3705639
или речь о том что якобы в архитектуре x86 работа с "короткими" интами short int (16 бит) неэффективна тк к инструциям обрабатывающим такие числа приходится компилеру добавлять специальный префикс 0x66 и инструкция становится длиннее на байт? ну дык это в более свежих поколениях процов пофиксили наебашив сверху оптимизаций..
Аноним 17/05/26 Вск 23:28:38 #196 №3707839 
чел тут тебе не церковь 86 у людей и другие архитектуры на руках
речь вцелом про неэффективность эффективных решений
вот к примеру в бородатые времена придумали б-три как эффективную модель данных с быстрым поиском, в текущих реалиях она неэффективна и простой массив (или хэштейбл) сработает куда быстрее из за аппаратных особенностей
поэтму фраза не забивай себе голову хуйней и пиши по классике в интах емко и красноречиво подитоживает все будущие диалоги на эту тему, тут нехуй обсуждать
Аноним 17/05/26 Вск 23:54:03 #197 №3707854 
>>3707839
>б-три как эффективную модель данных с быстрым поиском, в текущих реалиях она неэффективна и простой массив (или хэштейбл) сработает куда быстрее
конечно нож острее кувалды
б-три для дисковых накопителей оптимизирован, его узлы в страничку памяти помещаются, для индексов реляционных субд это король
хештейблы для того что в оперативу умещается, их любят in-memory dm
Аноним 17/05/26 Вск 23:54:36 #198 №3707855 
>>3707854
>dm
db
Аноним 17/05/26 Вск 23:54:44 #199 №3707856 
Есть вообще работа на C кроме эмбдеда и удалёнки?
Аноним 18/05/26 Пнд 00:02:47 #200 №3707860 
>>3707839
>другие архитектуры
тык в той же arm тоже есть свой simd движок, и работа с короткими интами и char еще более оптимизирована по сравнению с x86
Аноним 18/05/26 Пнд 00:11:01 #201 №3707861 
>читать б-три с диска а не грузить в оперативку
ну тут я сдаюсь
Аноним 18/05/26 Пнд 00:21:55 #202 №3707863 
к тому же речь вообще не шла про халфворды или чары
хуй знает с чего ты решил что отрезать лишний байт это инт -> шорт инт
как вообще в твоей башке сложилась такая математика? хотя похуй я не хочу этого знать, это какой то бредик
Аноним 18/05/26 Пнд 00:30:13 #203 №3707867 
все таки о какой "интовой шине данных" речь?
кэш-линии современного x64 проца размером 512 бит, с меньшими данными они не умеют работать
Аноним 18/05/26 Пнд 00:32:59 #204 №3707869 
>>3707863
в x86 одинаковые оптимизации что для short int что для char
Аноним 18/05/26 Пнд 00:34:43 #205 №3707871 
паддинги еще приплел блять
да структуры неэффективно лежат в памяти, чо сказать то хотел?
давай помогу осознать буквы которые ты прочитал и на которые ответил
тебе прилетело 8 байт данных, программист заказывал 7.
твои действия как проца?

>>3707867
классическая шина данных 32 битной машины например

>>3707869
при чем тут шорты и чары сука мразь бесишь
Аноним 18/05/26 Пнд 00:34:45 #206 №3707872 
>>3707861
б-три оптимизированы под размер дисковых страниц
Аноним 18/05/26 Пнд 00:35:58 #207 №3707874 
>>3707872
оперативно поработай с пзу теперь, опитимизатор
Аноним 18/05/26 Пнд 00:40:01 #208 №3707883 
>>3707871
>классическая шина данных 32 битной машины
тык че за "шина данных", о чем речь?
nvme ssd через pcie 5.0, причем контроллер прямо в проце
озу тоже напрямую в проц, шина памяти, контроллер в проце, это прям физика, проводочки идущие в проц и часть кристалла на проце отвечающая за io
Аноним 18/05/26 Пнд 00:47:57 #209 №3707898 
>>3707883
шина по которой приходят данные на процык
проводочки по которым текут электрончики и щекотят регистры
может тут я неточен в терминах и это шина памяти, тут сорян
убшиз ета ти?
Аноним 18/05/26 Пнд 00:58:10 #210 №3707902 
>>3707874
>оперативно поработай с пзу теперь, опитимизатор
да пожалуйста, давай
на каком уровне хочешь говорить?
физическом уровне? дык там pcie 5.0, многоканальная передача хоть и протокол последовательный, те же 512 бит кеш линии разделятся на 4 канала и прилетят за такт по 128 бит на канал
ос и дб могут работать с минимальным размером данных это размер дисковой страницы, в винде 4кб, итого за 64 такта прилетает страничка из диска в озу
естественно через dma те выч блоки проца не задействованы, задействовано только io: контроллер pcie, контроллер памяти, внутренняя шина
Аноним 18/05/26 Пнд 01:02:32 #211 №3707907 
>>3707898
>приходят данные на процык
тык данные на выч блоки цпу приходят через кеши, в кешах минимальный размер это кеш линия, в совр проце будет 512 бит
Аноним 18/05/26 Пнд 01:05:49 #212 №3707911 
ты чо несешь петух
пердоль давай свою оптимизированную б-три и долби диск, нехуй в озу грузить ты же отказался от этой идеи и скозал што б-три пзу бейзед алгоритм
и што же я вижу
грузишь в озу свою хуйню академическую из пердольного века
массив в кеш линиях в сотни раз быстрее перебрать чем твоей хуетой заниматься
перечитай пост на который ответил
все иди нахуй

алсо алгоритм отрезания лишнего байта не описал
дважды нахуй
Аноним 18/05/26 Пнд 01:21:28 #213 №3707919 
>>3707911
решение на основе б-три оптимизированное под дисковое хранение более универсальное получается, и поэтому оно до сих пор основа для индексов реляционных субд, да, для oltp базы данных ты можешь добавить столько озу чтобы весь кеш дисковой структуры лежал в озу, но для хранилищ данных такое уже может не прокатить
хеши рулят в in-memory db
Аноним 18/05/26 Пнд 09:02:49 #214 №3707977 
>>3706200
> возникла гипотеза что поинтеры смотрять в нулл
> гипотеза
> явно описанная в документации
> что глобальные переменные инициализируются нулем
Аноним 18/05/26 Пнд 09:04:14 #215 №3707980 
>>3619616 (OP)
Объясните нюфагу, почему когда я использую malloc, и компилирую через msvc, то независимо от того, сколько байтов я указал в аргументе, я все равно могу поместить в память нихуя не столько? Например, даже если char* c = malloc(1), то я туда могу засунуть строку не из одного, а аж из 80 символов? При том что _msize возвращает именно то значение, которое я указал в качеству аргумента malloc.
Аноним 18/05/26 Пнд 09:07:28 #216 №3707981 
>>3707980
Приложению выдают целую страницу и внутри него она что хочет, то воротит.
А вот если выйти за пределы, то уже смотритель памяти (не помню как называется) выдаст по ебалу сегфолт.
Аноним 18/05/26 Пнд 09:11:35 #217 №3707984 
>>3707919
В беркли дб были дисковые движки на хэшах и деревьях, хэш обычно обгонял дерево, но имел ограничения по объему, и никаких дубликатов и обходов по порядку.
>>3707980
UB
Аноним 18/05/26 Пнд 09:36:29 #218 №3707990 
>>3707981
А как тогда вообще пользоваться этим вашим мемори алокейшном? Я сейчас даже попробовал прогнать

int i;
int* a = malloc(1);
for (i = 0; i < 6; i++) a = i;

И оно реально полностью записало мне в память числа от 0 до 9, хотя я выделил даже меньше памяти, чем на одно число нужно
, а for (i = 0; i < 10; i++) printf("%i ", a) благополучно мне их выводит, даже если я сразу после a выделил другую область памяти и что-то туда записал, хотя по-идее они должны в памяти по соседству находиться. Это в компиляторе такая защита от индусов сделана или, что вероятнее, я не понимаю, как мемори аллокейшн работет? Если второе, то что именно я не понимаю?
Аноним 18/05/26 Пнд 09:40:00 #219 №3707994 
>>3707990
Сука, ебаная разметка.

int j;
int* a = malloc(10);
for (j = 0; j < 10; j++) a[j] = j;

и

for (j = 0; j < 10; j++) printf("%i ", a[j]);
Аноним 18/05/26 Пнд 09:40:12 #220 №3707995 
>>3707990
Написали же UB. Хоть вселенная всхлопнется - тебе ничего не гарантировали.
Аноним 18/05/26 Пнд 10:00:53 #221 №3708006 
>>3707990
>я написал программу записывающую числа в память
>И ОНИ СУКА ЗАПИСАЛИСЬ! не понимаю, что за хуйня?
Это называется программирование, как пишешь, так и работает.

Если же не можешь программировать, для таких есть нейросети, ты ей говоришь одно, а она определяет что ты дебил и делает совсем другое. Ура, как удобно, я несу хуйню, а система исправляет как надо.

Да, это очень удобно, только без тебя, ведь если ты тупее системы, значит ты не нужен.
Аноним 18/05/26 Пнд 10:22:30 #222 №3708016 
>>3708006
>я несу хуйню, а система исправляет как надо
Так ты буквально только работу компилятора в моем примере описал
Аноним 18/05/26 Пнд 10:31:44 #223 №3708022 
>>3708016
Ты числа записал? Записал.
Числа записались? Записались.
Что не так сделал компилятор? Ты дебил? Не нравится когда программа работает как ты написал, то есть тебе не нравится собственная тупость? Так при чем тут компилятор? К психиатру сходи, дебил.
Аноним 18/05/26 Пнд 10:39:35 #224 №3708031 
>>3708016
Лол, нет. Компилятор C и плюсов уверен, что программист царь и бог и если хочет отстрелить себе ногу значит он так и задумал. Есть конечно предупреждения, но это совсем от долбоебов.
А чтобы дерьмо за тобой подтирали - это к статическим анализаторам кода.
Аноним 18/05/26 Пнд 10:53:13 #225 №3708050 
>>3708022
Ладно, ты прав, какую-то я хуйню написал, если честно.
Аноним 18/05/26 Пнд 12:53:32 #226 №3708136 
>>3707984
тык в беркли дб были другие хэши чем в современных in-memory db, те структуры данных наоборот под дефицит озу были заточены
Аноним 18/05/26 Пнд 17:56:24 #227 №3708311 
>>3708022
>>3707980
Успокойся шизофреник. Конпилятар тут не при чем. У тебя память вообще ОС выделяет, а не компилятор. У библиотеки просто есть функция, условно "обеспечить столько то памяти". Вот она тебе и обеспечила. А то что её реально выделилось больше - иди и билу гейтсу ной. Алокация памяти это вообще не часть языка С. Это просто прослойка над сисколами.
Аноним 18/05/26 Пнд 18:28:34 #228 №3708320 
>>3707980
не всегда можешь
ты просишь у оси столько то байт
ось грит ну типа ок вот адрес начала блока куда можешь насрать
сколько там реально свободной памяти знает только ось, но если дала адрес значит точно не меньше запрошенного объема
если н дала значит нет цельного фрагмента искомого объема
Аноним 18/05/26 Пнд 19:15:15 #229 №3708341 
>>3701751
Збс синтаксис. Ты просто не шаришь.
Аноним 19/05/26 Втр 02:23:34 #230 №3708443 
>>3702577
>звездочка при объявлении указателя относится к типу, а не к имени указателя
Почему тогда int* a, b создает не два указателя, а один указатель и одну переменную?
Аноним 19/05/26 Втр 05:15:23 #231 №3708451 
>>3708320
Не совсем так. К твоей программе прилипает c-heap-manager. При запуске программы он у ОС просит большой кусок памяти. Дальше он эту память нарезает на блоки и хранит список свободных блоков. Когда ты просишь память, ты не всегда обращаешься к ОС, ты обращаешься к менеджеру, и он тебе дает указатель на блок, способный вместить как минимум сколько ты запросил. Когда память освобождаешь, то так же освобождается блок и он возвращается в список доступных блоков.
Вот если блоков нет, только тогда уже программа идет на поклон к ОС.
Аноним 19/05/26 Втр 14:03:12 #232 №3708858 
>>3619664
Почему бы и нет. Поржем вместе над пасквилянтами ))).
Аноним 19/05/26 Втр 15:19:21 #233 №3708906 
int m = malloc(rows sizeof(m));
for (int i = 0; i < rows; i++) {
m = malloc(cols sizeof(m));
}


а как здесь указатель на указатель m стал массивом?
Аноним 19/05/26 Втр 15:38:08 #234 №3708923 
Т.е. любой указатель можно использовать как массив?
Аноним 19/05/26 Втр 15:44:36 #235 №3708931 
>>3708906
Звездочки поправь, нихрена не понятно, что за высер ты принёс.
Аноним 19/05/26 Втр 16:15:04 #236 №3708963 
>>3708931
Да там и так понятно где звездочки
Аноним 19/05/26 Втр 17:17:43 #237 №3709011 
>>3708923
механика похожа, но поинтеры не являются массивами
ну по крайней мере так пишут каэр
Аноним 19/05/26 Втр 17:20:55 #238 №3709016 
>>3708923
Наоборот, и то будут нюанцы
Аноним 20/05/26 Срд 12:46:01 #239 №3709489 
>>3709011
Разумеется нет(в смысле да). Указатель это указатель на начало области памяти - адресс.
>>3708923
Да можно. Но не факт что получится, а может и не получиться ничего хорошего вовсе, зависит от того куда он указывает.
Аноним 21/05/26 Чтв 00:48:32 #240 №3709899 
>>3673229
> телеграм бота, бэкенд вебсайту, десктопное приложение вы на нем писать не будете.

Почему не буду? Буду. Я же контрол-фрик.
Аноним 22/05/26 Птн 16:47:34 #241 №3710916 
>>3708923
Доброе утро! Неужели это для тебя открытие. Это же самое первое о чём пишут в си. Строго говоря в си нет "массивов" вообще. Имеется ввиду что нет такого же вот обьекта как в Паскале, там, которому можно было диапазон задать, например. Квадратные скобочки в си это грубо говоря шорткат, то есть i[N] это тоже самое что *(i+N) . Различия всё-таки есть. Например sizeof скобочек выдаёт именно длину массива, а sizeof указателя выдаст 8. То есть что-то типо массива есть, но это не совсем массив.
Аноним 22/05/26 Птн 18:15:03 #242 №3710985 
изображение.png
>>3710916
>Например sizeof скобочек выдаёт именно длину массива, а sizeof указателя выдаст 8. То есть что-то типо массива есть, но это не совсем массив.
Только следует помнить, что sizeof скобочек будет работать только в скоупа и сабскоупах, где массив определен. Передай указатель на массив в функцию, и он забудет размер.
Аноним 22/05/26 Птн 20:49:22 #243 №3711081 
>>3710916
>>3710985
массив нельзя передать как аргумент
указатель можно
твои утверждения неверны, массивы существуют так же как и указатели, механики похожи, сущности разные, шорткаты твоя фантазия
Аноним 22/05/26 Птн 21:07:11 #244 №3711085 
>>3711081
>массивы существуют
Назвать этот огрызок от указателя "массивом" не совсем правильно.

Массивы существуют только условно. Но по факту это скорее указатель с дополнительными свойствами.

Начнём с того что массивы можно присваивать. А то что то в С называют "массивом" присвоить нельзя:
int *a;
int c[3];
int b[3];
b = c //syntax error
Зато можно
a = b
И теперь, ВНЕЗАПНО мы можем индексировать a:
a[2];
Это по твоему нормально называть массивном? Массивы в Pascal или других высокоуровневых языках по твоему так себя ведут? Он конечно назван как array, но фактически это не то что подразумевают под массивом.
Аноним 22/05/26 Птн 21:27:26 #245 №3711093 
>>3711085
массив это массив не зависимо от того что ты там себе нафантазировал
твои выпады напрямую связаны с непониманием лаконичности и компактности си. ты не туда воюешь. си это язык велосипедов. хочешь присваивать массивы - пиши свой хук для присваивания. хочешь какие то другие массивы - пиши свои массивы. это си, детка, туда ли ты забрел?
Аноним 22/05/26 Птн 21:33:00 #246 №3711094 
12(2).gif
>>3711093
>массив это массив
Глубокая мысль. Иди нахуй ))
Аноним 22/05/26 Птн 22:47:50 #247 №3711123 
>>3711093
В си нет массивов, это указатели, как нет математических чисел, это ячейки памяти определенного размера, и тем более в си нет строк. Си обманчив тем, что выглядит как язык высокого уровня, хотя на самом деле си это ассемблер. Мимо-макаки этого не понимают и ищут свои абстракции которых в си нет. Си это машинный язык, а не скриптовый. Нельзя писать на машинном языке не представляя как работает машина, то есть как твой код работает на машине.

Самый простой пример. Ты объявляешь переменную, это имя и привязанное к нему значение. В си ты должен понимать, что это лишь блок памяти, знать размер этих данных в байтах, а так же место в котором они находятся, стек или куча. Это не какие-то лишние знания, а минимальная необходимость без которой нельзя ничего программировать, получается гадание наугад, бред, нелепость как не зная арифметики заниматься тригонометрией, так не бывает.
Аноним 22/05/26 Птн 23:07:13 #248 №3711134 
забавный шизик
Аноним 23/05/26 Суб 01:24:59 #249 №3711175 
>>3711123
Застрелись нахуй и больше сюда не сри этим говном, дебил ебаный.
Си у него ассемблером стал, блять. Откуда вы лезет?
Аноним 23/05/26 Суб 04:46:27 #250 №3711198 
>>3703206
vararg в сях это костыль по большей части. В теории ты можешь вместо int count поставить любой аргумент, при вызове подавать ему любые значения и как-нибудь угадывать, сколько пришло аргументов. На практике ты либо идёшь по простому и понятному шаблону, либо ловишь баги и леща от других прогеров, которым придётся копаться в нешаблонном коде.
ИМХО в сях лучше наплодить похожих функций с разными наборами аргументов, в 95% случаев это прокатывает. А vararg оставить всяким питонам и языкам с полноценной рефлексией
Аноним 23/05/26 Суб 17:56:56 #251 №3711429 
Какие дополнительные знания пригодятся для трудоустройства, если хорошо знать Си?
Аноним 23/05/26 Суб 18:03:58 #252 №3711430 
Какой же хороший язык. Достаточно минималистичный. Ему бы ещё встроить аналог new/delete из c++ и было бы здорово (я знаю про malloc, но эта штука требует подключать хотя бы malloc.h. было бы замечательно, если бы выделение памяти делалось оператором.)
Аноним 23/05/26 Суб 19:31:59 #253 №3711490 
images (20).jpeg
>>3711429
>Си
>Трудоустройство
Каво
Аноним 23/05/26 Суб 21:54:53 #254 №3711579 
>>3711490
Ну если взять 10.000 самых шарящих в Си людей в СНГ, то кем они работают?
Аноним 23/05/26 Суб 23:00:45 #255 №3711604 
>>3711429
Алгоритмы и сруктуры данных, многопоточка, как работает mmu, как работает шедулер, хуй86 архитектура (можно arm), основы криптографии, tcp/ip, устройство efs/ntfs, чуток баз данных
sageкак изучить си? [mailto:sage] Аноним 23/05/26 Суб 23:38:54 #256 №3711614 
Всем привет! я из казахстана, я хочу задавть вам хотя глупим, и очевидный, короче как изучить ЯП си, из книг или темачиский сайтов(потипу metanit.com/c) или по книг(по типу язык программирования си) для провиллный изучение си?
sageкак изучить си? [mailto:sage] Аноним 23/05/26 Суб 23:50:32 #257 №3711621 
>>3711614
>>3711614
ладно пайду читать книг яп си
Аноним 24/05/26 Вск 00:08:17 #258 №3711626 
>>3711579
Эмбеддед разработчиками, программистами, инженерами электроники, учеными. В общем Си у них это не основная специальность. Часто они совмещают его с другой компетенцией или языком. Чистых СИ вакансий почти нет
Аноним 24/05/26 Вск 00:22:06 #259 №3711630 
>>3711626
>Эмбеддед разработчиками
Много ли там вакансий, НЕ связанных с разработкой чего-либо используемого в междоусобицах восточных славян? (религия не позволяет)
sageкак изучить си? [mailto:sage] Аноним 24/05/26 Вск 00:39:03 #260 №3711636 
>>3711626
привет, для чисти изучение для себя, а про работы даже не знаю, час хочу системный прогграмирвние и системный админстарция, то есть чисти энтузиазм
sageкак изучить си? [mailto:sage] Аноним 24/05/26 Вск 00:40:06 #261 №3711637 
>>3711630
даже хз, не чекул, вроде как и все снг мало как я знаю
Аноним 26/05/26 Втр 02:53:50 #262 №3712670 
>>3711429
Электрика/электроника, схемотехника, микроконтроллеры, SPI/UART, парочка ассемблеров. Часто радиофизика, обработка сигналов, сетевые протоколы вплоть до побитового разбора пакетов/кадров.
Аноним 26/05/26 Втр 03:08:50 #263 №3712671 
>>3711614
1. Введение в тему из любого источника: хоть сайты, хоть ютуб, хоть книги (для начинающих)
2. Тренировка основ простыми задачами на leetcode/codeforces
3. Хитрости и приёмы именно Си: книга Кернигана и Ритчи. Пет-проекты (гугли темы для проектов начинающих программистов, бери что по силам)
3.5 Для системного программирования - Таненбаум, Реймонд, исходники и комментарии FreeBSD
P.S. Системное администрирование это абсолютно другое направление. Там программировать толком не нужно, максимум скриптовать
Аноним 26/05/26 Втр 10:49:48 #264 №3712722 
>>3712671
>3.5 Для системного программирования - Таненбаум
Вот из тех кто его советует, хоть раз открывал его? Это же тупое говно на уровне научпопа. Есть намного лучше курсы/книги: nan2tetris, книга с кометой, xinu project, mmurtl...
>3. Хитрости и приёмы именно Си: книга Кернигана и Ритчи.
Я бы тебе с ноги уебал, если бы увидел что ты пишешь как они. Effective C берешь и читаешь, а не изучаешь окаменелости.
Аноним 26/05/26 Втр 11:21:58 #265 №3712751 
>>3712722
>Effective C
Адвокат Григорин вроде не рекомендовал эту книгу для ньюфагов.
Аноним 26/05/26 Втр 12:22:08 #266 №3712785 
>>3712722
Не окаменелость а фундамент.
В твоём проекте буду писать по твоим стилям/гайдам. В своих буду устраивать филиал IOCCC, и никакой двачер мне не указ. K&R стоит читать, чтобы знать на что Си вообще способен, а уже потом перебирать, что подходит конкретному проекту, а что нет.
Аноним 26/05/26 Втр 15:47:20 #267 №3712911 
images (27).jpeg
>>3712671
>Таненбаум
Общеизвестный факт, ни один из посоветовавших книги Таненбаума сами их не читал.

Ведь если бы он попытался их прочитать, ему бы стало стыдно советовать это графоманское дерьмо ни о чём
Аноним 26/05/26 Втр 19:46:38 #268 №3712963 
чо скажете про кнута
Аноним 26/05/26 Втр 20:51:45 #269 №3712975 
>>3712963
устаревшее говноговна
Аноним 26/05/26 Втр 20:54:54 #270 №3712977 
>>3712963
В его времена не было кэшей. Математический надроч там неплохой, но вешь в себе.
Аноним 26/05/26 Втр 21:14:51 #271 №3712985 
images (28).jpeg
>>3712963
Быку - кнут. А кто по натуре своей свободу любит, тому и за забором свобода.
Аноним 26/05/26 Втр 21:32:30 #272 №3712989 
>>3712963
Думаю если ты школьник с кучей свободного времени, можно порешать. Но если студент и старше, то это сродни учить геометрию по Началам Евклида, когда тебе нужно учить анализ и линейку.
Аноним 26/05/26 Втр 22:37:50 #273 №3713012 
что скажете про сикп
Аноним 26/05/26 Втр 22:39:47 #274 №3713015 
>>3712989
Начала Евклида это как раз таки топ в любом возрасте.
Аноним 26/05/26 Втр 22:40:46 #275 №3713016 
>>3713012
Для cs-чепушков.
Аноним 27/05/26 Срд 13:41:24 #276 №3713393 
а для варкрафта что читать?
Аноним 28/05/26 Чтв 07:41:26 #277 №3713726 
>>3713015
Чем?
Аноним 28/05/26 Чтв 16:42:08 #278 №3713915 
>>3712751
А зря, книжка норм обзор современного Си с проблемами и с тулами.
Аноним 28/05/26 Чтв 16:44:00 #279 №3713916 
>>3712963
>>3712975
>>3712977
Кнут - база, но это не теория, это задачник, и да, это не для кодерков книжка.
Аноним 29/05/26 Птн 22:17:53 #280 №3714664 
>>3712963
Можешь попробовать, но он на своем выдуманном ассемблере все разбирает. Если осилишь с упражнениями, то очень круто, но я бы не советовал, если ты не умеешь программировать уже хорошо довольно.
Аноним 30/05/26 Суб 17:09:31 #281 №3714865 
>>3714664
>но он на своем выдуманном ассемблере все разбирает
Классно же. Можно с умным видом нести бред и всё равно никто ничего не поймёт.
Аноним 30/05/26 Суб 21:32:48 #282 №3714953 
а чем обычная переменная отличается от указателя?
обычная переменная:
-имеет какой-то адрес в в памяти
-имеет какой-то размер (например 4 байта для инт)
-по этому адресу лежат данные - содержание переменной


указатель:
-имеет какой-то адрес
-имеет размер ( 8 байт обычно)
-по этому адресу лежат данные - содержание указателя

Разница лишь в том что содержание указателя - это адрес другой переменной.

Но что мешает мне в обычную переменную тоже положить адрес?
Адрес - это всего лишь число.
Аноним 31/05/26 Вск 04:43:41 #283 №3715014 
>>3714953
Ты можешь сходить по любому адресу, если захочешь. Но адреса у компилятора и ОС определённые, поэтому промажешь. А раньше указатель состоял из двух адресов - смещения и сегмента. Формат и размер указателя - вещь платформозависимая, и делать с ней что-то стоит с некоторой оглядкой хотя бы на чистоту и корректность кода.
Аноним 31/05/26 Вск 09:27:58 #284 №3715042 
17799255725570243982.jpg
>>3714953
>а чем обычная переменная отличается от указателя?
Ничем. Указатель - это переменная.

>Но что мешает мне в обычную переменную тоже положить адрес?
Статическая типизация, блядь, тебе мешает. Вы что траллите? Вы читали вообще синтаксис перед тем как что-то писать на С? Представь себе, и int, и char - это всё числа. Но ты не сможешь в char положить int! Ты наверное можешь сказать, но в int то char я могу положить. НЕ МОЖЕШЬ! У тебя просто происходит неявное преобразование char в int. В обратную сторону нужно явно прописать преобразование, типо
int a;
char b;
b = (char)a;
То же самое и с адресами. Ты МОЖЕШЬ преобразовать указатель в long int.
long long a;
void ⚹b;
a = (long long)b;
Например ты можешь распечатать адрес через printf.
Более того, в низкоуровневом программировнии это вполне обычная штука, только в обратную сторону, long long переводить в указатель, обычный пример memory mapped io

#define UART0_BASE 0x4000C000
volatile long long ⚹uart = (volatile long long ⚹)UART0_BASE;
Аноним 31/05/26 Вск 11:57:23 #285 №3715077 
>>3715042
> Но ты не сможешь в char положить int!

нет никаких типов на самом дела, есть байты с нулями и единицами.
тип - это то как ты выбираешь интерпретировать данные.

ничто не мешает получить адрес и потом хранить его как инт, например
Аноним 31/05/26 Вск 16:03:32 #286 №3715161 
images (29).jpeg
>>3715077
>нет никаких типов на самом дела
Оооооо, доооо??? Внотуре??

Аноны, это правда???
Аноним 31/05/26 Вск 16:07:16 #287 №3715162 
>>3715077
Есть питон, там есть переменные инты.
Покажи как работаешь с памятью.
Тебе же
>ничто не мешает
Аноним 31/05/26 Вск 16:11:37 #288 №3715165 
images (30).jpeg
images (1).png
>>3715077
>есть байты с нулями и единицами.
Эти нули и единицы с тобой в одной комнате, жид? Всем славяно-ариям известно, что нет никаких "битов", есть устойчивые состояния асинхронного RS-триггера, которые характеризуются электрическими напряжениями на выводах. "Биты" это вам дуракам в школе мозги пудрят. Если человек использует такие слова как "бит" или "указатель", и уж тем более "метод класса" - то это всё, с ним всё потеряно, он глубочайшие промытый идиот, который пользуется жидовскими ТЕР-Минами (террориистическими минами) для веб-макак.
Аноним 31/05/26 Вск 16:14:50 #289 №3715166 
>>3715162
мы в треде про питон находимся?
Аноним 31/05/26 Вск 16:18:39 #290 №3715167 
>>3715166
Мы в треде про биты находимся?
Аноним 31/05/26 Вск 16:19:15 #291 №3715168 
>>3715161
Да, это правда. Понимаю, после 10 лет в вебмакакинге это шокирует.
Надо заметить, что это не только относится к компьютерным наукам, но и вообще к самой реальности. Все что ты воспринимаешь это интерпретация.

>>3715165
Бит это прежде всего абстрактная единица информации, не привязанная к конкретной реализации.
Аноним 31/05/26 Вск 16:20:14 #292 №3715169 
>>3715167
Зачем ты серишь под себя?
Что тебе не понятно в хранении информации?
Аноним 31/05/26 Вск 16:21:48 #293 №3715170 
>>3715165
Орнул с этого руса. В чем он неправ? Прав во всём
Аноним 31/05/26 Вск 17:06:22 #294 №3715198 
images (31).jpeg
>>3715168
>Понимаю, после 10 лет в вебмакакинге это шокирует
Ты провёл 10 лет в вебе, не понимая модель памяти? Допустим.

>Бит это прежде всего абстрактная единица информации
А "переменная" это какая единица? Абстрактная или конкретная? А электрическое напряжение что, конкретное? Почему тогда электрическое напряжение это буквально разница между двумя числами - потенциалами поля в точках. А потенциал поля это конкретная величина? А потенциальная энергия? Если энергия такая конкретная то почему мы её пощупать не можем а просто циферки считаем?

>>3715169
>Что тебе не понятно в хранении информации?
А тебе что непонятно? Не я же про "байты" рассуждать начал. Стало быть тебе видимо что-то непонятно в этой теме, раз пришел в тред си о байтах вопрошать. Что-то не видел синтаксисе си тип "байт". Есть int, есть char, но байтов никаких нет.
Аноним 31/05/26 Вск 17:09:44 #295 №3715200 
>>3715165
Столяров спок
Аноним 31/05/26 Вск 17:11:16 #296 №3715202 
>>3715200
Тут либо реально столяров обитает, либо какой-то шиз пытается копировать его стиль общения
Аноним 31/05/26 Вск 17:14:28 #297 №3715207 
Бит это высокоуровневая абстракция для веб-макак
Аноним 31/05/26 Вск 17:21:46 #298 №3715213 
бит ета репчик
Аноним 31/05/26 Вск 17:49:37 #299 №3715227 
>>3715198
>ы провёл 10 лет в вебе, не понимая модель памяти?
Хуль ты очком крутишь, макака? Совсем от петона мозги высохли?

>А "переменная" это какая единица? Абстрактная или конкретная?
Переменная это не единица.
Тебе бы логику подтянуть.

>Что-то не видел синтаксисе си тип "байт"

Ну ещё бы, куда тебе знать что можно получить значение по указателю на байт.
Аноним 31/05/26 Вск 17:53:37 #300 №3715229 
>>3715202
А ботохуетач будет работать без js? Для Столярова жопаскрипт в браузере не по понятиям
Аноним 31/05/26 Вск 18:26:35 #301 №3715239 
>>3715229
На Ютуб же он ролики выкладывает. Это тебе нельзя js, а ему можно.
Аноним 31/05/26 Вск 18:31:37 #302 №3715240 
>>3715227
>Хуль ты очком крутишь, макака? Совсем от петона мозги высохли?
Никогда не умел программировать на python. А язык весьма неплохой между прочим. На нём можно заняться чем-то интеллектуальным, а не копипастить код по байтам.

>Переменная это не единица. Тебе бы логику подтянуть.
А утверждение "переменная не единица" это не логика.

>указателю на байт
А мог бы ты показать этот твой "указатель на байт"? Что-то ни в одной книге такого нет.
Аноним 31/05/26 Вск 18:48:10 #303 №3715246 
>>3715240
>указатель на байт
uint_8t ★ptr ?
мимо
Аноним 31/05/26 Вск 19:33:53 #304 №3715265 
>>3715246
Это указатель на uint_8.
А может у тебя байт 7 бит? Вот что-то ты просчитался.
Аноним 31/05/26 Вск 19:48:56 #305 №3715271 
>>3715265
а char?
Аноним 31/05/26 Вск 20:25:54 #306 №3715291 
на на октет покажите,
а чар может быть любым, но вот де-факто это 1 байт, а послезавтра это будет что-то 3-байтовое, и наступит каюк всему си
Аноним 31/05/26 Вск 20:26:37 #307 №3715292 
Положняк: Столяров чорт хуи саси
Аноним 31/05/26 Вск 22:50:09 #308 №3715339 
>>3715240
>А мог бы ты показать этот твой "указатель на байт"? Что-то ни в одной книге такого нет.

чел, любой указатель указывает на байт (хранит адрес байта)
Аноним 31/05/26 Вск 22:52:08 #309 №3715341 
>>3715265
>А может у тебя байт 7 бит?

Байт это сегда 8 бит по определению.
Другое дело что ты можешь один бит использовать для хранения знака, например, а 7 других для числа от 0 до 127
Аноним 01/06/26 Пнд 00:18:18 #310 №3715367 
>>3715341
>Байт это сегда 8 бит по определению
Нет))) почитай книжек, ребёнок
Аноним 01/06/26 Пнд 00:20:25 #311 №3715368 
>>3715339
Любой указатель и есть байт. Получается никакого указателя нет, есть только байты. Никакого си тоже нет, есть только байты. Которые всегда 8 бит, даже на PDP-10 для которого между прочим си и создан 🤡
Аноним 01/06/26 Пнд 02:25:18 #312 №3715396 
>>3715368
>>3715367
Как же школьник подгорает.
Да, в современных системах байт это 8 бит. Минимальный набор битов для адресации.
Ну ты еще погугли про перфораторные компьютеры, порази нас эрудицией.

>Любой указатель и есть байт.

Что блядь? Это ты так понял "любой указатель указывает на байт"?
Аноним 01/06/26 Пнд 09:44:58 #313 №3715461 
>>3715396
>Что блядь?
Ну, если никаких переменных и чисел не существует, а есть только "байты" (или как там это себе в бошке нафантазировал), то стало быть и значение адреса это тоже байты, а стало быть и никаких указателей нет, есть только байты. Ну и функции кстати тоже нет, есть только jmp, ret
Аноним 01/06/26 Пнд 10:51:05 #314 №3715485 
Вы уже по хуйне начали сраться
Аноним 01/06/26 Пнд 12:52:14 #315 №3715559 
images (31).jpeg
>>3715485
А да? Да ну нахуй. А я и не заметил, что тот анон с самого начала несёт хуйню (см. >>3715077 ), либо жиденько троллит.

Тред по С. В си типизация статическая. Тут есть типы переменных, прЕкинь!1 И переменную разных типов нельзя присвоить друг другу. Это тебе не java. В некоторых случаях выполняется неявное преобразование, если оно слишком очевидно, например char a = 2, ну очевидно что оно и в int должно быть 2, смысла отдельно попиисывать это преобразования нет, но в коде его таки прописывают часто, просто для информации, чтобы человек понимал что во что превратилось. А вот 1488 int в char это что? Ну можем взять лишнюю часть, то есть 1488 % 256 = 208. А почему так? Почему не 256? По стандарту C результат такого преобразования implementation-defined. То есть язык си не требует единственного варианта поведения - это уже реализация компилятора решает что делать. Поэтому надо явно написать "вот да, я знаю что делаю, я преобразую char в int". А зачем этот шиз выдал что "всё есть байты" - в душе не ебу. Походу дошколёнок пердежа столрярова надышался на его сайте, открыл для себя умное слово "байт" и носится везде с ним как с открытием. Тред про язык С, а вот ему надо благую весть всем рассказать, что оказывается вся память из байтов состоит. Когда он для себя RS-триггеры из курса автоматики откроет, будет носиться рассказывать всес что битов нет. Вот такая-с аудитория у С. Надо внатуре было нормальные языки учить.
Аноним 01/06/26 Пнд 14:09:43 #316 №3715603 
>>3715461
Байты хранят числа.
Значение адресов это тоже числа.

Когда я говорю что нет типов, речь о том что типы используются компилятором для интерпретации данных и определения количества байтов с которых будет извлекаться эти данные.
Но не что мне не мешает получить адрес байта объекта и пройти по каждому отдельному байту используя указатель на char, достать число из байта и интерпретировать его как мне нужно.



>>3715559
Ты просто не дорос до уровня понимания.
Ты даже не понял что за этим стоит философская идея - вся информация с которой мы работаем это интерпретация.
Для тебя типы это что-то волшебное и железобетонное, а не технический способ интерпретировать числа из набора байтов.


> И переменную разных типов нельзя присвоить друг другу

Воед знаешь?

Короче, ты спалился когда спросил что такое указатель на байт. То есть ты не понимаешь что указатель именно на один байт и указывает.
Видимо сидишь через нейронку строчишь хуйню нихуя не соображая.
Аноним 01/06/26 Пнд 14:13:03 #317 №3715604 
Это драконошизы протекают? В Би не было типов. В Си различие слова, байта и указателя стало шагом вперед.
Аноним 01/06/26 Пнд 17:12:15 #318 №3715718 
>>3715291
не наступит, вайдчары давно есть
Аноним 01/06/26 Пнд 17:14:27 #319 №3715719 
>>3715604
дракон кстати ахуенный, на нем в космос летали а на си хуй сосали
Аноним 01/06/26 Пнд 17:50:38 #320 №3715735 
>>3715603
>Байты хранят числа.
>Значение адресов это тоже числа.
Ахахах. Машинные инструкции, внезапно, тоже числа. Еблан. Ты перед тем как своими охуительными "знаниями" выёбываться хотя бы почитал про архитектуру фона Неймана. Ебать ты дебил, вроде ты пытаешься умничать, а нихуя не получается.
Аноним 01/06/26 Пнд 17:54:11 #321 №3715741 
i (1).jpeg
>>3715603
>> И переменную разных типов нельзя присвоить друг другу
>Воед знаешь?
Ахахах дебил, переменной void не существует в СИ. Есть только указатель на void. И его ВНЕЗАПНО нельзя присвоить ничему кроме *void. Что с ебалом. Ахахах дура, ебать.
Аноним 01/06/26 Пнд 18:12:04 #322 №3715748 
>>3715735
Не плачь, дите.
Ну обосрался, ну значит обосрался. Нахуй жопой вилять?
Главное запомни что указатель указывает на байт т.е. хранит адрес байта.

>>3715741
>переменной void не существует в СИ. Есть только указатель на void.

Указатель это тоже внезапно переменная.

> И его ВНЕЗАПНО нельзя присвоить ничему кроме *void.

Да что ты говоришь? Серьезно?
Естественно указатель на воид МОЖЕТ указывать на адрес абсолютно любого типа.
Это собственно и есть его главная функция.


В общем, я понял что ты вообще нихуя не соображаешь, пройди просто нахуй.
Аноним 01/06/26 Пнд 18:31:47 #323 №3715754 
>>3715748
>Ну обосрался, ну значит обосрался.
>Нахуй жопой вилять?
Это ты сам с собой говоришь, я так понял. Я твоей мамке про это раскажу она тебя ведь к детскому психологу отправит.
Аноним 02/06/26 Втр 19:58:17 #324 №3716338 
>>3715754
>ПУК
Аноним 04/06/26 Чтв 18:04:32 #325 №3717288 
чо затихли?
Аноним 05/06/26 Птн 03:19:24 #326 №3717449 
Че вы там всё пердолите на своем си?
Аноним 05/06/26 Птн 19:04:01 #327 №3717845 
>>3717449
мамку твою
Аноним 09/06/26 Втр 18:37:26 #328 №3719522 
глядите чо нашел

https://justine.lol/blinkenlights/

Blinkenlights — это отладчик командной строки, ориентированный на визуализацию того, как программное обеспечение изменяет память. Он способен эмулировать статически скомпилированные программы i8086 и x86_64-pc-linux-gnu на платформах Linux, Mac, Windows, FreeBSD, NetBSD и OpenBSD.
Аноним 09/06/26 Втр 20:05:37 #329 №3719547 
image.png
Аноним 10/06/26 Срд 02:53:47 #330 №3719619 
>>3707980
Тебе надо исходить из того, что тебе обеспечено и гарантируется что всё будет ОК - только если ты будешь использовать и записывать память в пределах запрошенного аллоцированного кол-ва байт, начиная с возвращенного malloc-ом адреса.
Что язык С, что С++ - все они никак не ограждают тебя от выстрела в ногу. В смысле да - ты можешь попытаться читать или записывать память за пределами выделенного диапазона адресов. Но что из этого выйдет - хуй знает. Может прокатит, а может и нет. Причём самым непредсказуемым образом. Это так называемые баги из разряда buffer overrun.
В общем, нормальные программисты так не поступают. А вот хакеры - вполне могут поступить. Но они часто знают, что делают.
Аноним 10/06/26 Срд 02:59:37 #331 №3719620 
>>3719619
Что касается хакеров. Есть такой приём переполнения буфера. Это когда массив байтов аллоцируется на стеке. Хакер в целях взлома системы добивается, чтобы его данные оказались бы записаны в такой массив-буфер, причём произошла бы перезапись за пределами верхней границы массива. И знаешь к чему это подчас приводит? Я тебе расскажу.
Дело в том, что в x86 компьютерах, все стеки растут от верхних адресов памяти, к нижним. Т.е. когда ты вызываешь какую-то функцию, в стеке для неё создается stack frame, в котором располагаются все локальные переменные этой функции, в т.ч. наш массив. И при этом, этот stack frame (далее - стековый кадр) оказывается расположен по более низкому адресу, чем стековый кадр функции, что его вызвала. А массив в нашем кадре расположен в памяти от более низких адресов к более высоким. Это приводит к тому, что перезапись за границы массива позволяет записать память в стеке не только нашего стекового кадра, но и кадр функции, что его вызвала!
Аноним 10/06/26 Срд 03:06:16 #332 №3719622 
>>3719620
А ещё, когда процессор кидает данные в стек, они тоже кидаются сначала с более высоких адресов к более низким.
И вот когда вызывается функция, для вызываемой функции создаётся стековый кадр, где самым первым делом (по самому высокому адресу этого кадра) в стек кидается т.н. адрес возврата из функции. Это тот адрес, по которому должно продолжиться выполнение программы, когда наша вызываемая функция завершится, и должен будет произойти возврат к вызвавшей её родительской функции.
Но! Хакеру важно, чтобы он захватил контроль за ходом исполнения нашей программы. Для этого, он с помощью перезаписи буфера (сиречь массива в стеке), он добивается перезаписи адреса возврата из функции (который лежит ВЫШЕ, чем сам массив) своим собственным адресом, который ему нужен.
Т.е. ты понимаешь, к чему это приводит? Что программа уже делает то, что ей хакер указал. И это показывает, насколько надо быть внимательным при написании софта на Си и Си++, который будет взаимодействовать с чужими данными. Надо всё проверять!
Особенно в каком-нибудь сетевом коде, где тебе по сети могут прислать любое говно из любой точки мира.
Аноним 10/06/26 Срд 03:11:33 #333 №3719625 
>>3719622
Там вообще, в сетевых стеках (которые как раз пишутся на Си и Си++) нужно быть охуенно внимательным. Уже не раз история видела, как кривой код приводил к масштабным проблемам.
Те же взломы Windows NT в конце 90-х, т.н. WinNuke. Или там всякие Denial of Service атаки на сетевые стеки, где на компьютер устраивали множество TCP подключений, которые забивали память ядра (особенно, когда там был буфер подключений индивидуально для каждого порта). Это только то, о чём я слышал. По факту, вариантов поднасрать было намного-намного больше.
Аноним 10/06/26 Срд 03:26:56 #334 №3719626 
>>3719619
Ещё хочу сказать, что сам язык Си или С++ никак не запрещает тебе пытаться читать или записывать данные по произвольным адресам памяти. Использовать указатели с произвольным содержимым. Ты всегда можешь тупо взять некое число, и кастануть его у указателю.
Только что выйдет из всех этих попыток - тот ещё вопрос.
На самом деле, подчас в некотором софте. Системном или для микроконтроллеров, обращение к кое-каким конкретным адресам может быть даже желательным. Так как по этим адресам располагаются полезные для тебя вещи.
Так например в ДОС, начиная с адреса 0 (НОЛЬ), в реальном режиме процессора, лежит массив адресов перехватчиков прерываний. И если ты хочешь написать свой собственный перехватчик, тебе неизбежно придётся переписать адрес в этом массиве.
Ещё например драйвера, часто используют обмен данными с подопечными им устройствами через некоторые спроецированные в физическое адресное пространство памяти адреса ввода-вывода этого устройства. Которые известны только самим разработчикам устройства. Чтение данных по такому адресу приводит к получению определённых данных от самого устройства. И наоборот, запись данных по адресу - приводит к отправке данных на устройство.
Аноним 10/06/26 Срд 03:31:04 #335 №3719627 
>>3719626
В винде, каждый исполняемый процесс имеет своё виртуальное адресное пространство памяти (не путать с физическим адресным пространством памяти). И значит, там это пространство разбивается на диапазоны. В разных диапазонах память может иметь свои особенности. Некоторая память допускает только чтение данных. Некоторая - и чтение, и запись. Некоторая - ещё и исполнение. Возможно только чтение и исполнение, а возможно и ещё и запись впридачу. Последний вариант позволяет исполняющейся программе - программировать саму себя. Т.е. на лету генерировать и записывать машинный код, который можно будет затем исполнить процессором. Гугли функцию VirtualAlloc из WinAPI.
Аноним 10/06/26 Срд 03:36:01 #336 №3719628 
>>3719627
Далее, некоторые диапазоны памяти в программе используются, чтобы спроецировать в них исполняемый код из exe и dll файлов. Некоторые - просто содержат готовые проинициализированные данные из этих же файлов, которые запрещено исполнять. Некоторые диапазоны содержат в начале исполнения программы тупо нули. Некоторые диапазоны вообще никак не используются, и попытка обращения к ним приводит к ошибке и segfault (в винде - access violation). Также, во время исполнения программы, она может запросить у ОС дополнительную память (из т.н. кучи), и ОС как раз таки выделит эту память в некоторых диапазонах адресов.
А ещё - программа может спроецировать файлы с диска прямо в память, и читать-записывать такие файлы путем прямого чтения или записи по адресам памяти.
Аноним 10/06/26 Срд 04:25:29 #337 №3719630 
>>3712975
Не, там есть что подчерпнуть. Например, я там вычитал как делать рандомные числа с нормальным (гауссовским) распределением. И вообще там про рандомные числа много чего интересного написано.
Про сети сортировок тоже интересно. В других книжках такого нет.
Аноним 10/06/26 Срд 06:06:45 #338 №3719634 
Саморазвитие через треды на дваче
Аноним 10/06/26 Срд 06:36:31 #339 №3719635 
>>3719630
>как делать рандомные числа с нормальным (гауссовским) распределением.
И как же? Просуммировать побольше чисел с равномерным распределением и по закону больших чисел получить нормальное распределение? Или есть вариант поумнее?
Аноним 10/06/26 Срд 07:03:52 #340 №3719637 
image.png
>>3719547
Аноним 10/06/26 Срд 11:30:32 #341 №3719677 
null-ptr.jpg
страшно...
Аноним 10/06/26 Срд 12:01:34 #342 №3719696 
>>3719635
Да. Там гораздо умнее. Я прям сейчас не упомню, но нужно было сделать что-то вроде генерации пары чисел - координат в неком квадрате. Причём вводился некий критерий, что если число, вычисляющееся через эти координаты оказывается слишком большим - эти координаты надо отбросить, и сгенерировать другие. Ну и в общем, потом из координат после какого-то математического преобразования получается искомое рандомное число с нормальным распределением.
Аноним 10/06/26 Срд 13:22:44 #343 №3719721 
>>3719626
>Так например в ДОС, начиная с адреса 0 (НОЛЬ), в реальном режиме процессора, лежит массив адресов перехватчиков прерываний. И если ты хочешь написать свой собственный перехватчик,

То пиздуешь в папку arch и хуяришь на ассемблере.
Аноним 10/06/26 Срд 13:31:18 #344 №3719730 
Пишу на шарпе уже много лет, но не веб, но вот щас на работе походу придется через пару месяцев на него переключиться. Какая есть база, которую стоит посмотреть/почитать за это время? В вебе я ноль полный.
Аноним 10/06/26 Срд 13:32:09 #345 №3719731 
>>3719730
Бля, промахнулся тредом, соррян
Аноним 10/06/26 Срд 13:34:34 #346 №3719734 
>>3719730

https://facil.io/
Аноним 11/06/26 Чтв 01:14:27 #347 №3720089 
image.png
шо тут за уязвимость?
Аноним 11/06/26 Чтв 06:10:05 #348 №3720103 
>>3720089
Что, студент или подался на вакансию?
Поясняю. Если у тебя 32-битная система, то тип size_t, который принимает malloc является 32-битным, и принимает максимальное возможное значение (2 в степени 32) - 1. sizeof(char звёздочка) у тебя оказывается равно 4. Всё это влечёт за собой при вычислении аргумента malloc в коде, целочисленное переполнение. Там фактически, этот аргумент оказывается равным 4 (четырём). И именно столько байт аллоцирует malloc.
А далее - ты в цикле в этот массив пытаешься записать аж 1073741825 элементов. Каждый элемент это указатель тоже из 4-х байт. А адресное пространство в 32-битной системе - у тебя тоже только 2 в 32 степени (4 гигабайта). При вычислении адресов, по которым надо класть в массив данные, там тоже неизбежно будет встречаться целочисленное переполнение, т.к. каждый индекс массива надо будет домножать на размер элемента (4 байта указатели). А сам массив, тоже не в самом начале адресного пространства находится небось. В итоге, в цикле ты дойдёшь до границы адресного пространства, а потом ещё в его начало перепрыгнешь. И если бы не защита памяти, ты вообще легко можешь перезаписать уже сам машинный код твоей программы, который сам лежит где-то у тебя в памяти. В общем, полный пиздец.
Аноним 11/06/26 Чтв 06:14:37 #349 №3720104 
>>3720103
А вот если система у тебя 64-битная, то size_t и указатели имеют размер 8 байт, при вычислении размера куска памяти для malloc никакого переполнения не случится. Размер адресного пространства тоже куда больше (2 в 64 степени байт). Malloc вполне себе нужный кусок памяти может выделить на твои 8589934600 байт. И ты вполне себе забьёшь массив своими указателями в цикле.
В общем, я не вижу особых проблем.
Аноним 11/06/26 Чтв 08:19:47 #350 №3720114 
>>3720089
Размер стэка обычно чё-то типа 8 мбайт. Ты в цикле по сути кладёшь на стэк 4 байта 4 миллиона раз, то есть будет 16 мбайт. Много короче, может стэк оверфлоу случиться.
Аноним 11/06/26 Чтв 08:26:05 #351 №3720115 
>>3720114
А вот и двачер-дегенерат подоспел. На стек он кладёт, через malloc. Как же. Какую только хуйню здесь не прочтёшь.
Аноним 11/06/26 Чтв 08:30:16 #352 №3720116 
>>3720115
Ты не делаешь free в цикле для массива указателей, а делаешь только free для всего массива, значит всё остальное на стэке лежит и тут будет стэк оверфлоу.
Аноним 11/06/26 Чтв 09:03:40 #353 №3720125 
>>3720116
Чё несёт, кретин. Си подучи, уёбок. Может, раздуплишься как-нибудь, и поймёшь наконец как оно всё-таки работает здесь. На стеке у него лежит. Жопа твоя на стеке лежит - вот что.
Аноним 11/06/26 Чтв 09:42:02 #354 №3720130 
>>3720125
Долбоёб, ты не делаешь маллок в функции рид_стринг. Если ты не делаешь маллок - значит это лежит на стэке, а не на куче. Как же заебали вкатуны малолетние, боже.
Аноним 11/06/26 Чтв 10:24:15 #355 №3720140 
>>3720130
>Если ты не делаешь маллок - значит это лежит на стэке, а не на куче.
Этот дегенерат ещё будет называть кого-то малолетним вкатунцом.
Твоё суждение не верно, дебил. Это не лежит ни на каком стеке. Пошёл нахуй. Говорю же - выучи Си, прежде чем рот открывать.
Аноним 11/06/26 Чтв 22:07:05 #356 №3720344 
>>3720140
Наверное он просто вайбкодер, который только нейронкой командовать может. А сам ничегошеньки не понимает ни в Си, ни в программах на нем.
Аноним 11/06/26 Чтв 22:10:01 #357 №3720346 
>>3720115
И 4 миллиона раз, ага ага.
Аноним 13/06/26 Суб 01:02:10 #358 №3720731 
image.png
А тут ?
Аноним 13/06/26 Суб 04:47:08 #359 №3720739 
>>3720731
Это CLion?
Аноним 22/06/26 Пнд 03:01:02 #360 №3723558 
Screenshot20260622-025825Brave.png
>>3673238
ТОR написан на Си без плюсов(и да, ТОR не браузер).
Redis написан на Си.
Linux написан на Си.
Аноним 22/06/26 Пнд 03:07:40 #361 №3723559 
>>3723558
А плюсы, в отличии от Си - язык весьма суровый (надо понимать, в какой код преобразуется твой текст из переопределений с шаблонами). Не говорите С/С++ - это примерно как сказать JAVA/JS
Аноним 22/06/26 Пнд 04:44:35 #362 №3723562 
IMG20260622044208.jpg
>>3707980
Ядро выдает память блоками по 4 килобайта(см. системный вызов mmap, архитектуру виртуальной памяти)
malloc не является системным вызовом/ запросом к ядру. Это аллокатор из стандартной библиотеки(dll или so), который резервирует места в тех самых 4кб блоках под переменные(обозначает в блоках пустые места и т.д. ). Его задача - выдать адреса такие, что объекты не будут друг-на-друга наскакивать.

Да, malloc может подать запрос в ядро - если блоков не хватает, или если 'дыры' в блоках слишком узкие, что б туда уместился объект. Но он не будет по 4кб на каждый int просить:)

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

@ это звездочка
____
#include "stdlib.h"
struct client
{
int id;
int pin;
};
int main()
{

int@ a= malloc(sizeof(int));
struct client@ c= malloc(sizeof(struct client));

@a=8;
c->id=20;
c->pin=1248;

for( int i=0; i<200; i++)
{

a=1337;

}

printf("a=%d; id=%d; pin=%d\n", @a, c->id, c->pin);

return 0;

}
____

см. Скрин. Баг то вылезает то не вылезает. И ни однлго сегфолта
Аноним 22/06/26 Пнд 04:49:17 #363 №3723563 
>>3723562
быстрофикс
for( int i=0; i<200; i++)
{

*(a + i)=1337;
//было a ( i )= 1337, где ( ) квадратные

}
Аноним 22/06/26 Пнд 12:15:30 #364 №3723680 
Языку только 60 лет, а в си треде уже дошли до малока и типов переменных. Какие открытия будут дальше?
Аноним 22/06/26 Пнд 13:03:12 #365 №3723697 
>>3723680
А что такого? Зашел чел спросить "что такое аллокатор". Во всяких книжках "си для чайников за час" детали работы аллокаторов + сбои памяти не объясняют, а тема важная. Хорошо что внимание обратил - цепляться за "странное поведение" для сишника необходимо, как и для любого другого спеца.
Аноним 22/06/26 Пнд 14:18:53 #366 №3723731 
>>3723697
Насколько я помню, про аллокацию памяти подробно писал Кнут ещё в 1960-х годах.
Аноним 22/06/26 Пнд 16:41:47 #367 №3723779 
>>3723697
>Во всяких книжках "си для чайников за час" детали работы аллокаторов + сбои памяти не объясняют
Диди в K&R объясняют в последней главе, на примерно 150 странице. И кто-то же всё равно гонит на бессмертную классику.
Аноним 22/06/26 Пнд 17:55:53 #368 №3723794 
>>3723697
А чё ты там спросил, ткни? Алсо, с забором памяти есть один тонкий момент, который надо помнить, calloc (по стандарту) возвратит ошибку, если произошло переполнение, а вот realloc - нет.
Аноним 22/06/26 Пнд 21:47:00 #369 №3723845 
>>3723794
Я-то ничего не спрашивал. Просто понимаю анона выше, аллокаторы тема весьма глубокая, а он в неё полез.

Сам сталкивался с весьма странными проблемами. Пишешь ты сетевую софтину - у тебя буферы клиентов в куче висят, дофига тасков. И в это же время в кучу прописываются результаты операций(те, что хранятся в оперативке до отключения питания). И вот кусочки буферов, временные данные ты через free убрал - и остается страница, на половину пустая, но забитая теми самыми "вечными" объектами. И память-то ты не юзаешь, и страницу вернуть ядру не можешь. И процесс твой убивают.

И что тут делать? До того дошло, что сам аллокатор вымучил, независимый от malloc. Я уверен, что половина сетевых программистов со внутренней фрагментацией сталкивалась - может у кого было решение покрасивее?)
Аноним 22/06/26 Пнд 23:23:57 #370 №3723871 
>>3723845
Я конечно не специалист, но по-моему тут только свой костыльаллокатор пилить.
Аноним 23/06/26 Втр 02:25:37 #371 №3723893 
>>3723845
>И что тут делать?
>у тебя буферы клиентов в куче висят, дофига тасков. И в это же время в кучу прописываются результаты операций(те, что хранятся в оперативке до отключения питания). И вот кусочки буферов
1. У тебя проблема в логике.
>страницу вернуть ядру не можешь
2. Никогда не отдавай память системе.
3. Выходит из 1, у тебя не будет проблем с фрагментацией.
4. Выделяй заранее память для пула маллока.
>И процесс твой убивают
5. Значит сервер хуйня.
Аноним 23/06/26 Втр 04:22:23 #372 №3723905 
>>3707990
>хотя по-идее они должны в памяти по соседству находиться
Не надо делать таких предположений. Твоя программа вообще не должна делать никаких предположений, где конкретно в памяти тебе выделят пространство malloc-ом. Это полностью на усмотрение аллокатора, который может руководствоваться оч. нетривиальной логикой.
Там помимо отдельных зон в памяти для объектов различного размера, могут вообще перед или после выделенного malloc-ом участка памяти, выделяться им же скрытые, служебные поля в памяти перед или после официального выделенного участка. И в этих полях размещаться какая-нибудь служебная информация.
Аноним 23/06/26 Втр 04:28:11 #373 №3723906 
>>3708923
Не любой. Указатель на void нельзя. Из-за того, что у него неизвестен размер элементов массива.
Аноним 23/06/26 Втр 04:36:55 #374 №3723907 
>>3714953
Так указатели и сами являются переменными. Просто там в них лежат не какие-то простые данные, а адреса. Адреса вполне можно представлять как числа, и в Си действительно можно числовые переменные кастовать в указатели. Как и указатели кастовать в числа. Надо только убедиться предварительно, что размеры в байтах этих числовых переменных и указателей - совпадают.
Аноним 23/06/26 Втр 04:39:33 #375 №3723908 
>>3715014
>А раньше указатель состоял из двух адресов - смещения и сегмента.
Ну как раньше. Под ДОС, в 16-битном реальном режиме процессоров x86. Просто ещё до ДОС, были реализации Си, на других платформах типа PDP, и там никаких сегментов не было. Сегменты - это чисто Intel-овская фишка.
Аноним 23/06/26 Втр 04:41:55 #376 №3723909 
>>3715077
Типов нет в языке ассемблера, на низком машинном уровне. А вот в Си уже типы вполне себе есть.
Аноним 23/06/26 Втр 04:50:19 #377 №3723910 
>>3715162
В питоне есть функция id(), которая возвращает адрес объекта.
Если хочешь, ты можешь на Си накатать расширение интерпретатора питона, которое бы тебе позволяло читать или записывать данные по произвольным адресам в памяти. И делать это с помощью специальных функций, которые предоставляет программам на питоне сие написанное тобой расширение.
Ещё поинтересуйся в питоне модулем ctypes и типом memoryview.
Аноним 23/06/26 Втр 04:54:23 #378 №3723911 
>>3715165
Биты есть, как некая условность в виде информации, принимающей значения 1 или 0. И эта вот информация может быть заложена в самых различных формах. Как в триггере, о котором ты говоришь. А может - в виде питов на CD-диске. Или в виде дырочек на перфокарте. Вариантов масса. Но всё это по-прежнему биты.
Аноним 23/06/26 Втр 04:59:35 #379 №3723912 
>>3715291
Насколько знаю, в стандарте Си, sizeof показывает размер объекта не в байтах!! А в количестве объектов char, которые в искомом объекте могут уместиться. Т.е. тип char является основополагающим.
Аноним 23/06/26 Втр 08:16:51 #380 №3723932 
>>3723845
>И что тут делать?
Для простых сетевых хуёвин "разместил" бы всё в .bss, типо структурка на соединение с дескрипторами, данными и rx/tx буферами, n таких структур для n подключений и free list к ней.
То есть вообще без аллокаций через std lib *alloc. Вообще совет анону, если тебе на деле не очень нужна память в куче, то она тебе не нужна.
Аноним 23/06/26 Втр 12:04:48 #381 №3724007 
>>3723845
>И память-то ты не юзаешь, и страницу вернуть ядру не можешь. И процесс твой убивают.
Т.е. у тебя была нарастающая фрагментация памяти, а затем наступил момент, когда при вызове очередного маллока не нашёлся подходящий зазор, а новую память не выделить? При наличии таких рисков как раз полагается использовать языки с GC. Приличный сборщик мусора мало того, что гарантирует отсутствие фрагментации, так ещё и работает быстрее в тех случаях, когда ручное управление её вызывает (Тормоза в языках с GC вызваны их рантаймом, а не самим сборщиком).
Аноним 24/06/26 Срд 00:11:37 #382 №3724185 
>>3724007
>Приличный сборщик мусора мало того, что гарантирует отсутствие фрагментации
Гарантировать можно только копированием.
> так ещё и работает быстрее в тех случаях
Нет. Ускорение сборки покупается перерасходом памяти (отсюда промахи в кэш ака тормоза в рантайме) и откладыванием копирования (отсюда аналог фрагментации).
Аноним 24/06/26 Срд 01:07:53 #383 №3724188 
>>3723845
Тоже вымучил сам аллокатор. Lazy дерево без балансировки и thread_local массивы для маленьких объектов. Не сказал бы, что очень глубокая тема, матана в ней мало, чистое байтоебство.
Аноним 24/06/26 Срд 01:25:09 #384 №3724190 
Хотя, программировать это, ну наверное, немного сложно. Тут надо вытащить самого себя за волосы как барон Мюнхаузен, поскольку ноды дерева блоков - это и есть предмет динамической аллокации, которой у тебя пока что нет. Но мы же сишники гречневые.
Аноним 24/06/26 Срд 15:00:13 #385 №3724346 
>>3724185
>Ускорение сборки покупается перерасходом памяти (отсюда промахи в кэш ака тормоза в рантайме) и откладыванием копирования (отсюда аналог фрагментации).
Ручной аллокатор тоже много памяти тратит на собственные нужды, и при фрагментации этот расход становится очень значительным. А расход тактов на копирование stop-and-copy сборщиком сильно завышен, так как процедура копирования перемещает данные в банальный вектор (одномерный массив). И что важно, аллокация при использовании GC происходит моментально, ибо для нахождения подходящих ячеек даже искать ничего не надо, достаточно лишь проверить, не вышел ли индекс за размер кучи. Если в памяти часто выделяются и стираются короткоживущие объекты с непредсказуемыми точными сроками жизни, то ничего лучше различных вариантов и гибридов сборщика типа "stop-and-copy" пока не придумали.
Аноним 24/06/26 Срд 18:40:52 #386 №3724450 
Откуда вообще берутся фрагментации в сетевой параше? Вы ебанутые?
Аноним 24/06/26 Срд 20:54:03 #387 №3724491 
>>3724346
>Ручной аллокатор тоже много памяти тратит на собственные нужды, и при фрагментации этот расход становится очень значительным.
Сборщик тоже много... и т.д.
Если же он тратит не много, он медленный.
> достаточно лишь проверить, не вышел ли индекс за размер кучи.
Недостаточно. Под сборку нужны четкие форматы объектов, стековых фреймов, ограничения на использование регистров - куда можно сырые данные, куда низя. Это несет свои расходы и времени, и памяти.
Аноним 24/06/26 Срд 22:59:06 #388 №3724535 
>>3719626
У микроконтроллеров, бывает что на некоторые адреса памяти на самом деле спроецированы регистры процессора этого самого микроконтроллера.
Аноним 25/06/26 Чтв 09:14:40 #389 №3724572 
>>3724535
>У микроконтроллеров
У всего.
Аноним 25/06/26 Чтв 12:10:19 #390 №3724614 
>>3724572
Регистры процессора (рон) не у всего, но в мк удивительно часто: авр, 8052, с166
Аноним 25/06/26 Чтв 14:17:33 #391 №3724679 
>>3715339
Ты подивишься, но не обязательно. Существуют или существовали компы, где адресация шла на блоки, большие чем байт.
Вот например вот этот динозавр из 1965 г. адресует память 16-битными словами
https://en.wikipedia.org/wiki/IBM_1130

И в те же времена, были компы с десятичной системой счета, а не двоичной. Байты, меньшие 8 бит. Машины со стековой архитектурой, вроде Burroughs.
Аноним 30/06/26 Втр 00:08:47 #392 №3726347 
>>3714953
для хранения адресов юзай uintptr_t,
конвертится в void и обратно. Допустим, если в байтах нужно посчитать расстояние между объектами, самое оно.

Но, указатели штука тонкая.

Если зачем-то сделаешь указатель типа uint32_t
на элемент массива uint8_t[] - познаешь боль endianness. Запишется не то что нужно, не там где нужно - и еще кучу элементов зацепит.

Есть еще offsetof и container_of для навигации по структурам(которые могут содержать дыры между элементами, если те имеют размер меньше регистра и не имеют attribute packed ). Тоже тема :-]
Аноним 30/06/26 Втр 09:18:28 #393 №3726402 
>>3726347
ХЗ при чем у тебя attribute packed, в любом случае лучше offsetof юзать, чем ручками считать смещение, полагая что packed включен.

container_of - вообще фишка линукса, когда нужно найти родительскую структуру.
Аноним 30/06/26 Втр 09:19:26 #394 №3726403 
>>3726402
Не фишка, а просто макрос конечно же, использовать можно где угодно.
Аноним 30/06/26 Втр 14:45:29 #395 №3726543 
А мне вот интересно. Я делаю структурку, в которой 2 поля:
поле uint32_t, и идущее за ним поле uint8_t.

Делаю функцию, в которую как аргумент передаётся по значению вот эта вот структурка. Функция должна работать как можно быстрее.

Хочу знать - будет ли данная структурка передаваться в функцию в регистрах процессора? Одно поле в 32-битном регистре, второе поле, скажем в 8-битном регистре. Такое было бы самым оптимальным вариантом.
Аноним 30/06/26 Втр 15:00:43 #396 №3726550 
>>3726543
Читай соглашения о вызовах для своей платформы и ОС.
Аноним 30/06/26 Втр 15:40:36 #397 №3726580 
>>3726543
Передавай по ссылке в плюсах или указателю в C
void f ( const struct_t & s )
Аноним 30/06/26 Втр 16:05:01 #398 №3726591 
>>3726543
Может быть тебе просто нужен inline?
Аноним 30/06/26 Втр 20:00:50 #399 №3726690 
>>3726580
Плохой вариант. Передавать адрес. Это уже 8 байт, вместо 5. Потом ещё косвенно обращаться по адресу.
Аноним 30/06/26 Втр 20:09:27 #400 №3726697 
>>3726591
inline не хочу, т.к. функция много где вызывается в кодовой базе, функция часто вызывается, а кода в ней слишком много.
Нужна максимальная скорость.
Аноним 30/06/26 Втр 20:13:34 #401 №3726701 
>>3726550
MSVC пишет, что в __fastcall структуры передаются только через стек. вот пидорасы! Ведь можно в регистры положить! 5-байтовую то структурку.
Вот какого хера!
Аноним 30/06/26 Втр 20:19:46 #402 №3726705 
>>3726697
>а кода в ней слишком много.
Тогда ты ничего не выгадаешь на этой ерунде. Вот хотя бы просто для начала сравни каково оно будет с inline и без. Наверняка разница будет околонулевой.
Аноним 30/06/26 Втр 21:49:48 #403 №3726739 
>>3726705
Не. Кода слишком много - значит несколько операторов.
Раскрою карты - это главная функция, которая формирует битовый поток. Ей передаётся 32 бита число-буфер, и 1 байт - кол-во актуальных бит в буфере. Всё упаковано в одну структурку.
И вот эта функция во внутренний буфер объекта потока дописывает наши вот переданные биты. Там горстка битовых операций в коде, да ещё один if. Но всё это дело должно работать как можно быстрее. Т.к. записывается много всего.
Аноним 30/06/26 Втр 21:52:21 #404 №3726740 
>>3726739
Я просто не хочу размножать всё вот это хозяйство по всему коду. Ради пущей скорости, я и исключения отключил в функции через noexcept. (хотя да, я знаю что тред про Си, а не Си++)
Аноним 30/06/26 Втр 21:56:48 #405 №3726742 
>>3726739
А вот конструктор структурки, который проверяет кол-во актуальных бит - его стоит сделать inline. Чтобы если я задаю число бит константой, можно было бы прямо на этапе компиляции отбросить ненужную проверку, и свести код прямо к заполнению нужных полей этой структуры.
В идеале, если никак больше объект структуры не используется, её можно было бы хранить в виде пары переменных. Или вообще - сразу подавать нужные данные на вход вышеобозначенной функции, и ничего не хранить лишнего.
Аноним 30/06/26 Втр 22:14:43 #406 №3726747 
>>3726739
Ну, по сути типичная процедура при энтропийном кодировании. И все же подозреваю что ты пытаешься оптимизировать не там и не то. Можно было бы хотя бы начать с того чтобы входные данные буферизировались и обрабатывались уже небольшими блоками. Наверняка это больший эффект даст.
Аноним 12/07/26 Вск 01:15:07 #407 №3730725 
Я ебал ub
Аноним 12/07/26 Вск 23:31:48 #408 №3730977 
>>3730725
Это оно тебя ебало, петушок.
Аноним 13/07/26 Пнд 03:27:58 #409 №3731000 
Помогите решить задачу
Дана матрица 64 x 64 бит в виде непрерывного массива в памяти.
Надо ее транспонировать и положить в другой такой же массив.
Аноним 20/07/26 Пнд 11:39:59 #410 №3733899 
Как стать Си господином, если даже книжки Столярова для меня тяжёлые, а при виде указателей начинается паника?
anonfm 20/07/26 Пнд 12:25:13 #411 №3733908 
image.png
>>3733899
трай хардить - поставил линукс, накатил vim с fpc и сидишь кодишь без указателей, потом осторожно пальчик в указатели опускаешь, а там уже и второй том не за горами

поменьше на дваче еще сидеть надо, побольше кодить, например: Применить знание геометрии о косинусах и синусах в crt и нарисовать там крутящуюся палочку, для такой программы указатели не нужны, а получается очень прикольно, потом можно и другие геометрические фигуры попытаться изобразить и дать им возможность двигаться
Аноним 20/07/26 Пнд 13:37:38 #412 №3733940 
>>3731000
На каком этапе у тебя проблемы?
>>3733899
>Как стать Си господином
Писать много кода на Си.
Аноним 20/07/26 Пнд 18:04:23 #413 №3734092 
>>3733899
Плохи дела, если указатели - что-то очень сложное для тебя.
Это далеко не самое сложное, что бывает в комп. технологиях.
Вот для меня сложное - это дискретное косинусоидальное преобразование (DCT) в JPEG кодировании. Математика, а никак не сраный язык Си.
Аноним 20/07/26 Пнд 19:43:46 #414 №3734127 
>>3733899
Я Столярова дропал. Читается для меня очень тяжело. Даже вещи что я знаю. Я начинал с Паскаля, учебник Песни о Паскале, а дальше перекат на С легко сделать, языки почти одинаковые по своей сути. Страх и непонятки перед указателями уйдут, как ты сделаешь что-нибудь динамическое. Связный список, или массив, или ещё что-то.
Аноним 21/07/26 Втр 17:38:48 #415 №3734479 
>>3734127
>Страх и непонятки перед указателями уйдут, как ты сделаешь что-нибудь динамическое
Рекомендую вообще не заниматься динамическим выделением памяти, просто объявляй композитные типы и статически выделяй под них память.
Аноним 21/07/26 Втр 18:33:53 #416 №3734497 
>>3734479
Я тебя возможно плохо понял. Что если мне нужен дин. массив, что мне делать? Объявить гигамассив? Но память на стеке она конечная и не очень большая, 20мб или примерно так.
Аноним 21/07/26 Втр 18:49:36 #417 №3734514 
>>3734497
Помнится запускал какую-то хуитку на джаве она сразу забирала пару гигов, если тебе прямо надо то почему нет, ебани соотв. символ в bss?
Аноним 21/07/26 Втр 18:51:18 #418 №3734518 
>>3734497
>на стеке
Статическое выделение памяти это не только лишь стэк.
Аноним 22/07/26 Срд 21:53:51 #419 №3734974 
>>3733940
>Писать много кода на Си.
И еще больше читать
Аноним 23/07/26 Чтв 02:19:15 #420 №3735019 
>>3734974
Как же меня раздражает необходимость читать простыни кода. Особенно говнокода.
Это нихера не лёгкая прогулка - разбирать, что там понаписали эти умники. Я вот было скачал исходники Doom 2. И что, прям вот побежал их изучать? Или может, исходники Python я много читал.
Я Python почитал немножко, да и бросил. Ибо неохота ковыряться в этих дебрях.
Аноним 23/07/26 Чтв 05:19:01 #421 №3735026 
>>3735019
Ну мне в целом похуй. Платят за час работы, а что я этот час буду делать - мне похуй пока платят ставку.

Дадут задачу, подразумевающую изучать легаси кодобазу написанную говнокодером в нулевых? Почему бы и нет, просто займет больше времени чем другая задача
Аноним 23/07/26 Чтв 06:15:21 #422 №3735028 
>>3735026
Ну на работе ещё куда ни шло. Хотя всё равно, приятного мало. Вся эта унылая хуйня, что прям хоть увольняйся.
Нет - есть кенты, что копошатся в чужом коде в своё личное время. И не по работе, а по зову души. Тот же Doom читают.
Меня как-то даже коллега спросил - неужели тебе не интересно, как всё устроено и работает? Это в смысле потому, что можно из интереса даже в свободное время ковыряться в чужом коде.
Нет, для меня издержки превышают профиты. Мне не настолько интересно, чтобы преодолевая себя, ковыряться во всём этом.
Аноним 23/07/26 Чтв 07:57:05 #423 №3735039 
>>3735028
>Меня как-то даже коллега спросил - неужели тебе не интересно, как всё устроено и работает?
Я тоже так спрашиваю. Лично для меня это само собой разумеющееся, что человек, который профессионально заниматься написанием кода, будет заинтересован смотреть на чужой код рано или поздно. Рано или поздно должно найтись то, что тебе будет интересно изучить, по-моему это вопрос времени. Заставлять себя конечно не надо (если это не работа само собой).
Аноним 23/07/26 Чтв 16:43:35 #424 №3735243 
>>3735039
>должно найтись то, что тебе будет интересно изучить, по-моему это вопрос времени
Я чукча не читатель, я чукча писатель.
Да, было интересно заглянуть, посмотреть поверхностно. Но чтобы глубоко копаться? Только может движок Unreal 2004 и ранее, я бы изучил в своё время. Хотел бы, но его исходники не опубликованы.
Аноним 23/07/26 Чтв 16:48:58 #425 №3735247 
>>3735039
Забыл сказать. Муторно это для меня слишком - изучать код, разбираться. Я довольно медленно это делаю. Видел как другие куда быстрее меня соображают, читают. У них больше природной одарённости, чем у меня.
Аноним 23/07/26 Чтв 20:03:00 #426 №3735296 
>>3735243
Старый движок из конца 90-х слит, unreal400.rar вроде. Но оформление кода там так себе.
Аноним 30/07/26 Чтв 17:57:51 #427 №3737821 
>>3735243
Вообще на гитхабе сурцов старых игр и движков из 90-00х хоть жопой жуй, вообще дохуя. Даже под проприетарные платформы типо N64, PS1-PS3 куча всего лежит. Интересно смотреть чем тогда думали разрабы и как они мыслили. Спойлер - нейрохуета иногда даже поумнее этих писак будет. Зато в интернетах каждый первый пишет что умнее нейрохуеты.
Аноним 30/07/26 Чтв 18:17:55 #428 №3737833 
>>3737821
>нейрохуета иногда даже поумнее этих писак будет
Все горазды оценивать качество кода, только вот мало кто принимает в расчёт условия, в которых он писался.
Обосрать говнокод всякий горазд - только вот хрен с два кто представляет, в каком цейноте он писался.
И наоборот - качественный код все любят, но мало кто знает во что он обошёлся.
Аноним 30/07/26 Чтв 18:22:06 #429 №3737837 
>>3737833
Вот приходит челикс на работу. Умный, способный. А тут ему говорят - код нужен ещё вчера. Ну и начинает этот способный хуячить шлак, лишь бы успеть. А потом на его код смотрят и говорят - да ты дурачок, оказывается! Что за код пишешь?!
А если челикс начинает делать качественно - то срывает все сроки. И опять виноват, получается.
И как тут быть?
Аноним 30/07/26 Чтв 18:24:19 #430 №3737838 
>>3737821
>нейрохуета иногда даже поумнее этих писак будет
Помнится, даже Кармака хуесосили, т.к. наваял какой-то параши. Вот буквально, логика работы BFG9000 с пучком лучей - это просто уровень школоты.
Аноним 30/07/26 Чтв 21:04:52 #431 №3737908 
>>3737838
Она изначально другой была, потом по-быстрому заменили.
Аноним 31/07/26 Птн 15:27:50 #432 №3738181 
>>3737838
С крайенжином так же было. Когда в опен-сурс вышел, эксперты с геймдев ру каждый модуль хуесосили. Скайбокс не правильно реализован, ии непрально, то неправильно, это неправильно. Но где крайтек, а где те черти.
Аноним 01/08/26 Суб 10:05:51 #433 №3738483 
>>3738181
Что такое непомерные амбиции и желание сделать всё идеально можно видеть на примере истории разработки Half Life 2. Где они там лет 6 в седьмом поту кранчили. Чуть ли не полкоманды в психушке оказалась. Скандалы, разводы с женами.
Ну просто если всё пытаться делать на клевом уровне - ты будешь разрабатывать игруху вечность. И по деньгам всё обойдется просто космос.
Аноним 01/08/26 Суб 11:38:37 #434 №3738502 
>>3738483
>на примере истории разработки Half Life 2
И в итоге вышло хуже первого фар края, лол, что почти на год раньше вышел.
Аноним 01/08/26 Суб 19:47:42 #435 №3738603 
>>3738181

Крайэнжин, в том виде, каким он был релизнут, действительно крайне костыльный.

>>3738502

Первый фаркрай был хорош новизной песочницы. А так видно, что игра бюджетная. Локации - это набросанный в редакторе кисточкой террайн-слоп. В ХЛ 2 очень старались над уровнями из брашей.
Генетический алгоритм [mailto:[email protected]] stacker320 02/08/26 Вск 11:54:31 #436 №3738714 
Я тут пишу код на Си, хочу поделиться с вами, %username%ы и спросить, почему это говно: https://pastebin.com/HrwVLJj3, код для универсального взаимодействия с различными системами. Немного коричневый. Так то переписываю. Код работал на Arch Linux (Cachy os, если точнее, компилировался в clang)
Аноним 02/08/26 Вск 17:58:56 #437 №3738848 
>>3738714
>почему это говно
По мнению кого?
Генетический алгоритм [mailto:[email protected]] stacker320 02/08/26 Вск 20:10:19 #438 №3738911 
>>3738848
Вообще код писал под воздействием нейросети. Да и сам хуевертил как мог. Сейчас переделываю. Но мне кажется, что оно работало через зад. То есть не работало
Аноним 10/08/26 Пнд 19:11:45 #439 №3742291 
>>3619616 (OP)
Что из себя вообще представляет из себя рантайм C, если компилятор просто переводит текст в набор инструкций под конкретный процессор? Если crt0 просто записывает в память переменные и константы, то как тогда в C++ работают динамик каст и трай-кетч? У C и C++ рантайм -- это просто часть стандартной библиотеки что ли?
Аноним 10/08/26 Пнд 21:21:27 #440 №3742355 
>>3742291
>рантайм C
Операционная система
Аноним 11/08/26 Втр 06:46:41 #441 №3742419 
>>3742291
CRT библиотека - это же код, который реализует все стандартные функции языка Си. Все эти fopen, time, memcpy, malloc, и прочие.
И сей код работает поверх возможностей, предоставляемых операционкой.
Аноним 12/08/26 Срд 11:52:04 #442 №3742960 
>>3724185
>отсюда промахи в кэш ака тормоза в рантайме
так ручная аллокация точно так же будет промахиваться, тебе же последовательные вызовы маллок не гарантируют последовательное размещение блоков памяти
по этой логике и Си будет тормозить в рантайме
Аноним 12/08/26 Срд 14:56:20 #443 №3743050 
>>3742960
Я не о последовательном. При ручном управлении короткоживущий объект умер - ты сразу же это место (и горячие строки кэша) используешь под новый.
Аноним 12/08/26 Срд 15:27:50 #444 №3743057 
>>3743050
Так это только ядро может знать это ты место используешь или не это, ядро же аллоцирует. И плюс новый объект должен идеально поместиться в освобождённое место, потому что там дальше-то занятое место может быть. Насколько я знаю именно поэтому маллок не парится и просто добавляет всегда в конец, то есть работать постоянно в горячей строке не получится, если только ты не сделаешь что-то по типу арены, то есть возьмёшь на себя часть фукнций языка.
Аноним 12/08/26 Срд 15:28:53 #445 №3743058 
>>3743057
Собсвтенно в таком варианте даже в ГЦ языках можно работать только в кэше
Аноним 12/08/26 Срд 17:53:45 #446 №3743134 
>>3743057
>Так это только ядро может знать это ты место используешь или не это, ядро же аллоцирует.
Пчел. Ядро только выдает страницы.
> И плюс новый объект должен идеально поместиться в освобождённое место
Предположим, есть несколько очень частых размеров.
> Насколько я знаю именно поэтому маллок не парится и просто добавляет всегда в конец,
Маллок обычно делит страницу на куски одного размера (16-32-64... или 16-32-48-64...). Выделяет первый свободный на странице или недавно освобожденный. Часто используемые куски памяти не покидают кэш, для них не делается лишний раз writeback.
Аноним 12/08/26 Срд 19:26:12 #447 №3743161 
>>3743134

В прыщах есть легаси вызов brk работающий как стек наоборот.
Аноним 13/08/26 Чтв 04:38:06 #448 №3743296 
image.png
Говорят, что один ученик, прослушав лекцию Кернигана по Си, в конце задал ему вопрос:
- А какая мне будет практическая польза? Что я выиграю, изучив язык Си?
Тогда Керниган позвал помощника-индуса и сказал ему:
- Дай молодому человеку три цента (мелкая монета), раз он непременно хочет получать выгоду из знаний. И хорошего пинка, пусть убирается.
Аноним 13/08/26 Чтв 04:51:04 #449 №3743297 
image.png
В аудитории ВМК МГУ, где преподавал Андрей Викторович Столяров, рядом с доской висела табличка: "Не знающий языка Си да не войдет".
Однажды один студент пожаловался Столярову, что язык Си слишком трудный, он не понимает указатели и путается в макросах. А вакансий на нем почти нет, зато на JavaScript полно.
Доцент Столяров ответил: "Не оскверняй высокую науку приземленными целями. Ею занимаются ради возвышения души, а не ради прибыли"
Re: Размерность sizeof в Си [mailto:[email protected]] Анон 15/08/26 Суб 11:53:28 #450 №3744375 
>>3723912
>Насколько знаю, в стандарте Си, sizeof показывает размер объекта не в байтах!! А в количестве объектов char, которые в искомом объекте могут уместиться. Т.е. тип char является основополагающим.


Ты же в курсе, что char в Си является минимальным размером и обычно при необходимости использовать букву пошире, пишут свой wchar?
В свою очередь байт является минимальным размером данных в Си, но если у тебя слишком много bool, ты можешь закатать их в структуру вот так:

struct {
bool working:1;
bool enabled:1;
bool reset:1;
bool a:1;
bool b:1;
bool c:1;
bool d:1;
uint8_t:1; // reserved, или заглушка, чтоб знать свои пределы и пропускать несклько бит.
} data;
Аноним 15/08/26 Суб 13:41:16 #451 №3744391 
>>3744375
Когда придумывался Си, байт не везде был 8 бит
Так что Си поддерживает типы int, short весьма экзотической разрядности
Аноним 19/08/26 Срд 23:41:43 #452 №3746436 
Может есть тут аноны кто пишет на си/плюсах вейленд-вулкан рендерер?
Никак не могу побороть одну фигню: все работает, но если вынести полл и эвенты либо сабмиты вулкана в отдельный тред то при ресайзе появляется подергивание - это бесит. Ни веейленд ни вулкан ошибок не выдают.
Аноним 20/08/26 Чтв 09:34:14 #453 №3746520 
>>3746436
Да брось ты ерунду, давай лучше фрагментацию обсудим.
Аноним 23/08/26 Вск 06:43:59 #454 №3748166 
>>3746436
То есть, пул в одном треде, а обработчики событий в другом? Как сетевику - страшно стало...

Вообще, не думаю, что на дваче есть люди, писавшие под вулкан.
Аноним 07/09/26 Пнд 23:57:12 #455 №3756270 
Котаны, сам я гошник, в основном системный тулз для программно-аппаратной хрени разной пишу. И периодически, понимаю, что некоторые вещи я бы мог решить на Сebpf, например, хотя там отдельная тема вообще. Или прямое дергание либы, вместо обвязок и/или биндингов/врапперов на го и тп, да и в целом, умение читать С и писать на нем, условный, калькулятор - полезный навык был бы. Да и интересно вообще, С - язык ядра линукса, многих аппаратных контроллеров, являет собой базовую базу без проехавших абстракций.
Посоветуйте литературу, чтобы вкатиться на базовом уровне. Только не талмуд на 1000 страниц, пж.
Про Раст в курсе, но я не хочу вникать в чужую вселенную, С ближе к моей практической области и вряд ли он умрет на моем веку.
Аноним 08/09/26 Втр 01:38:03 #456 №3756309 
>>3748166
Чем ты читаешь чел
> пол и евенты, либо ...
Я это уже решил давно https://2ch.org/pr/res/3675801.html#3746998
Аноним 08/09/26 Втр 03:28:28 #457 №3756335 
>>3756270
в целом бери и спрашивай ИИшку. она распишет что и как.

а с другой стороны... а зачем тебе в принципе сишка и программирование сейчас? все агентами давно делается. и гошка, и сишка.

при этом даже выучив Си на нормальном уровне ты вряд ли сможешь сходу понять что там в ядре линуха происходит. придется агентов подключать. короче лучше сразу с агентами изучай сишный код который тебе нужен, а не учись программированию на си.
[mailto:[email protected]] Анон 09/09/26 Срд 22:25:08 #458 №3757396 
>>3756270
Не знаю, как поступишь ты, но я шёл сверху вниз: сначала я писал аж на python, потихоньку спустился к C++, а оттуда спустился к Си. Заглядываю в ассемблер раз в пару месяцев-лет, но не задерживаюсь, рациональность тут всё-таки побеждает. И нигде никогда не читал талмуды, как минимум по Си. Десяток видео как писать код на языке, затем изучение библиотеки по мере необходимости, а также написание долбанутых по логике проектов. Если хочешь вкатиться в логические операции, то просто напиши библиотеку для сжатых массивов, где размер элемента будет меньше байта. Если нужна математика, то подойди к вопросу деления с остатком и целочисленного деления, отрисовка графического интерфейса в терминале может помочь с размещением, они дают довольно интересные данные, но больше относятся к математике в целом, а не Си. Также советую узнать, где использовать goto, чтоб не превращать свой код в if (!y) { close(x); return 1;} /do something / if (!z) {close(y); close(x); return 1;}, а вообще язык Си - теперь про отречение от красивых, но порой излишних, вещей. Классы в C++ красиво пишутся, в Си же ты не находишь им применения, ведь то же самое можно сделать функциями. Декораторы в Си тоже не нужны, как минимум их воспроизведение приведёт к кровотечению из глаз. А как работают структуры - лучше знать, иначе структура на 7 байт будет занимать 12 (struct {int x; short y; char z;} / 7 байт, но / struct {char x; short y; int x;} / 12 байт /). В конце концов, нужно знать и что такое union и как его применять для распаковки байта в нужные тебе данные.
Аноним 10/09/26 Чтв 03:04:34 #459 №3757457 
>>3756335
Ну про ядро - понятно.
В части нейронки - тоже понятно. Но нейронка отвечает на то, что спрашиваешь + немного сбоку. В литературе, как правило более широко представлено это "сбоку" и делается акцент на какие действительно стоящие тонкости.
А цель у меня простая - читать Си код без словаря, писать со словарем и подсказками нейронки. Понятно, что вместо подсказок можно уже брать готовый код. Но мне так не нравится.
>>3757396
Спасибо за ответ. Посыл у тебя верный - начни писать и разберешься по ходу. Но хочется какой-то фундамент подготовить, что ли. С ним попроще и эффективнее будет, как мне кажется.
Во всяком случае с го это сработало хорошо.

Спасибо, аноны. Попробую Head First C, у O'Reilly эта серия, как правило, адекватная и даёт базовое понимание в нужном объеме.
Аноним 10/09/26 Чтв 17:42:02 #460 №3757896 
>>3756335
ветка с /ai/ находятся через 3 двери, пиздуй туда
Аноним 10/09/26 Чтв 21:47:28 #461 №3758015 
IMG20260910214459354.jpg
>>3756335
литерали ты
Аноним 10/09/26 Чтв 22:17:35 #462 №3758040 
>>3619616 (OP)
Драйвера и софт для дронов писать? На кой оно мне? К тому же в Федерации популярен термин "С/С++ программист" который по замыслу владельца капитала должен работать за двоих получая одну зарплату. Нахуй мне это?
Аноним 10/09/26 Чтв 22:21:30 #463 №3758043 
>>3758040
>который по замыслу владельца капитала должен работать за двоих
Что ты имеешь в виду?
Аноним 10/09/26 Чтв 22:25:55 #464 №3758047 
>>3758015
Так а зачем мне мой мозг, когда эй ай сделает все то же самое быстрее и точнее?

Проблема просто в том, что искусственный интеллект слабо совместим с интеллектом человеческим. Так или иначе долю своего мыслительного процесса мы отдаем ИИ. И с каждым месяцем эта доля все больше и больше.
Аноним 10/09/26 Чтв 22:27:30 #465 №3758049 
>>3758043
Что знание каждого языка требует знаний и навыков, и кучи потраченных на обучение и чтение книжек и на выработку навыков часов. С и С++ это два разных языка, хоть и частично похожих.
Это обычная для идиотов Федерации практика вроде вакансии продавец-поломойщик, попытка заставить одного рабочего работать на 2-5 должностях, за 2-3 рабочих за одну зарплату, в результате все должностные обязанности выполняются плохо. Ну я же говорю, идиоты-скупердяи.
Аноним 10/09/26 Чтв 22:28:21 #466 №3758050 
>>3758047
Да ты не волнуйся AI и за твоим рабочим местом придёт и за рабочими местами твоих детей и твоих внуков.
Аноним 10/09/26 Чтв 22:35:52 #467 №3758055 
>>3758049
Если твоя "экспертиза" сводится к знанию синтаксиса одного языка — у меня для тебя плохие новости.
Аноним 11/09/26 Птн 07:43:04 #468 №3758251 
>>3758040
>К тому же в Федерации популярен термин "С/С++ программист" который по замыслу владельца капитала должен работать за двоих получая одну зарплату.
Нихуя ты политоту приплел на ровном месте. Как же заебали эти душнилы "РЯЯЯЯ, CИ НЕ ПОДМНОЖЕСТВО CИПЛЮСПЛЮС, СИ-СЛЕШ-СИПЛЮСПЛЮС ПИШЕТ ТОЛЬКО НЕОБРАЗОВАННОЕ БЫДЛО, РАЗНЫЕ ЯЗЫКИ ЯСКОЗАЛ".

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

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

И вот если в проекте есть много сложной высокоуровневой логики и много низкоуровневого байтоебства, зачастую безопаснее просто взять C++, местами писать все по последним рекомендациям C++23, а местами как на сишке. Вариант Rust + C + bindgen неоправданно усложняет сборку и навигацию по коду. Писать просто на Rust, и делать все байтоебство в unsafe, тоже до добра не доведет, потому что мы один хуй ныряем в UB и выстрелы в ногу, но с растовским ансейфом целое поколение людей будет повторно собирать все грабли, на которые в сишном коде человечество уже насмотрено и более-менее надежно эти трюки исполняет. Вот и возникает спрос на "C/C++" мутантов. А я и не против, лишь бы платили достойно.
Аноним 11/09/26 Птн 15:05:35 #469 №3758575 
>>3758251
Золотые слова.
Аноним 16/09/26 Срд 14:13:32 #470 №3761019 
>>3758049
>С и С++ это два разных языка, хоть и частично похожих
Если это два разных языкка, то почему код на Си - это валидный код С++?
Аноним 16/09/26 Срд 14:31:03 #471 №3761040 
Screenshot 2026-09-16 at 14.30.03.jpg
>>3761019
Не всегда
Например это валидный с и не валидный c++
Аноним 16/09/26 Срд 15:23:30 #472 №3761089 
cppinits.png
>>3761040
А ты абсолютно точно в этом уверен? Потому что у меня компилируется
Аноним 16/09/26 Срд 15:26:42 #473 №3761090 
cppinits2.png
>>3761040
Аноним 16/09/26 Срд 15:57:29 #474 №3761110 
>>3761089
>>3761090
Зависит от компилятора
clang компилирует но кидает warning, например
MSVC охуевший и не компилирует никак
Аноним 17/09/26 Чтв 16:17:40 #475 №3761648 
>>3761040
Как это работает, ссука??!?!!!11
мимоохуевший-с99-с++ программист
Аноним 17/09/26 Чтв 22:54:12 #476 №3761856 
>>3761648
Это трлько для тривиальнвх типов работает.чтоттебя удивляет пргромист?[/spoiler]
Аноним 18/09/26 Птн 06:44:29 #477 №3761938 
>>3761648
Я не спец, но похоже здесь объявляется массив из 2-х элементов структуры, у которой нет названия типа. Но в которой есть поле "a" в виде массива из 3-х int. И вот этот массив тут на месте инициализируется. Конкретнее - в нулевом элементе, первому элементу массива "a" присваивается значение 7.
А в первом элементе, нулевому элементу массива "a" присваивается значение 9.
Аноним 19/09/26 Суб 08:25:28 #478 №3762606 
Screenshot from 2026-09-18 22-23-52.png
Screenshot from 2026-09-18 22-24-00.png
>>3703251
>Да, ты прав. Как тогда написать char const p, ставя звёздочку около p?
char
const p

СОДЕРЖИТ СЛОВО ИЗ СПАМ ЛИСТА, СЕРЬЕЗНО? КАКОЕ БЛЯДЬ???
Аноним 19/09/26 Суб 08:28:55 #479 №3762610 
Да блядь, еще и с разметкой обосрался! Хули у анона звезда нормально показывается, а я буквально скопипастил в гринтекст, и у меня парсится как италик? Идите нахуй, не буду больше в треде писать.
Аноним 19/09/26 Суб 08:31:22 #480 №3762611 
>>3703251
>Да, ты прав. Как тогда написать char\ const p, ставя звёздочку около p?
char \
const p
Аноним 19/09/26 Суб 08:32:01 #481 №3762612 
ДА БЛЯДЬ
Аноним 19/09/26 Суб 13:36:37 #482 №3762701 
Const char const p;
Аноним 20/09/26 Вск 12:01:40 #483 №3763099 
мужики. когда-то в вузе работал с микроконтроллерами в рамках лабораторных, писал код на си, плюсах, сайты делал и т.д., сейчас уже третий год работаю оператором чпу за зп 80к с ночными в миллионнике (мне 25). хочу из чпу убежать, а тут мне удачно в отделе кадров сказали, что требуется эмбеддед разработчик. шо думаете? зп пока неизвестна. насколько актуально рыпаться в данную сферу в нынешних условиях?
Аноним 20/09/26 Вск 14:02:29 #484 №3763137 
>>3763099
ИИ автоматизировал программирование, в том числе эмбеддед разработку.
Думай сам. Я бы не стал переходить в эту отрасль сейчас и в будущем.
sage[mailto:sage] Аноним 22/09/26 Втр 03:15:06 #485 №3763904 
>>3763099
В эмбеде на микрах будешь получать те же 80, но каждые полгода дрочить мануалы на новый микр, с эрратами на китайском, про которые клауд не знает. В госухе еще и отчеты по суверенному госту писать будешь.
Аноним 22/09/26 Втр 13:57:26 #486 №3764054 
>>3619616 (OP)
Всё неправильно на пике

Ленардо должен быть С++, донотело питон и идти он должен на месте раваеля, который должен быть джавой, а микилянджело должен быть джаваскриптом,
Аноним 22/09/26 Втр 21:56:48 #487 №3764350 
>>3763904
Даже если нейронка ничего не знает про микроконтроллер, просто скармливаешь ей даташит, и она напишет по нему код и заодно ответит на тупые вопросы про этот контроллер.
Аноним 22/09/26 Втр 22:34:27 #488 №3764363 
>>3764350
Скормить нейронке учебник по сопромату и пусть построит дом. А в него поселить ии-хлебцев, навечно.
Аноним 24/09/26 Чтв 23:46:53 #489 №3765546 
bump
Аноним 25/09/26 Птн 03:45:09 #490 №3765573 
>>3764363
«Если бы архитекторы строили дома так же, как программисты пишут программы, первый залетевший дятел разрушил бы всю цивилизацию»
Аноним 28/09/26 Пнд 10:57:57 #491 №3766811 
>>3765573
Увы, архитекторы так и строят дома, что первый залетевший дятел их рушит. Но вместо разрушения цивилизации получаем "пук, серьк, она утонула".
Аноним 18/10/26 Вск 16:30:29 #492 №3779130 
IMG3292.png
>>3765573
>залетевший дятел

https://github.com/torvalds/linux/commit/32c52ec87d6245ee2d12ed5dd509e40062939b50

кекнул от души блять
Аноним 18/10/26 Вск 16:35:03 #493 №3779135 
>>3779130
Блять какой же убогий язык этот си
Аноним 18/10/26 Вск 16:42:44 #494 №3779136 
>>3779135
да
но это не новость
там главный кек это само исправление уровня 50айкю
они б еще блять на index или на i поменяли
Аноним 19/10/26 Пнд 01:23:38 #495 №3779381 
>>3779136
>там главный кек это само исправление уровня 50айкю
>они б еще блять на index или на i поменяли
В смысле? Это вполне конвенциональный подход обяъвлять переменные внутри макроса с префиксом двойное подчеркивание __. Или ты хотел, чтоб он там ради этого фикса поменял интерфейс и весь клиентский код перелопатил?

50айкю у того, кто писал этот макрос до исправления.
Аноним 19/10/26 Пнд 11:40:05 #496 №3779515 
IMG7512.jpeg
>>3779381
>конвенциональный подход
Ну да ну да, идх в макросе пропустили а __и ну точно не пропустят ну никак, КАНВЕНШЫН же... ахаха
>ради этого фикса поменял интерфейс и весь клиентский код
Тебе контекста не хватает коммит с ошибкой посмотреть?
Он и перелопатил там. Надо было вернуть обратно, или назвать переменную __мое_ебаное_хуемакро_i. Вот так было бы хорошо: вряд ли кто-то мог бы случайно такое же имя выбрать, и это бросилось бы в глаза, если бы попытались закоммиттить,

>50айкю у того, кто писал этот макрос до исправления.
Нет, у этого 20 походу.
Аноним 20/10/26 Втр 16:40:27 #497 №3780576 
>>3764363
А ты думаешь не построит? Ну-ну.
Аноним 29/10/26 Чтв 22:21:00 #498 №3786961 
>>3619616 (OP)
найс гит
Аноним 29/10/26 Чтв 22:26:26 #499 №3786963 
>>3619617
>>3619617
найс гит, чувак
Аноним 29/10/26 Чтв 22:28:48 #500 №3786966 
>>3786961
прошу прощения - проебался с коммом. впервые за жизнь двач посетил - ещё не особо понимаю как правильно отвечать на комменты🙏
Аноним 29/10/26 Чтв 22:40:37 #501 №3786971 
>>3758047
ну так просто начни использовать свой мозг? разве в этом есть проблема? просто научиться кодить. сначала псевдокод, а потом уже и спускаешься сначала до Python, потом до Java/C#, потом до C++ потом C, ASM и машинные инструкции, но тут если ты прям хочешь убить свою жизнь ради того, чтобы научиться читать байты памяти едва проснувшись - это скорее для психов...
Аноним 30/10/26 Птн 21:07:01 #502 №3787734 
>>3622932
>дырявым C/C++
ты ведь в курсе, что Rust был написан на OCaml, компилятор и низкоуровневые функции которого целиком и полностью лежат на плечах такого столпа индустрии как C? да. твой любимый растик, "написанный белыми кодерами" был сделан на так ненавистном тебе C. так что твой тейк звучал как "надо прострелить колено моему деду, потому, что он в добром здравии. а ещё его надо захуесосить, потому что он не оставил мне и грамма от наследства." я надеюсь ты только один такой токсичный раст-дев, который пытается выпендриться, не зная того, что без C скорее всего не было бы и твоего любимого растика, создателям которого ты готов жопу лизать круглый год 24/7, потому что без такого синтаксиса ты бы сидел и разочарованно учил что такое указатели, ручной парсинг данных через итерации и буферизацию данных.
Аноним 01/11/26 Вск 20:58:00 #503 №3788801 
>>3766811
чувак, если ты хотел обосраться то у тебя это ещё как вышло. зуб даю - ты даже ни разу не притрагивался к реальным архитектурным проектам. не буду кнчн отрицать что есть долбоебы среди архитекторов и долбоебы среди управляющих, из-за которых разбегаются целые фирмы. но вот скажи - ты сейчас сидишь в своем удобном задроченном кресле в теплом доме и думаешь - "ну надо мне обосраться, да... но на кого? точно бля засру архитекторов, которые сделали так, чтобы я мог их обсирать не на улице, а в своем доме". иначе я не представляю себе эту ситуацию. надеюсь ты троль ебаный🙏
Аноним 06/11/26 Птн 02:03:29 #504 №3791568 
>>3786966
ничего страшного, дружище
Аноним 06/11/26 Птн 02:05:02 #505 №3791570 
ПЕРЕКАТ

>>3791567 (OP)

>>3791567 (OP)

>>3791567 (OP)
comments powered by Disqus