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

Ответить в тред Ответить в тред
Check this out!
C Programming Language #69 /clang/ Аноним # OP 11/05/21 Втр 22:01:37 20278971
C Propaganda.jpg 1965Кб, 2000x2610
2000x2610
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/ https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [​i​] или ∗.

Что читать:

- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2479.pdf (февраль 2020, с диффами)
- Последний черновик ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf (декабрь 2020)

Чем компилировать:

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

Что еще почитать:

http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

https://github.com/kozross/awesome-c

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

Прошлые треды:

- №66: http://arhivach.net/thread/637469/
- №67: http://arhivach.net/thread/667170/
- №68: http://arhivach.net/thread/667171/ >>1958625 (OP)
13/05/21 Чтв 13:28:34 20294762
С мёртв.
Аноним 13/05/21 Чтв 15:16:04 20295733
>>2029476
да плевать, удобнее пока ничего не придумали
Аноним 13/05/21 Чтв 17:06:41 20296604
158785240019478[...].jpg 10Кб, 194x259
194x259
>>2029476
Кыш отсюда, зеленокожий.
14/05/21 Птн 15:30:26 20304785
И тишина...
Аноним 14/05/21 Птн 20:16:29 20308726
>>2030478
Люди серьезные. Си требует дисциплины, отваги, вагона знаний, твердости и четкости ума. Пишутся вещи непростые, для реализации коих требуется и смекалка, и немеренные знания предметной области, изучение лоулевел-программинга — это тебе не паддинги править, сынок, ты тредом ошибся.
Здесь тебе не питонотред или жс, обсуждать целыми тредами примеры из начала сраного byte of python не намерены, здесь люди ебашат K&R в одиночку без лишних вопросов, в их сторону достаточно кинуть парочку книг, все остальное лежит на их плечах, без лишнего пиздежа свое дело сделают.
Аноним 14/05/21 Птн 21:10:10 20309187
aef8059aa591e4f[...].mp4 2546Кб, 576x1024, 00:00:25
576x1024
Анон, вопрос. Мне нужно считывать с микросекндной точностью некий ресурс (размаплен через mmap). Ось типа убунты без рт ядра способна это сделать?

Я хотел делать чтение, останавливать поток на сон (правда, на c++, но итт пацаны знают работу операционки), и через заданный интервал считывать значение заново. Короче, рилтайм. Я знаю, что есть системный high resolution clock, и как-то система потенциально знает, сколько прошло времени.
Аноним 14/05/21 Птн 21:33:11 20309348
Бамп
Аноним 14/05/21 Птн 22:17:36 20309879
>>2030918
Нет, как раз потому что линукс не реалтайм. Он может провести хоть секунду в системном вызове, если захочет, и твой слип сработает гораздо позже, чем ты того хотел бы. Более-менее точно попасть в нужное время ты можешь так: выставить себе приоритет повыше, выставить affinity, и таким образом, отожрав целое ядро у процессора, крутиться в цикле безо всяких снов.
Аноним 15/05/21 Суб 08:26:27 203117810
>>2030987
Хорошо. А есть какой-то подход о блокировке ядра (типа nop вставлять) на известное количество времени, а не тактов, с учётом плавания частоты ядра? Чтобы не выжирал энергию в простое?

Алсо, unix овский nanosleep() тоже не гарантирует микросекундную точность?
Аноним 15/05/21 Суб 09:48:59 203119411
>>2030872
Здесь регистрами фонит по низам.
Аноним 15/05/21 Суб 11:06:30 203123912
>>2031178
Нанослип ничего не гарантирует, он может округлять время вверх. Искользуй цикл с clock_gettime CLOCK_MONOTONIC. Может потребоваться что-то подкрутить в настройках ядра, чтобы таймеры работали точнее.
Аноним 16/05/21 Вск 06:00:15 203194913
>>2031178
Ты spinlock хочешь сделать и не с NOP, а с PAUSE, если речь про xuy86.
Аноним 16/05/21 Вск 23:57:06 203295514
Насколько трудно написать на Си многопоточную программу, подобную многопоточности erlang?
Аноним 17/05/21 Пнд 01:05:31 203299815
>>2032955
Достаточно сложно, если ты хочешь серьезное что-то, а не поиграться. Для начала man setjmp, но вообще есть всякие готовые либы для green threads.
Аноним 17/05/21 Пнд 02:01:33 203301716
>>2032955
>многопоточную
Не нужное говно
17/05/21 Пнд 02:05:41 203301817
>>2033017
>сидауны невер чендж
Аноним 17/05/21 Пнд 02:14:00 203302318
>>2033018
>Больше потоков, Богу потоков111
Аноним 17/05/21 Пнд 03:17:08 203303719
>>2032955

лол, ну если тебе нужна многопоточность в духе эрланга, может тебе прост оэрлангом и воспользоваться?

если нужна сишная многопоточность - гугли pthread, там, в принципе, ничего недоступного нету, есть какая-то старая книжка, есть годный мануал от почившего sun.
чё там, защищаешь общие ресурсы мьютексами, синхронищируешь кондишн-переменными. хуё-моё.
сложность - дело относительное. но многопоточность требует немного иного понимания, иного взгляда, там memory order'ом фонит по низам. Знаешь, один великий спец сказал, что распределённые вычисления есть наука о том, как на нескольких процессорах решить задачу, для которой достаточно одного.
Аноним 17/05/21 Пнд 09:53:13 203311720
image.png 61Кб, 974x774
974x774
Репост из крестового треда, там чот игнорят(

Есть ли разница и как лучше возвращать структуры из функции? Например есть код, в котором мне нужно получить заполненную структуру данных просто struct с переменными. И вот я могу сделать функцию, которая будет возвращать MyStruct/const MyStruct&, или сделать воидовую функцию, которая будет принимать MyStruct& и там его заполнять. Я чёт пытался сам пример себе собрать, но не понимаю до конца, что конкретно происходит с структурами, когда я референсы на них возвращаю из функций? В первых двух вариантах с пикрила в функции и в вызывающем коде адреса у структур разные. Это типа что, на return'е функции структура копируется в памяти и в вызывающем коде референс уже на копию? При этом у struct3 в вызывающем коде адрес такой же, как и в создающей функции
Аноним 17/05/21 Пнд 10:07:47 203312321
>>2033117
Возвращай по значению. В современных крестах возврат оптимизируется по стандарту и функция реально работает внутри с той памятью в которую типа как эта структура вернётся из функции.
Аноним 17/05/21 Пнд 10:46:29 203313722
>>2033017
Нужно, ускоряет выполнение программы.
Аноним 17/05/21 Пнд 15:23:33 203342423
>>2033117
Возврат по значению быстрый только если у тебя размер не больше 8 байт (или 16 для 64-битного кода), и даже в этом случае есть подводные камни. Если тебе нужна скорость - функция с явным указателем/ссылкой лучше, при этом ты можешь заодно еще и статус вернуть нормальным способом.
Аноним 18/05/21 Втр 00:31:18 203403924
>>2033137
>>2033424

чо вы несёте, если компилятору меньше 20 лет, то он оптимизирует возврат любой структуры. это будет почти гарантированно быстрее доступа по указателю. при возврате структуры по значению получается более простая семантика для человека, и для компилятора, второе позволяет лучше делать кросс-оптимизацию. далее, для возврата структуры по значению, ты её наверняка будешь маллокать где-то - дополнительный вызов функции, потенциально кэш-локальность идёт по пизде.
Аноним 18/05/21 Втр 12:24:16 203431925
>>2033117
На самом деле можно писать и так, и так.
Это зависит от того, чего тебе нужно достичь. Если, например, ты пишешь код для сдачи лабораторки какой-нибудь, то пиши так, как в методичке. Если же код для чего-то более серьёзного, то...

Я в подобных случаях смотрю на то, какой смысл у этой структуры данных.
Если это какая-то не очень большая временная структура либо если это какой-то не очень большой математический примитив фиксированного размера (например, вектор или матрица из трёх или четырёх float'ов - частые примитивы в компьютерной графике), то лучше возвращать целиком. Потому что вот такая запись
> mat4 c = Mat4xMat4(a, b)
гораздо приятнее и органичнее, чем
> mat4 c;
> Mat4xMat4(&c, a, b);
А ещё она позволит тебе перемножать много матриц по цепочке.

С другой стороны, если твоя структура олицетворяет собой некий объект "реального мира", даже если она очень небольшая, например, это частичка от огня или взрыва в той же компьютерной графике, описываемая тремя координатами и парой чисел сверху, то тут уже лучше работать с ней как с полноценным объектом.
> particle p;
> CreateFireParticle(x, y, z, &p);
Потому что этот код банально лучше масштабируется, ты можешь дописать к нему в будущем код возврата и тому подобное.

В плюсах есть свои способы сделать это, разумеется: классы, конструкторы, перегрузка операторов и всё такое, но это плюсы. Насчёт оптимизации же - я не думаю, что тебе оно надо, ведь сегодня машины слишком мощные, чтобы печься о каждом такте. А даже если и надо, то при вменяемых ключах оптимизации современный компилятор всё равно подставит (inline) твою короткую функцию куда надо, и разницы в производительности не будет в принципе.
Аноним 18/05/21 Втр 15:22:35 203457526
В хуях 86 gcc даже без флагов оптимизации вызываемая функция будет писать в структуру на стеке вызывающей функции, если структура большая. А чё стандарт говорит?
Аноним 18/05/21 Втр 15:29:04 203459127
>>2034575
стандарт ничего не говорит про детали реализации
Аноним 18/05/21 Втр 16:42:25 203472728
>>2027897 (OP)
Порекомендуйте oss статический анализатор, а то у меня ад выбора.
19/05/21 Срд 10:42:28 203538229
>>2034575
> даже без флагов оптимизации вызываемая функция будет писать в структуру на стеке
А ты и рад.
19/05/21 Срд 10:43:21 203538330
>>2034727
> Порекомендуйте oss
?
Аноним 19/05/21 Срд 15:36:34 203558131
Аноним 19/05/21 Срд 21:02:59 203583732
>>2027897 (OP)
Анонасы, кто умеет в OpenMP, нужна ваша помощь. Можно ли каким-то образом "открепить" паралельную секцию от основного потока и, не дожидаясь её завершения, продолжить выполнение дальше?
Аноним 19/05/21 Срд 23:09:27 203596933
Аноним 20/05/21 Чтв 01:45:14 203607334
>>2034727
Очевидный cppcheck же, не? С ключами по типу
> --enable=warning,style,performance,portability

Единственное - не совсем очевидно отключаются предупреждения там, где он выдаёт ложное срабатывание.
Аноним 20/05/21 Чтв 15:40:03 203663035
Вопрос может звучать максимально глупо, но ведь нормально и полезно использовать unsigned short int/uint16_t и uint8_t, а не int, если в моём коде переменная гарантированно будет принимать только беззнаковое значение соответствующего размера? А то смотрю на чужой код, читаю различные туториалы/статьи и вопросы на SOF, и всем как будто похуй, что они тратят память впустую.
Структуры Аноним 20/05/21 Чтв 18:05:49 203688736
image.png 30Кб, 391x632
391x632
Привет, ребят. Сразу говорю за программирование не шарю, просто по инфе нужно лабу со структурами сделать.
Сама суть задания, с помощью структуры найди самую старую книгу и сколько книг из области физики
Аноним 20/05/21 Чтв 18:14:07 203690137
>>2036887
забыл указать проблему :) не работает счётчик count
Аноним 20/05/21 Чтв 18:31:23 203692638
>>2036901
Ошибку нашел, там изи, ответ в личку отправил
Аноним 20/05/21 Чтв 22:26:33 203706639
>>2036630
Почему нет - используй на здоровье.
Но есть одно "но", а именно - выравнивание.
> struct s {
> uint8_t a;
> uint32_t b;
> };
Занимает в памяти не 5 байт, а 8. Это происходит из-за того, что процессор умеет обращаться к переменной b только если её адрес можно поделить на 4. В связи с этим после переменной a компилятор тебе добавит три байта, которые не будут использоваться в принципе. Ты можешь легко проверить это в духе:
> printf("%lu\n", sizeof(struct s));
Примечание: x86 может работать с невыровненными данными, но медленнее, из-за чего по умолчанию выравнивание всё равно применяется. А другие архитектуры могут тебя с такими запросами вообще напрямую послать, выдав address error и отказавшись работать.

>>2036887
> if (p.obl == 'Физика')
if (!strcmp(p.obl, 'Физика'))

>>2036946
Катись к хуям.
Аноним 20/05/21 Чтв 22:30:21 203706840
+
Аноним 21/05/21 Птн 01:35:34 203713641
>>2037066
> Примечание: x86 может работать с невыровненными данными, но медленнее, из-за чего по умолчанию выравнивание всё равно применяется.
Разница в бенчах на x86 была почти незаметна, а сейчас и вовсе сошла на нет:
https://lemire.me/blog/2012/05/31/data-alignment-for-speed-myth-or-reality/
Про armv8a тоже пишут, что в большинстве случаев разницы нет:
https://www.nxp.com/docs/en/application-note/AN12628.pdf
Кроме поддержки simd смысла выравнивать уже как-то и нет.
21/05/21 Птн 09:10:14 203720142
>>2036630
В структурах (если экономишь память) - да. Если хочешь переполнение по модулю 2n- тоже можно. В остальных случаях нарвешься на сравнение знакового с беззнаковым или внезапно неэффективный код.
Аноним 21/05/21 Птн 11:10:39 203727943
image.png 107Кб, 1079x778
1079x778
image.png 60Кб, 989x690
989x690
>>2027897 (OP)

Сап сисеры. На связи бумерок, надрачивающий на олдфажные игори. Занимаюсь моддингом Return to castle Wolfenstein. Столкнулся с тем, что на современных компах игра вылетает частенько в процессе загрузки миссии из сохранения (если загрузка происходила во время игры). Отловил в Оле. Пишет якобы access violation. Но схуяли там пустая переменная, если в норме этот код постоянно работает? Предполагаю, что это связано с тем, что в ходе завершения миссии игры из памяти выгружается много переменных, а из-за криворукости кодеров, какой-то параллельный поток на быстрых компах успевает снова попытаться прочитать уже выгруженную переменную.

Исходник есть. Место локализовано. Строка 84. Чтение одной из этих переменных во время выгрузки миссии приводит к крашу.

Вопрос собсно такой: как это лучше всего пофиксить? Не хочется отрубать функцию полностью. Как программно предотвратить access violation на уровне сишного кода? Есть ли аналог try-catch? Или не поможет????
Аноним 21/05/21 Птн 11:11:15 203728044
image.png 5Кб, 409x25
409x25
Аноним 21/05/21 Птн 11:47:20 203733845
>>2037279
volatile xxx @gp = client->gentity
if (gp && gp->debil)
Аноним 21/05/21 Птн 11:51:52 203734446
>>2037279

ну по честному, наверное, стоит добавить семафорчик, если ты правильно описываешь ситуацию, заблокироваться перед чтением, пока не подгрузится корректный объект.
Аноним 21/05/21 Птн 12:04:25 203736047
>>2037338
Ну чего ты обзываешься-то сразу? Ну не знаю я толком С. А за совет спасибо
Аноним 21/05/21 Птн 12:08:23 203736648
>>2037360
Тип короче надо нормально пгавить, почему не написать автору подробный bug report?
Аноним 21/05/21 Птн 12:24:35 203738149
image.png 123Кб, 1525x766
1525x766
image.png 10Кб, 727x141
727x141
Аноним 21/05/21 Птн 12:37:48 203739550
>>2037381
Ну кстати, gentity не равно 0. Придется включить мозг и смотреть, кто выставляет gentity, а потом освобождает память.
Аноним 21/05/21 Птн 12:45:47 203740351
image.png 21Кб, 942x242
942x242
>>2037395
А вообще мне вот от чего бомбит. Там выше по коду на 77 идёт чтение точно тех же самых переменных и почему-то они не вылетают. Как это возможно???
Аноним 21/05/21 Птн 12:51:09 203741252
>>2037403
А блядь нет, извините, понял. Та проверка сразу не прошла по первому условию
Аноним 21/05/21 Птн 13:38:13 203745253
cb7.png 311Кб, 525x394
525x394
>>2037136
> Разница в бенчах на x86 была почти незаметна, а сейчас и вовсе сошла на нет
О как.
Значит, мои данные слегка устарели.

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

Но это уже такое. Больше теоретическое, нежели практическое.
Аноним 21/05/21 Птн 14:04:43 203748554
>>2037279
>>2037381
Дело не в многопоточности, как я понимаю.
Шанс того, что в условии
> if (g && g->something)
произойдёт переключение потоков сразу после проверки g, но перед g->something, ничтожно мал, никак не "частенько". И действительно, глянь в отладчике, у тебя там [EAX+248], но при этом в EAX лежит нифига не ноль.

Вероятно, в client->gentity лежит какой-то мусор.
Я бы проверил, инициализировано ли это поле, и не испорчено ли оно где-нибудь.
Аноним 21/05/21 Птн 14:59:03 203754055
>>2037485
Мне конечно стыдно спрашивать, но как проверить инициализированность поля не читая его???
Аноним 21/05/21 Птн 15:29:17 203760156
>>2037540
Ты должен смотреть, чтобы у тебя неинициализированных полей в программе вообще не было.

Но, как мне кажется, у тебя дело в том, что где-то gentity портится. Может быть, в другом потоке, или в твоём же.
Либо память, на которую ссылается gentity, была уже где-то освобождена, но в NULL поле gentity после free() установлено не было.
Аноним 21/05/21 Птн 17:06:53 203770957
>>2037601
Блин. Ну правда, я не знаю как это делать безопасно, я никогда не кодил на чистом С.

Вот там есть несколько подполей.

gentity
gentity->r
gentity->r.svFlags

Как последовательно каждое из них проверить на инициализированность без риска получить вылет????
Аноним 21/05/21 Птн 17:21:22 203773058
>>2037709
Выясни, кто и как выставляет gentity. Это указатель на что-то.
Аноним 21/05/21 Птн 17:21:58 203773159
>>2037709
Ты фигнёй маешься, бро.
>как проверить инициализированность
В общем случае на твой вопрос ответ - никак, если речь про указатели, то обычно проверка против 0. Пиши отчёт автору, ну или кинь ссылку на исходники, у тебя там выше анон правильно сказал, что некий use after free (судя по виндовому сообщению) как минимум.
Аноним 21/05/21 Птн 17:24:17 203773460
image.png 26Кб, 346x763
346x763
>>2037730
Ты с ума сошёл? Это компьютерная игра. Там десятки тысяч строк. client это указатель на протагониста, а gentity - на его состояние. gentity меняет чуть ли не каждая воида во всех проектах.

>>2037731
>кинь ссылку на исходники
лови
https://github.com/id-Software/RTCW-SP
Аноним 21/05/21 Птн 17:42:47 203776061
Ddd
Аноним 21/05/21 Птн 19:06:19 203786462
>>2037734
Почитал немного есходнегов, там вообще global entities статическое хранилище, проверь, что указатель client живой, отпиши и дальше подумаем.
Аноним 21/05/21 Птн 19:11:28 203787063
Аноним 21/05/21 Птн 19:13:05 203787364
>>2037870
Ну тип сделай лоад по этому адресу, посмотри будут ли пинки от ос, заодно, да, проверь чё там по значению.
Аноним 21/05/21 Птн 19:14:53 203787565
Хотя ладно там выше client->state. Ну хуй знает, анон, а ты вот пишешь, что модишь, чем ты мог обосрать работу посконного кода?
Аноним 21/05/21 Птн 20:09:12 203794166
>>2037875
Я не обсирал. Оно само стало обсираться. Вообще-то я там итак нихуёвый баг изначальных разрабов в своё время пофиксил
Аноним 21/05/21 Птн 20:33:38 203796667
>>2037941
Я ещё завтра на более свежую голову гляну, если не отпишу - ничего не нашёл. А так, пиши в спортлото автору.
Аноним 21/05/21 Птн 21:51:55 203803768
>>2037966
Надеюсь на тебя хуле. Потому что в Id Software мне скорее всего у виска покрутят.
Аноним 24/05/21 Пнд 19:53:52 204163469
Аноним 24/05/21 Пнд 21:23:46 204173870
Screenshot20210[...].png 1Кб, 580x116
580x116
тредом ниже грозился взяться за бутстрап. и неделю назад дошли лапки. всю эту неделю тупа курил маны, статьи на осдев, так как почти нихуяшеньки не знал, тем неимение за это время узнал об архитектурах больше, чем за пару лет вузика. и вот первые успехи уровня /пр на пикриле если нажать ку, то пека и правда вырубится
далее буду учить стартовый буткод распозновать сигнатуру лини и попробую загрузить бут ядра.
асло если кому-то понадобится - http://www.ctyme.com/rbrown.htm (тут всё "апи" бивуса).
Аноним 25/05/21 Втр 20:39:11 204294271
>>2041634
Как починил? Я выше дропнул смотреть, когда увидел, что там код виртуальной машины, возможно, ебашит не туда.
Аноним 26/05/21 Срд 07:01:25 204330272
>>2042942
Это функция отправки сообщений клиентам сервера. Смысл проверки (gentity->r.svFlags & SVF_CASTAI) в том, чтобы выяснить, является ли данный клиент ботом. Потому что ботам отправлять сообщения не нужно, и поэтому нужно сделать continue. Но у нас сингл-плеер игра, т.е. на сервере могут быть либо боты, либо протагонист. Я нашёл, что отличить игрока от бота можно ещё одни способом. В структуре gentity есть поле name в котором хранится имя клиента и оно всегда инициализировано. Я сделал проверку, что если gentity->name равно WolfPlayer (так сервер называет протагониста), то вот эту ёбаную проверку на вылетающем r.svFlags я перепрыгиваю.
Аноним 27/05/21 Чтв 20:47:40 204559373
>>2041738
Тоже вкатываюсь в осдев, сделал вывод для себя что асм в пользовательском пространстве даже рядом не стоял с асм в режиме ядра. Если будут какие успехи пиши тут, интересно понаблюдать до чего дойдешь, а лучше линк на гитхаб с своим загрузчиком скинь
Аноним 29/05/21 Суб 18:47:31 204827974
>>2029476
Си живее всех. Это скорее русскоязычное сообщество мертво. Это и не удивительно, что с такой культурой дискуссии все давно разбежались по англоязычным платформам. Зашёл тут на /pr/ со скуки, а тут Си-тред валяется в самом конце, при этом в топе JS, бугурт-тред и чьё-то нытьё. Позорище.
Аноним 29/05/21 Суб 19:24:44 204832975
>>2048279
А я помню времена, когда тут постоянно апался ассемблер-тред.
Мда, доска реально выродилась, причем за последний год.
Аноним 30/05/21 Вск 16:17:53 204928576
>>2048329
>А я помню времена, когда тут постоянно апался ассемблер-тред.

Он был довольно активным, просто в бамплимите.
Аноним 31/05/21 Пнд 12:03:08 205033677
>>2041738
> если нажать ку, то пека и правда вырубится
Через APM небось? А то он немножко сдох уже.
Аноним 31/05/21 Пнд 22:20:27 205129178
51AFPem-MlL.SX3[...].jpg 35Кб, 379x499
379x499
Как вам пикрелейтед?
Аноним 31/05/21 Пнд 22:58:31 205133379
>>2051291
А ты точно тредом не ошибся? Поверхностно, слегка устарело, но лучше, чем ничего.
Аноним 01/06/21 Втр 21:15:33 205247180
image.png 15Кб, 608x314
608x314
image.png 3026Кб, 2145x3034
2145x3034
Аноны, всем привет. Я вкатываюсь в си и офк первым делом полез в >The C Programming Language
Но не старая ли она в 2021? Например пикрил, сейчас же пишут int main(), да и компилятор ошибку выдавал когда я без инта вводил. И таких примеров я заметил несколько за первые 100 страниц.
Мнение тредика какое? Мб стоит схавать для начала пикрил 2? >C Programming: A Modern Approach
Аноним 01/06/21 Втр 21:16:44 205247681
image.png 104Кб, 961x692
961x692
>>2052471
фикс пикрил 1, вот что в >The C Programming Language
01/06/21 Втр 21:31:44 205249782
>>2052476
Это старый стандарт, там int считался дефолтным, поэтому его можно было не писать. Если очень надо, то посмотри доки к компилятору, там должно быть написано про включение поддержки старых стандартов.
>Но не старая ли она в 2021?
Сам язык в 2021 году старый.
Аноним 01/06/21 Втр 21:55:03 205254183
>>2052497
>Сам язык в 2021 году старый.
Ну хз. Всяко отличный для вката. Ассемблер я уже чуть познал, так что си кажется раем.

Мой вопрос был про актуальность книги и ты на него ответил, так что спасибо и удачи. Я мухожук
Аноним 01/06/21 Втр 21:56:37 205254884
>>2052476
Возьми второе издание книги там уже все нормально по стандарту
Аноним 01/06/21 Втр 22:20:21 205260385
>>2052548
А где его укасть можно? На флибусте только это вроде бы
Аноним 01/06/21 Втр 22:34:59 205262186
>>2052603
А нет, оказывается во втором издании ничего не поправили, почему-то думал что там все нормально
По С кстати есть годный короткий плейлист от Хирьянова https://www.youtube.com/playlist?list=PLRDzFCPr95fLjzcv6nNdjMu_9RcZgIM9U, тут не только сам Си но и смежные к нему области вроде алгоритмов, теории компиляции рассматривают
Аноним 02/06/21 Срд 09:46:05 205281987
Аноним 02/06/21 Срд 09:50:47 205282488
>>2052819
легаси формат реализации функции
Аноним 02/06/21 Срд 09:52:09 205282589
>>2052824
И как оно работает?
Аноним 02/06/21 Срд 09:53:02 205282790
>>2052819
Реализация функции по старому стандарту языка
Аноним 02/06/21 Срд 09:53:36 205282891
Аноним 02/06/21 Срд 10:28:20 205285392
>>2052621
Да, я его тоже смотрю. Спасибо тебе!
Аноним 02/06/21 Срд 10:52:20 205287793
Аноним 02/06/21 Срд 23:56:59 205424394
Можно ли написать бэкенд для веб-приложения на чистом Си?
Аноним 03/06/21 Чтв 00:33:30 205426495
luch-dobra.jpg 37Кб, 600x513
600x513
>>2045593
>сделал вывод для себя что асм в пользовательском пространстве даже рядом не стоял с асм в режиме ядра.

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

>Если будут какие успехи пиши тут, интересно понаблюдать до чего дойдешь,

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

В /бут/ ? Тогда потребуется вскрыть файловую систему на разделе, загрузить соответствующие дровишки (опять же, откуда?) и уже через них искать бинарь со вторым стейджем; причем все эти действия могут и не уместиться в 446 байт.

Есть правда такая штука, VBR (volume boot record), то же что MBR только на разделе, а не на диске. В ней же инфа о файловый системе. Можно делать следующим образом:

1. смотрим следующий раздел
2 если он активен, тупа (как БИОС) грузим его VBR в другую локацию и передаем контроль туда
3 смотрим файловую систему
4 смотрим 2stage грузим его и благополучно передаем контроль
Если что-то не так - откатываемся к п.1 (т.е. возврат к 1 стейджу)

Но во-первых согласно osdev, VBR "не совсем стандартен".
И во-вторых, прописаться в этот верхний кусок раздела во время инсталяции возможно тоже не самая адекватная идея.

Одним словом подсказки бы не помешали.


>>2050336
>Через APM небось?
Через ACPI. А если честно, то нужный int на стэк-оверфлоу нашел и просто копировал наудачу. Асло где-то слышал, что ACPI - точное надмножество над APM.
Аноним 03/06/21 Чтв 11:16:50 205448296
>>2052819
>somebody's printing up packets!

что-то проиграл. неужели такое возможно.
Аноним 03/06/21 Чтв 12:27:24 205464997
>>2054243
На чистом с++ легче.
Аноним 03/06/21 Чтв 12:33:33 205466598
Анон, подскажи тупому:
Есть условие

if (click==3)
{
x=y+10
}
Как мне увеличивать значение х на 10 при каждом выполнении условия click=3? Обернуть это дело в цикл?
Аноним 03/06/21 Чтв 12:47:00 205469699
>>2054243
>>2054649
Поздравьте меня, анончики. Я на днях принял пиздатый job offer. Буду работать с бэкендом на C++.
мимо анон без опыта
Аноним 03/06/21 Чтв 15:11:24 2054946100
>>2054665
if (click == 3)
{
x += 10; / или x = x + 10 /
}
Аноним 03/06/21 Чтв 19:02:00 2055443101
>>2054696
Поздравляю, анон.
Пили кулстори.
Аноним 03/06/21 Чтв 19:05:47 2055452102
>>2052471
Новый стандарт Си не так чтобы очень сильно отличается от старого. Это же не плюсы, где наворотили кучу хипстерских приблуд.
Аноним 04/06/21 Птн 21:16:48 2056966103
https://pastebin.com/6y2Pwj8e

В чём проблема помимо моей необучаемости? Как сделать, чтобы всё работало так, как я хочу? Нужно, чтобы внутри программы test существовал объект (или ссылка на него) foo_list из моей библиотеки без его явной декларации (чтоб красиво было), состояние которого можно было бы менять через соответствующие функции. У меня, насколько я понимаю, получается, что он где-то в загруженной в память библиотеке существует без возможности его изменения.
Я в C полный нуб, сильно палками не бейте.
Аноним 05/06/21 Суб 17:58:32 2058123104
Сообщение в день. Даже для форумов это кисло.

Подскажите, каким образом можно на си+линукс реализовать такой обработчик сигналов извне (наподобие прерываний), который бы обрывался на следующем приходящем сигнале?

Я попробовал через signal(..) - получилось, что он ждёт полного выполнения кода обработчика, что неприемлемо. Однако выгружать программу нельзя - просядет производительность из-за сервисных издержек.
Аноним 05/06/21 Суб 18:00:20 2058126105
К тому же нужна вся обвязка. Обработчик не должен заново инициализировать кучу таблиц и т. п.
Аноним 05/06/21 Суб 20:58:25 2058422106
Как отправить udp сообщение всем в указанной ip?

Мне нужно, чтобы клиент отправил всем строку, а сервер, прочитавший и понявший, что это к нему стучатся, начал общение.
Вот, но я не понимаю, как это широковещательное сообщение от клиента отправить.
Аноним 06/06/21 Вск 08:36:28 2058807107
>>2058422
Блин, может я чего-то недопонял.
Это за тебя уже придумали, отправляй на широковещательный адрес твоей сети, это самый последний адрес в сети, но он вычисляется в зависимости от маски. Проще воспользоваться сетевым калькулятором.
Например - https://ipcalc.co/ вставляешь какой-то адрес из твоей сети вместе с маской, в результате смотришь broadcast.

Если тебе нужно отправить в другую сеть, то там уже нужна маршрутизация, маршрут до другой сети прописывается на роутере.
Аноним 06/06/21 Вск 17:13:50 2059409108
Аноним 06/06/21 Вск 20:51:50 2059845109
1620668565000.jpg 135Кб, 532x558
532x558
Анон, если код часто работает с файлами через стандартную либу, то нужно постоянно проверять эту работу (на количество прочитанных/записанных файлов, возврат ошибочных значений)?
Аноним 07/06/21 Пнд 10:30:04 2060217110
Аноним 07/06/21 Пнд 11:23:30 2060261111
Аноним 07/06/21 Пнд 13:34:42 2060481112
>>2060261
Из-за компактности и совместимости.
Аноним 07/06/21 Пнд 18:39:23 2060914113
>>2059845
Даже если не часто, а всего один раз и всего лишь на полшишечки — возвраты надо проверять у любой функции, которая может закончиться не очень успешно.
Аноним 10/06/21 Чтв 12:16:21 2064088114
>>2052497
Старый то старый, но до сих пор активно используется минимум в паре сфер.
И, помимо этого, есть еще куча аматоров в Linux и MCU (настоящих MCU аматоров, не соевых письтеров пердуинщиков), которые этот самый язык юзают.
Аноним 10/06/21 Чтв 22:42:13 2064725115
>>2054264
> А если честно, то нужный int на стэк-оверфлоу нашел
Значит через APM.

> ACPI - точное надмножество над APM
Никаким местом. Мало того, на новых компах, особенно ноутах, CSM в APM не умеет. Есть только APM installation check, который говорит, чтобы ты шел нахуй.

> 446 байт
У нас EFI давно, на разделе дохуя места под любой лоадер, который ты только можешь себе вообразить.

Аноним 11/06/21 Птн 16:33:19 2065475116
image.png 117Кб, 600x450
600x450
Аноним 11/06/21 Птн 17:19:04 2065540117
>>2064088
Плюсую тебя. Ещё добавлю, что половина софта в обычном дистрибутиве GNU/Linux точно написана на Си. И разные *bsd системы тоже сюда же.
И эти вещи кто-то поддерживает, и софтины по типу mesa, wine, которые цветут и развиваются. А значит и какой-никакой спрос на толковых разработчиков на Си будет.
Аноним 11/06/21 Птн 17:20:10 2065542118
ну судя по условию тебе нужно написать как кинул этот анон -> >>2054946

А зачем переменная "y" тут?
Аноним 12/06/21 Суб 04:18:31 2066014119
C на первом месте, пиздос и вакансий как на яву, если выбросить мусор, а может еще больше.
https://habr.com/ru/company/skillfactory/blog/531360/
Я конечно понимаю, по сравнению с убогим C++ сишка ахуенна да и вообще низкоуровневый язык.

Как у вас тут дела, что программируете, работаете ли?
Одно огорчает, что в вакансиях обязательно всякий мусор, как вышка и знания ОПП(его вообще кто-то не знает?). Зато все такие тру программисты. Выделяете память, следите за ядром линукса, работаете с системной поебенью и костылями.

Мимо зашел студент год назад бросил c++, начал учить джаву
Аноним 12/06/21 Суб 23:50:14 2066677120
>>2066014
>Как у вас тут дела, что программируете, работаете ли?
Переписываю сейчас один микросервис с питона на Сишечку. Вообще-то кабанчик хотел С++, но я ему по красоте пояснил, что плюсы там как собаке пятая нога.
Аноним 16/06/21 Срд 22:12:14 2070708121
72834478p0.jpg 731Кб, 1920x1080
1920x1080
Анон, нужна твоя помощь.

- Поступает информация потоком (с файла или с клавиатуры).
- Из этой информации нужно извлечь только double, а прочий мусор игнорировать
- Триггер прекращения чтения: EOF или последовательность символов "end"

Как реализовать это более элегантно?

Вроде бы ничего сложного, можно читать даблы с помощью fscanf'a, но всё портит "end" который нужно детектить чтобы прекратить чтение
Аноним 16/06/21 Срд 22:59:39 2070749122
>>2070708
>всё портит "end" который нужно детектить
Ну так детекти. В чем конкретно проблема?
Аноним 16/06/21 Срд 23:14:25 2070770123
Аноним 16/06/21 Срд 23:24:41 2070781124
>>2070708
Ты лучше расскажи, как ты fscanf'ом мусор игнорируешь?
Аноним 17/06/21 Чтв 19:59:40 2071681125


ребят помогите пожалуйста. Нужно понять как реализовывать односвязные, двусвязные списки на СИ. Что это такое и как они работают примерно разобрался. Но вообще не понимаю с точки зрения кода. Как создать, добавить и т.д.?
Аноним 17/06/21 Чтв 20:21:33 2071693126
>>2071681
Дейтелов кочай. Там все есть.
А на пальцах объяснять долго.
Аноним 17/06/21 Чтв 20:23:37 2071695127
>>2070708
>EOF или последовательность символов "end"
А что такое собственно символ "end"?
Аноним 17/06/21 Чтв 21:39:38 2071751128
>>2071695
не символ, а последовательность то есть { 'e', 'n', 'd' }
Аноним 18/06/21 Птн 00:35:59 2071954129
Мышь
Аноним 18/06/21 Птн 01:02:58 2071985130
>>2071751
Если ты тот анон, то начинай отвечать на наводящие вопросы >>2070781
Аноним 18/06/21 Птн 01:07:39 2071988131
>>2071751
Ну значит юзай fgetc и считывай посимвольно.
Навряд ли что-то еще можно придумать.
Аноним 18/06/21 Птн 01:41:57 2071996132
Аноним 18/06/21 Птн 10:57:58 2072134133
download.jpg 44Кб, 400x524
400x524
https://learning.oreilly.com/library/view/smaller-c/9781098100322/
Понравилась мне идея подучить си, балуясь с железками, а то просто так неинтересно после высокоуровневых языков.
Там тип рекомендует девборды от каких-то американских хипсторов, но они за любую хуйню дерут втридорога. Я посмотрел на али, там полно копеечных штук и досыпают ведро всяких проводков, лампочек и датчиков заодно.
Но хуй знает, что конкретно брать. Есть у кого опыт?
Аноним 18/06/21 Птн 13:49:11 2072329134
>>2072134
Чем тебе arduino не угодил?
Аноним 18/06/21 Птн 15:46:51 2072500135
eflb15ugb9k61.png 174Кб, 711x658
711x658
>>2070708
Если речь идёт именно про элегантность, то подобные вещи лучше всего решаются при помощи конечного автомата.
Погугли, что такое конечный автомат и как он работает.
Это прямо то, что тебе нужно.

Разумеется, реализация КА довольно массивная, и если тебе это нужно на один раз, то проще и впрямь через fgetc() сделать и пару костылей.
А если у тебя такие задачи возникают постоянно, подумай о том, чтобы подключить библиотеку регулярных выражений.
Но самое элегантное решение, на мой взгляд - это конечный автомат.
Аноним 18/06/21 Птн 18:06:28 2072649136
>>2072329
Там и этих оригинальных ардуино дохуя на разных архитектурах, а клонов в сто раз больше. Как выбрать?
Аноним 19/06/21 Суб 02:02:52 2073227137
>>2070708
Я бы предложил построчно читать и парсить строки (fgets). Проверяешь (switch) на 'e' -> проверяешь (strncmp) на "end"; проверяешь на цифру, плюс, минус, точку -> делаешь strtod, он либо вернется с ошибкой, либо даст новый указатель; если что-то сфэйлилось, инкрементишь указатель. Будет одновременно читабельно и не слишком медленно.

>>2072134
На девборде уже все распаяно, отлажено и документировано. Периферия именно та, с которой ты захочешь поиграться (экранчики, тачи, кнопочки-крутилки и светодиоды, само собой). У китайцев нормальных отладок с периферией нет, будешь собирать на dupont-кабелях с бредбордой и гадать, почему у тебя не заводится - то ли контакт плохой, то ли модуль тебе дохлый прислали, то ли подключил не туда или не так (нужен какой-нибудь подтягивающий резистор, а ты проглядел), то ли дело все же в коде. На первых порах такое часто встречается. В первом варианте ты получаешь удовольствие, во втором - опыт.

>>2072649
А что в книжке советуют? Вот подобное и ищи.
Аноним 19/06/21 Суб 07:12:14 2073284138
Хакеры нефтепроводов, можно ли такое макро сделать:

Допустим есть вызов макроса

M(1,5);

Можно ли
#define ARG 1,5

M(ARG)

Или каким то другим образом замакрить пару параметров.
Хорошо бы это паре одно имя.

Аноним 19/06/21 Суб 20:30:46 2073932139
>>2048279
Да нет, решение уже принято. Все корпорации активно начали топить против Си. К 2025 Си станет нишевым языком для энтузиастов, а к 2030 отомрет вовсе.
Аноним 19/06/21 Суб 20:33:51 2073935140
>>2073932
Даун, просто съеби из треда, ок?
Аноним 19/06/21 Суб 20:54:37 2073948141
Аноним 19/06/21 Суб 22:21:44 2074028142
>>2073284
Можно, разрешаю.

>>2073935
> К 2025 Си станет нишевым языком для энтузиастов, а к 2030 отомрет вовсе.
Да он прав тащемта. Си никогда не был хорошим языком, а сейчас он к тому же устарел и плохо подходит для современной разработки. Даже на микроконтроллерах его активно вытесняют. Исправить Си нельзя, не сломав совместимость, без совместимости он нахуй никому не нужен. Но к обеим датам лет десять я бы смело прибавил.
Аноним 19/06/21 Суб 22:33:12 2074033143
>>2074028
Тебе же по-русски вроде сказали, съеби из треда.
Что не понятного-то?
>>2074028
>Можно, разрешаю.
Еще и жалкие пуки свои тут оставляешь, олень.
Аноним 20/06/21 Вск 00:08:48 2074093144
>>2074028
>Си никогда не был хорошим языком, а сейчас он к тому же устарел и плохо подходит для современной разработки.
А что тогда хороший язык для этих целей? Я думаю, что Сишка даже условный раст переживет, который через пару лет на мусорку отправится.

>Даже на микроконтроллерах его активно вытесняют.
Это чем же? Питоном, жабаскриптом, растом? не смеши пожалуйста.
Аноним 20/06/21 Вск 00:43:16 2074114145
>>2074093
> Питоном, жабаскриптом, растом
Да, да и да луа забыл, лол. А главным образом крестами.

> Сишка даже условный раст переживет, который через пару лет на мусорку отправится
Вот это как раз очень возможно. Хотя про пару лет ты загнул.

> А что тогда хороший язык для этих целей?
Это такой, в котором чуть меньше UB, чуть больше неймспейсов и есть что-то хотя бы чуть-чуть получше _Generic. Ах да, и в который настоящий const завезли, а не вот это самое.
Аноним 20/06/21 Вск 05:46:34 2074171146
>>2073932
По этой логике отомрут компьютеры, останутся веб-страницы в проприетарных корпоративных сетевых терминалах это такие мониторы с кклавиатурами, подключенные удаленно к мейнфрейму в датацентре. Только Си тут ни при чем.
Аноним 20/06/21 Вск 09:15:57 2074216147
>>2072134
В /ra/ есть тред по ардуинам. Попробуй там спросить.
Аноним 20/06/21 Вск 14:20:44 2074438148
Сап,
Есть функция, внутри которой создаётся определённой длины массив структур.
shape shapes[10]

И после заполняется данными.
Внутри функции все данные заполнены корректно, и всё отображается как надо.

Мне нужно вернуть этот массив, но когда я возвращаю указатель массива return shapes*. Если попытаться обратиться к любому полю любого кроме первого элемента массива - то там какая-то нёх (мусор в памяти)

Вопрос: как мне правильно вернуть массив?
Аноним 20/06/21 Вск 14:35:13 2074451149
>>2074438
Вопрос отменяется, я просто сделал массив в глобальной области
Аноним 20/06/21 Вск 16:40:31 2074557150
>disk space: OK
>disk space: 16K

Апхахпха, проигрямсь
Аноним 20/06/21 Вск 16:45:39 2074565151
>>2054946
Спасибо, заработало.
Аноним 20/06/21 Вск 19:58:59 2074844152
>>2074114
>>2074093
Ржавый так на мусорку отправляется, что аж модули ведра линукс на нём пилят
Аноним 22/06/21 Втр 01:00:31 2076639153
>>2027897 (OP)
Пацаны а шо будет в возвращаемом значении, если скастить void функцию к int?
Аноним 22/06/21 Втр 07:54:22 2076677154
>>2076639
наверное по конвенции будет то, что завалялось в контрольном регистре. а скорее всего ещё на конпеляции транслятор в ебло харкнет за такие дела
Аноним 24/06/21 Чтв 08:15:46 2078713155
Где почитать про функции write read из unistd.h . Какие параметры у них?
Ато есть подобное типа write(1, &n, 1) что это значит и можно ли пропускать параметры?
Аноним 24/06/21 Чтв 12:08:38 2078881156
Аноним 24/06/21 Чтв 17:35:52 2079217157
изображение.png 2Кб, 386x67
386x67
Листал сорсы ядра линукса, и нашел вот такую реализацию листа
Ну и как они его используют, он же пустой

include/linux/types.h
Аноним 24/06/21 Чтв 19:53:15 2079341158
>>2079217
> Ну и как они его используют
Точно так же, как в крестах, только вместо наследования - композиция:
struct myobject {
struct list_head list_of_something;
int mydata;
}
И сразу гугли CONTAINING_RECORD, чтобы понять, как из list_head сделать myobject.
Аноним 25/06/21 Птн 21:45:35 2080489159
Анон, есть такая функция в файле UART.c
void UART(void)
{

X_sample = (int) ReadFromRXBufFL(RXBufAddrParsing+14);
Max_sample = (int) ReadFromRXBufFL(RXBufAddrParsing+18);
}
Которая принимает данные из буфера.
В заголовочном файле UART.h она указана как
void UART (void);
Как мне в файле programm.c заполучить содержимое переменных X_sample и Max_sample
при выполнении цикла for(i=0;i<10;i++). Я объявлял переменные extern'ом в заголовочном файле programm.h, но данные из этих переменных приходят одни и те же.
26/06/21 Суб 01:32:05 2080657160
>>2080489
> ReadFromRXBufFL
Моя карманная ванга намекает, что данные ты либо не получаешь вообще, либо этот буфер надо poll-ить. В любом случае надо знать, что за МК, что за либа, как она работает.
Аноним 26/06/21 Суб 06:24:57 2080693161
>>2080657
LPC 2138, uart написан каким-то васяном и он работает, когда надо получить одно значение, в program.c я делаю вещь типа tempX=X_sample (X_sample - глобальная переменная, объявлена как extern в program.h, но как только я оборачиваю это дело в цикл, то весь цикл пишется одно и то же значение X_sample. В связи с этим и возник вопрос, насколько я всё делаю неправильно.
Аноним 26/06/21 Суб 08:16:13 2080715162
>>2080693
Не уверен что тебя понял, но:
>объявлена как extern в program.h
volatile не забыл? Либо компилируй с -O0.
>весь цикл пишется одно и то же значение
Если в цикле нет значительной задержки, то все логично. По UART данные приходят сравнительно медленно.
Аноним 28/06/21 Пнд 15:21:51 2082767163
Почему в стандартных либах нет такой полезной штуки как fsizeof(fp)?
Аноним 28/06/21 Пнд 21:11:37 2083172164
>>2082767
из за переносимости?
Аноним 29/06/21 Втр 15:33:36 2083765165
>>2082767
Не договорились, что возвращать для терминала.
Аноним 29/06/21 Втр 17:32:20 2083912166
966-9660435high[...].png 37Кб, 2400x3200
2400x3200
Вечер в хату, уважаемые.
Смотрел на код представленный тут:
https://github.com/OneLoneCoder/olcPixelGameEngine/blob/master/olcPixelGameEngine.h

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

В частности, в этой строчке:
Construct(int32_t screen_w, int32_t screen_h, int32_t pixel_w, int32_t pixel_h, bool full_screen = false, bool vsync = false, bool cohesion = false);

Как я не пытался, не смог найти связь между этими значениями и вызываемой WinAPI (или OpenGL?) функцией для "зернистости" физических пикселей.
Гугление pixel scaling, pixel resolution, pixel ratio, custom pixel size ничего не дало. Использование brush и pen не помогает, так как в вышеприведенном файле во-первых они не используются, а во-вторых не позволяют установить неквадратные пиксели.

Помоги пожалуйста.
Спасибо.
Аноним 29/06/21 Втр 17:36:47 2083917167
image.png 6Кб, 187x130
187x130
Аноним 29/06/21 Втр 17:48:16 2083927168
>>2083917
Бляя, ну понятно же что речь идет о низкоуровневых вызовах, какая разница как вызывается конструктор класса?
Аноним 29/06/21 Втр 18:24:12 2083977169
>>2083927
Я, например, понятия не имею, где искать низкоуровневые вызовы из конструктора класса. В С, я бы увидел объявление Construct() в .h файле, открыл .c файл, и прочитал бы определение, и там были бы все вызовы. В каком .cpp это искать здесь?
Аноним 29/06/21 Втр 18:35:28 2083991170
>>2083977
Ты даже не прошел по ссылке, да? Там ОДИН .h файл.
Аноним 29/06/21 Втр 18:38:43 2083995171
>>2083991
А кто тогда долже определения функциям давать? В этом единственном .h файле только объявление. Я так понял, что это я не смог найти определения для Construct(), а ты утверждаешь, что его вообще нет?
Аноним 29/06/21 Втр 19:07:58 2084029172
>>2083995
Блядь, просто не пиши, если не можешь понять простой абзац на русском языке. Мигрант ебучий.
Аноним 29/06/21 Втр 19:14:56 2084042173
>этот подрыв
Зачем ты так с этим с++ником? Он же дефинишн от декларейшена не отличает.
29/06/21 Втр 20:05:27 2084116174
>>2083995
Гуглим header-only library. В сишке тоже так делают.
Аноним 29/06/21 Втр 21:07:39 2084197175
>>2084116
Здорово. Определение-то где? Оно же не макросом генерируется, чтобы это header-only library была.
Аноним 29/06/21 Втр 22:10:05 2084272176
>>2083912
Ок, закину в C++ тредю.
Аноним 30/06/21 Срд 02:48:01 2084399177
>>2084042
>>2084197
Пиздец - это тред Си или аутистов?

>>Оно же не макросом генерируется, чтобы это header-only library была.
Что ты такое и что ты блядь такое несешь?

>>2083995
>В этом единственном .h файле только объявление.
Иди книжку по си почитай чтоли?

в h может быть что угодно - хоть поэма Пушкина в строках. Уж сишнику не знать про компиляцию кода, это конечно пиздец полный
Аноним 30/06/21 Срд 09:56:53 2084488178
>>2084399
>может быть что угодно
А есть только объявление. Ты в него заходил?
30/06/21 Срд 10:45:35 2084510179
Аноним 30/06/21 Срд 11:22:10 2084539180
>>2084510
А, я обосрался, искал с пробелом в начале, а там "::".
Аноним 30/06/21 Срд 15:34:51 2084764181
16249771411720.png 37Кб, 2400x3200
2400x3200
>>2084510
Вот-вот.
А дальше куда закидывается? Не понимаю.
Аноним 01/07/21 Чтв 20:03:00 2085543182
Хуй его знает куда написать.

Кароче есть старая карта 7 серии нвидиа и так получилось что её нужно воткнуть в систему с 10 виндой. Дрова под карту есть только для 8.1 винды. Собственно что делать? Почитал что можно конвертировать проект для 8.1 до 10 винды автоматически, но для этого ведь исходники нужны, а нвидиа проприетарные. В общем есть какие-нибудь предложения у анона?
Аноним 01/07/21 Чтв 20:09:01 2085556183
Аноним 02/07/21 Птн 10:07:39 2085889184
>>2085543
на линух есть дрова? их конвертировать может?
Аноним 03/07/21 Суб 00:56:39 2086546185
image.png 133Кб, 687x375
687x375
image.png 126Кб, 679x371
679x371
Пытаюсь скомпилить вот этот код:
https://github.com/engineer-man/youtube/tree/master/062
$ sudo make
Получаю:
make -C /lib/modules/5.12.14-arch1-1/build M= modules
make[1]: Entering directory '/usr/lib/modules/5.12.14-arch1-1/build'
scripts/Makefile.build:43: arch/x86/entry/syscalls/Makefile: No such file or directory
make[2]: No rule to make target 'arch/x86/entry/syscalls/Makefile'. Stop.
make[1]:
[arch/x86/Makefile:223: archheaders] Error 2
make[1]: Leaving directory '/usr/lib/modules/5.12.14-arch1-1/build'
make: * [Makefile:4: all] Error 2

Алсо, пикрил (проверил в /usr/include/linux, файла там и правда нет), но пакет с заголовками накачен:
$ sudo pacman -Qe linux-headers
linux-headers 5.12.14.arch1-1

ЧЯДНТ?
03/07/21 Суб 02:19:05 2086575186
>>2086546
ls -l /usr/lib/modules/`uname -r`/build/include/linux/init.h
Аноним 03/07/21 Суб 10:24:47 2086649187
image.png 76Кб, 1083x783
1083x783
image.png 153Кб, 1280x1024
1280x1024
2 функции

что это за ошибка? void create нормально создает матрицу и выводит её, а void print выдает эту ошибку

Если код void print'a засунуть в void create, то всё выводится и параметр x виден

В main'е тоже код print'a выдает ту же ошибку
Аноним 03/07/21 Суб 11:45:57 2086691188
>>2086649
Ошибка работы с памятью.

Если быть точнее - ты передаешь int ××a в функцию аргументом, как int ××x, по сути ты NULL копируешь в функцию, и там его уже в стек фрейме заменяешь, не меняя значение самой ××a.
Тебе надо в create передавать тройной указатель и a передавать как &a в него.
Аноним 03/07/21 Суб 11:48:22 2086692189
>>2086575
>ls -l /usr/lib/modules/`uname -r`/build/include/linux/init.h
Так, вот здесь имеется, значит. Тогда получается всё правильно. И как тогда заставить его работать?
Или не правильно. Он вообще должен быть там, или это на арче навасянили так?
Аноним 03/07/21 Суб 13:22:03 2086742190
image.png 67Кб, 1089x692
1089x692
Аноним 03/07/21 Суб 15:18:57 2086845191
Аноним 03/07/21 Суб 16:36:37 2086888192
Аноним 03/07/21 Суб 17:33:51 2086941193
cirno-gta.jpg 49Кб, 604x362
604x362
Анон, происходит какая-то чертовщина.
ГЦЦ пишет, что LLONG_MAX udneclared. Хотя limits.h подключен, в самом хидере этот макрос тоже есть.

Не стандартных хидеров неподключено. Пробовал включать limits.h последним, тот же результат (хотя было бы странным, если какие-то другие хидеры раздефайнили).
Также если поставить другой лимит, например LONG_MAX, то всё работает.
Аноним 03/07/21 Суб 17:56:55 2086965194
>>2086941
Ты компилишь что ли с -std=c89?
Аноним 03/07/21 Суб 18:08:42 2086982195
Аноним 03/07/21 Суб 18:15:12 2086993196
nedoumeniye.jpg 82Кб, 700x700
700x700
>signed long long int
>Specified since the C99 version of the standard

Грустно, что сказать. Странно, что с -std=c89 гцц даже не ругнулся на этот тип
04/07/21 Вск 02:45:07 2087244197
>>2086692
> И как тогда заставить его работать?
Обеcсудь. sudo убери, нахуй тебе sudo для сборки? Да, просто make.
04/07/21 Вск 02:46:50 2087245198
>>2087244
И еще скажи, что у ты любишь мозоли: MODULE_LICENSE("gpl"); куда-нибудь в конец rickroll.c.
Аноним 04/07/21 Вск 13:34:35 2087419199
Аноним 05/07/21 Пнд 16:48:37 2088244200
2121.png 16Кб, 652x405
652x405
Парни, такая ситуация. Программирую под мк, чистый си. Недавно вот захотел попробовать uclinux-ng, не спрашивайте зачем, мои цели за гранью. Думал там простая либа, но что-то вообще не въеду как её собрать под cortex-m4? Есть хоть какой-то гайд, не знаю с какого конца подходить, там мэйкфайлы какие-то, что с ними делать непонятно, гугол масоны засрали говном, ничего не нашёл. Среда программирования - IAR EWARM.
Аноним 06/07/21 Втр 18:15:30 2089061201
Господа, насколько я понимаю, если fread при считывании очередной порции данных натыкается на конец файла, то данные до него будут сохранены в указанной области памяти, ведь так? Если так, то я не понимаю почему у меня эти данные куда-то утекают при считывании большем, чем по одному байту.
Аноним 06/07/21 Втр 19:01:15 2089112202
>>2089061
Разобрался с этой проблемой, оказывается, что предыдущие данные сдвигаются в области памяти из-за чего я подумал, что они потерялись.
Аноним 06/07/21 Втр 21:07:13 2089205203
Почему в си нет ссылок?
Аноним 06/07/21 Втр 21:57:13 2089250204
>>2089205
>>2089205

Я же правильно понимаю, что эти ваши линки - статические адреса на этапе компиляции? Если да, то какой в них смысл? Они же экономят одно адресное слово, а также несколько копирований, но путаницы в исходнегах могут внести куда больше
мимо-неофаг
Аноним 06/07/21 Втр 22:13:33 2089253205
Аноним 06/07/21 Втр 22:42:05 2089263206
tlen4-b-6316.jpg 29Кб, 512x384
512x384
А я вот тут подумал, и мне показалась интересной (своя) идея с таким билдом, чтобы как указатель (типа адрес), но при попытки модификации всё бы наебнулось (в рантайме).
Не знаю зачем, но интересно
Аноним 06/07/21 Втр 22:59:44 2089281207
>>2089253
>>2089250
Насколько я понимаю ссылка это просто сахарочек, который за тебя разыменовывает и берет адрес. Что он может сломать?
06/07/21 Втр 23:20:55 2089300208
>>2089281
> Что он может сломать
Мозг читающего код. С указателем видно сразу, указатель ли он, или вот объект лежит туточки. Со ссылкой - нет.
Аноним 07/07/21 Срд 00:34:58 2089341209
>>2027897 (OP)
На чем вы бля дебажите в 2021? Это же пиздец, нужно посмотреть память и стеки вызовов, накатил Visula Code, какое то говно для пориджей нихуя не показывает, стер. Накатил Code::Blocks это говно сыпет программные ошибки. Vusula Sdudio этого ебаного монстра даже ставить не буду. Остался Eclips он точно работал...

Аноним 07/07/21 Срд 00:41:19 2089343210
>>2089341
Ты наверное в Vim или Emacs пишешь да?
Аноним 07/07/21 Срд 00:42:25 2089344211
>>2089343
Тогда бы он спокойно дебажил в гдб.
Аноним 07/07/21 Срд 00:44:33 2089345212
>>2089343
>Ты наверное в Vim или Emacs пишешь да
В НотеПад++
>>2089344
>Тогда бы он спокойно дебажил в гдб
Я могу конечно GDB запустить, но бля 2021 год.
Аноним 07/07/21 Срд 00:45:57 2089346213
>>2089345
>но бля 2021 год
От книжек в пользу фильмов уже отказался?
Аноним 07/07/21 Срд 00:57:14 2089357214
>>2089346
>От книжек в пользу фильмов уже отказался?
Поридж, твои Трансформеры и Супермены никому не интересны.
Аноним 07/07/21 Срд 01:08:23 2089359215
Безымянный.png 61Кб, 1011x758
1011x758
>>2089341
>Остался Eclips он точно работал
Eclips как всегда топчик, остальное идеобразное говно для пидоровпориджей.
Аноним 07/07/21 Срд 02:24:53 2089376216
>>2089359
QtCreator еще оказывается С проекты поддерживает
Аноним 07/07/21 Срд 07:55:28 2089415217
>>2089359
Ого а как регистры смотреть в студии? У меня чё-то пишет Нет данных если зайти в отладка окно регистры
Аноним 07/07/21 Срд 12:46:21 2089566218
>>2089415
>в студии
А студия то при чем? Хотя раньше в Вижуалстудии с майкрософтовским конпелятором все отображалось.
Аноним 07/07/21 Срд 21:17:05 2090025219
Господи, какую кислоту в своих 70-х жрали Денис Ритчи и Кен Томпсон, когда придумывали синтаксис объявлений указателей на функции. Это же просто абсолютно контр-интуитивная хрень. Почему, сука, я не могу объявить массив указателей на функции так?!

char ()(int) a[10];

Даже так, чтобы убрать любые неоднозначности

(char (
)(int)) a[10];

Почему, блять, во всех остальных ситуациях, я слева пишу тип, потому пишу имя переменной и в квадратных скобках размер массива, а тут так не могу? Ебаный в рот. Указатель на функцию, возвращающую чар и принимающую инт - ЭТО И ЕСТЬ ТИП, БЛЯТЬ. Почему он должен подчиняться иному синтаксису?!
Аноним 07/07/21 Срд 21:33:41 2090033220
>>2090025
Сделай тайпдеф и пиши нормально.
08/07/21 Чтв 03:54:45 2090177221
>>2090025
> когда придумывали синтаксис объявлений указателей на функции
Никто ничего не придумывал специально. Объявление отражает использование.

> я слева пишу тип, потому пишу имя переменной и в квадратных скобках размер массива, а тут так не могу
Ты неправильно об этом думаешь. Например, у тебя есть char ∗abc[10] (десять указателей на char): ты берешь имя переменной abc, индексируешь его квадратными скобками abc[10], дереференсишь указатель ∗abc[10] или с явными скобками ∗(abc[10]), получаешь char. Да, я знаю, что 10 за пределами массива, суть не в этом.

То же самое с функциями: берешь имя abc, индексируешь abc[10], дереференсишь указатель ∗abc[10] или ∗(abc[10]), получаешь функцию, вызываешь (∗abc[10])(int), возвращается char. Полная декларация: char (∗abc[10])(int) или с избыточными скобками, более явно показывающими последовательность действий: char (∗(abc[10]))(int). Дереференс ∗abc[10] приходится класть в скобки из-за приоритетов операторов, чтобы char не отожрал звездочку себе: иначе получится массив из 10 функций, возвращающих char ∗, но массив функций (а не указателей на них) в сишке сделать нельзя по определению, и компилятор пошлет тебя нахуй.

Алсо, двачую тайпдефы. Если тайпдефать не указатель на функцию, а сам тип функции, то даже скобки не нужны, и все получается максимально читаемым, точно таким же, как и для объявлений данных. Тот же самый процесс, что и выше, но два шага:
typedef char MyFuncType(int);
MyFuncType *xyz[10];
Когда отдереференсим xyz по полной, получаем значение типа "функция принимающая int, возвращающая char", ее и вызываем. И вот только здесь могут возникнуть сишкопроблемы и некоторое недопонимание: вызовы (∗xyz[n])(k) и его аналог с избыточными скобками (∗(xyz[n]))(k) абсолютно очевидны, но xyz[n](k) и (xyz[n])(k) работают ничуть не хуже. И это последствия неявного каста объекта типа "функция" к указателю на него и того, что оператор вызова функций () работает именно с указателями на функции. К сожалению, это правило работает в выражениях, но не работает в декларациях, поэтому MyFuncType xyz[10], как я уже говорил выше, написать нельзя.
Аноним 08/07/21 Чтв 12:16:50 2090379222
C89, C90 и ANSI C - это одно и то же?
08/07/21 Чтв 18:01:06 2090689223
>>2090379
Да. ANSI (США) стандартизировали в 89, ISO (Европа) в 90.
Аноним 08/07/21 Чтв 19:58:10 2090820224
изображение.png 3Кб, 268x233
268x233
Аноны, есть один буффер типа unsigned char buf[80] где хранятся следующие данные присланные по uart:

Read 16: 0x7a 0x5 0x14 0x0 0x4 0x0 0x0 0x0 0x0 0x0 0x6d 0xfa 0xe1 0xf3 0x1e 0xc
Read 16: 0x7a 0x5 0x14 0x0 0x4 0x0 0x0 0x0 0x0 0x0 0x6d 0xfa 0xf3 0x0 0xc 0xff
Read 16: 0x7a 0x5 0x14 0x0 0x4 0x0 0x0 0x0 0x0 0x0 0x6d 0xfa 0x43 0x3b 0xbc 0xc4
Read 16: 0x7a 0x5 0x14 0x0 0x4 0x0 0x0 0x0 0x0 0x0 0x6d 0xfa 0x3b 0x0 0xc4 0xff

Могу ли я как-то из него извлечь 0xe1 0xf3 0x43 0x3b и объявить их переменной типа float?
Аноним 08/07/21 Чтв 20:14:57 2090836225
>>2090820
Кладешь в массив из 4 байт и кастуешь его адрес в указатель на флоат.
Аноним 08/07/21 Чтв 20:16:28 2090838226
Или адрес флоата кастуешь в указатель на чар и кладешь туда.
08/07/21 Чтв 23:19:22 2090928227
>>2090838
Или делаешь через union, как человек, без UB:
union { uint8_t as_bytes[4]; float as_float } myvar;
Аноним 09/07/21 Птн 18:51:20 2091535228
>>2090836
Спасибо, получилось, упаковал в новый массив. Нужно ли мне под этот массив[512] делать malloc?
Аноним 09/07/21 Птн 20:00:13 2091596229
>>2090928
И в каком месте стандарт гарантирует расположение элементов в юнионе?
09/07/21 Птн 20:26:15 2091617230
>>2091596
Все по офсету ноль. А type punning упоминается в примечании к C11 6.5.2.3.
Аноним 10/07/21 Суб 12:48:29 2092070231
>>2027897 (OP)
Слышал что c99 сломан в сравнении с c89, а с11 исправил его, но никаких подробностей не было в источнике этого утверждения.
Шарящие, поясните что там к чему и как родилось такое утверждение?
Только не оспаривайте, блядь, это утверждение, я его не защищаю, мне просто интересно.
10/07/21 Суб 18:02:47 2092400232
>>2092070
> Только не оспаривайте, блядь, это утверждение
Как же не оспаривать? В C11 не так много нового появилось, и ничего коренным образом не изменилось по сравнению с C99. Хуй знает, может быть, это про какие-то детали формулировок? Вот C17 тоже вышел без фич, просто всякие мелочи поправили. Стоит ли утверждать, что C11 тоже был сломан?
Аноним 10/07/21 Суб 20:13:45 2092488233
>>2092400
Короче там просто хуйню спороли и ничего не сломалось?
Аноним 11/07/21 Вск 15:59:52 2093083234
1522672601222.png 43Кб, 2352x305
2352x305
>>2027897 (OP)
Нахуя пикрилейтеды делают? Сишка реально такая конченая, что приходится из макросов собирать не просто костыли, а шагоходы с креслом?
11/07/21 Вск 16:40:47 2093120235
>>2093083
Во-первых, это Microsoft, у них отношения с Си всегда непросто складывались, несмотря даже на то, что ядро на Си написано. Они постоянно пытались что-нибудь хорошее выбросить или не поддерживать, а какое-нибудь свое говно наоборот притащить. Во-вторых, в семидесятых ни про какие аннотации не слышали. Тем более в языке, который недалеко от ассемблеров ушел. Так что да, приходится костылями, хотя нормальные люди пишут подобные проверки в теле функции в assert. Вместо in/out пишут const и иногда restrict, и в C2x атрибуты появятся, можно будет их использовать, если очень охота.
Аноним 11/07/21 Вск 17:26:59 2093148236
>>2093083
Чет проорал с этих _наи__МеноВаний_
Аноним 11/07/21 Вск 20:57:10 2093312237
>>2093120
> в C2x
Вот бы получить сахар из крестов, но без анальных ограничений...
Заебали пилить языки либо без производительности с зумерскими GC, либо ржавый кал с проверками всего что можно, не дающий раскрыться полёту фантазии.
Аноним 11/07/21 Вск 21:15:16 2093319238
>>2093312
>не дающий раскрыться полёту фантазии
Сырыми указателями и unsafe можешь отстрелить себе хоть 40 ног!
Аноним 11/07/21 Вск 21:21:52 2093323239
Аноним 11/07/21 Вск 21:45:19 2093338240
>>2093323
Он бы ещё стабильным был бы. Прямо сейчас 650 открытых багов. Писать что-то серьезнее калькулятора на нем невозможно, о чем в доке и пишут.
11/07/21 Вск 21:58:19 2093350241
>>2093338
Мы все равно верим. Я вот джвадцать лет без преувеличений хотел comptime в сишке, и, наконец, оно есть хоть где-то.
Аноним 12/07/21 Пнд 16:41:38 2093977242
Пацаны, есть один unsign char buffer[512*n], где n от 1 до 4096;
Время от времени приложение написанное на gcc падает с ошибкой Segmentation fault (core dumped), гугл говорит что это из-за неправильной работы с памятью. Вопрос можно ли как-то совладать с этой ошибкой или нужно урезать размер буфера?
Аноним 12/07/21 Пнд 16:50:32 2093987243
>>2093977
Не вижу проблемы в размере буфера, скорее ты где-то за его пределы ходишь. Кидай код, или сам осваивай валгринд.
Аноним 12/07/21 Пнд 16:56:31 2093997244
Аноним 12/07/21 Пнд 17:34:58 2094057245
>>2093997
У тебя offset не инициализируется никогда, а используется в куче мест. Мусор какой-нибудь прибавляется к индексу в массиве, и он улетает за груницы и в sigsegv.
Аноним 12/07/21 Пнд 17:40:04 2094061246
>>2094057
Понял принял, а разве при создании переменной int offset; она не создается по умолчанию равной нулю?
Аноним 12/07/21 Пнд 17:41:04 2094064247
Аноним 12/07/21 Пнд 18:49:40 2094156248
Аноним 12/07/21 Пнд 22:36:54 2094372249
>>2094156
Точно таких же нет, есть спека в doc-формате, первым же результатом в гугеле по очевидному запросу.
Аноним 12/07/21 Пнд 22:46:29 2094380250
Аноним 13/07/21 Втр 00:05:04 2094430251
>>2027897 (OP)
Предлагаю книжку для гуманитариев заменить на свежий "C for Dummies" за авторством Dan Gookin.
Аноним 13/07/21 Втр 08:06:16 2094498252
Если читать впадлу, но с программированием хоть немного знаком годный канал https://www.youtube.com/channel/UCz29nMCtFP5cuyuLR_0dFkw/videos . Дальше ведет кучу пет проектов на си на винапи и опен гл. Годный канал для всех. Предлагаю добавить в шапку.
13/07/21 Втр 11:43:52 2094600253
>>2094498
Открыл рандомное видео (v7OcOW7NrLs), тыкнул в рандомное место: sockaddr.sin_addr не присваивется вместо этого куча мемсетов везде, ну ладно INADDR_ANY как раз ноль, повезло; TCP, но код возврата send/recv не проверяется отправили 200 байт, ушло 100; буфер размером 200 символов распечатывается после recv без обработки, просто printf("%s\n") т.е., если отправить 200 символов без единого \0, получим выход за пределы буфера. И это только несколько секунд одного видео. Закрыл. Это точно-точно нужно в шапку?
Аноним 13/07/21 Втр 12:55:34 2094650254
>>2094600
Так ты в студии писал
13/07/21 Втр 21:41:52 2095128255
Аноним 13/07/21 Втр 23:01:01 2095179256
>>2095128
В студии не работает просто так этот код. Надо пердолится
Аноним 14/07/21 Срд 12:15:56 2095479257
сори если хуйню принес в тред, я только щупаю сишку на уровне любителя.
Кто-нить юзал/ет http://libcello.org/
вот случайно наткнулся, вроде прикольно, но там какой-то рантайм добавляют (по сути уже не си), курить дальше эту либу, или это шляпа какая-то?
Аноним 14/07/21 Срд 12:19:22 2095486258
>>2095479
Бери сразу перл лучше, лол.
Аноним 14/07/21 Срд 12:59:55 2095531259
Гайз, а С вообще реально нормально выучить самому без вышки?
Аноним 14/07/21 Срд 13:36:05 2095563260
>>2093323
блядь, этих ноунейм языков уже наплодилось
zig, odin, nim, beef, v, crystal ...

когда уже нормальное че появится не раст, как бы си люблю, но реально уже морально устарел. Да и виден запрос общества на модернизацию сишечки, раз столько япов развилось, которые до нормального продакшна все никак не дойдут
Аноним 14/07/21 Срд 13:50:22 2095582261
>>2095531
Конечно, блядь, это ж не кресты.
Аноним 14/07/21 Срд 14:26:58 2095620262
30067889-1.jpg 170Кб, 900x1200
900x1200
>>2095563
>уже морально устарел
Аноним 14/07/21 Срд 14:55:32 2095639263
>>2095620
когда ты в 2000-х был мелкий, наверное с тамогочиком ходил, или лизуном-сасуном каким-нибудь.
ну это другое совсем, твое поколение явно умней было, а сейчас зумеры эти - дегенераты.

Мимо не зумер
Аноним 14/07/21 Срд 14:56:51 2095640264
Аноним 14/07/21 Срд 14:58:29 2095642265
>>2095640
Рот бы тебе мылом вымыл
Аноним 14/07/21 Срд 14:58:46 2095643266
>>2095563
Дваждую.

Сам считаю odin наиболее интересным из всего что ты перечислил, жаль наиболее хайповый из них zig.

Так то к сишке многого не нужно, нормальные дженерики и может еще несколько стандартных контейнерова и все впрочем, по желанию трейты добавить еще можно.
Аноним 14/07/21 Срд 15:53:59 2095689267
>>2095643
там в том-то и прикол что не надо там что-то супер новое.
даже синтаксис не надо менять

просто мб методы для структур как в го
интерфейсы как в го
дженерики
как-то продумать обработку ошибок
и инфраструктуру нормальную запилить, что-то типо cargo
ну и мб как-то отказаться от .h файлов
Аноним 14/07/21 Срд 15:55:51 2095692268
>>2095689
ну и неймспейсы тоже неплохо было бы, хотя не настаиваю
14/07/21 Срд 18:18:42 2095775269
>>2095563
Crystal и Zig заслуживают ознакомления, но Crystal - это не про сишку.

>>2095689
> и инфраструктуру нормальную запилить, что-то типо cargo
Это провоцирует лефтпады. Диды вон писали без карги, и нам она не нужна.

> как в го
Возьми го и пиши в го, как в го. Тут должна была быть шутка про продумывание обработки ошибок.

> не надо там что-то супер новое
Надо. Современное программирование сильно отличается от того, как писали раньше. Даже тупо железо отличается. А в сишке вон многопоточность только-только появилась.
Аноним 14/07/21 Срд 19:43:34 2095836270
>>2095775
> Возьми го и пиши в го, как в го.
не хочу го, пробовал - хуйня

> А в сишке вон многопоточность только-только появилась.
не понял прикола, ты про что?
системными вызовами создаешь свои потоки, что значит недавно в си появилось? если че - да, я нуб в си, чисто для души вкатываюсь
Аноним 14/07/21 Срд 20:17:11 2095868271
>>2095563
пиши на крестах там все есть
Аноним 14/07/21 Срд 20:20:36 2095869272
>>2095775
>А в сишке вон многопоточность только-только появилась.
pthread существует с середины 90х
Аноним 14/07/21 Срд 20:22:33 2095872273
Аноним 14/07/21 Срд 20:33:37 2095883274
>>2095872
шаблоны, лямбды, корутины, модули, наймспейсы, скоро еще завезут pipeline-operator и pattern matching
все твои любимые сишные библиотеки работают без танцев с FFI
что еще нужно?
Аноним 14/07/21 Срд 21:39:05 2095941275
>>2095883
>скоро еще завезут pipeline-operator
Уже завезли в стандарт, а раньше можно было библиотеками подключать.
Аноним 14/07/21 Срд 23:41:19 2096041276
>>2095883
в расте тоже допизды всего, я же не дрочу на раст, хотя пытался
15/07/21 Чтв 00:09:08 2096053277
>>2095869
Ага, оно работало примерно как 1 << 31. Все знают, что получится, но у стандарта другое мнение. Та абстрактная машина, под которую пишется сишный код, ничего не знала о потоках. Соответственно, ни сам язык, ни стандартная библиотека ничего не гарантировали, были только местные фокусы, работавшие на честном слове.
Аноним 15/07/21 Чтв 00:28:44 2096067278
>>2096053
так подожди, а что тогда поменялось?

> А в сишке вон многопоточность только-только появилась.

я не гуру, но знаю только pthread, если еще какие-то имплементации, есть даже кроссплатформенное решение какое-то.
А че у же в стандарт си завезли потоки?
15/07/21 Чтв 01:18:06 2096095279
>>2096067
> а что тогда поменялось?
Да ничего, в общем-то. Наука официально признала, разрешила и все такое. Атомики вот завезли наконец.
Аноним 15/07/21 Чтв 19:52:44 2096726280
сори за супер нубский вопрос

это норм что в h файле я определяю структуру, ну прям полностью, с полями?

просто иначе если я объявляю ее в h файле но определяю в .с, у меня сыпят ошибки разные типо storage size of ‘point’ isn’t known.
оно и понятно что файл видит только то что в хедер файле.
Но раве в хедер файле что-то определяют?
Аноним 15/07/21 Чтв 20:00:18 2096742281
я так понял работу на чистом си хуй найдешь
надо и плюсы еще поднимать

точнее даже можно хуй забить на си и учить только плюсы
Аноним 15/07/21 Чтв 20:05:40 2096748282
>>2096726
>Но раве в хедер файле что-то определяют?
Чигобля? В нем только это и делают
Аноним 15/07/21 Чтв 20:05:44 2096749283
Посоны, поделитесь собственными проектами, запиленными на Си. Можно без кода, просто хоть на словах расскажите чего писали.
Аноним 15/07/21 Чтв 20:06:55 2096752284
>>2096742
С/С++ должен знать каждый
15/07/21 Чтв 21:36:56 2096869285
>>2096726
> это норм что в h файле я определяю структуру, ну прям полностью, с полями?
Это зависит. Вообще норм. Но есть способ скрыть реализацию, когда ты в .h говоришь:
struct yoba; // тайпдефы по вкусу
а в .c ты уже объясняешь, что:
struct yoba { int fileno; char ∗somename; };
И да, в этом случае тебе нужно будет сделать свой "конструктор", struct yoba ∗yoba_create(void), потому что код снаружи не будет знать ни размера, ни каких-либо других деталей о структуре, кроме того факта, что она такая есть. Класть ли структуру в .h как есть, или прятать детали - дело твое, зависит от того, где и как будет использоваться эта структура.

> Но раве в хедер файле что-то определяют?
Да. Даже код кладут, когда это inline-функции, например.
Аноним 17/07/21 Суб 18:32:23 2098730286
x.png 5Кб, 462x120
462x120
Посоны, как починить? VS Code.
17/07/21 Суб 20:18:36 2098886287
>>2098730
Тебе же написали: запускать сначала Developer Command Prompt от вижуал студии (консолька с выставленными переменными окружения), а потом из нее VS Code. Алсо, после этого ты можешь спиздить переменные окружения, и выставить их либо глобально, либо как-нибудь в этой вашей VS Code наверняка можно для билда указать.
Аноним 17/07/21 Суб 21:00:56 2098913288
>>2098886
Так я об этом и спрашиваю. Как починить чтобы не пердолиться через консольку каждый раз, это же пиздец какой-то. 2021-й на дворе.
Аноним 17/07/21 Суб 21:52:19 2098940289
>>2098886
Там переменных окружения столько, что ты охуеешь. Пару десятков. И все они с консольки этой выставляются пачкой bat-ников. Сука, ощутил на собственной шкуре за что индусов ненавидят.
17/07/21 Суб 22:17:45 2098970290
>>2098940
Да. Мне совершенно не на чем проверить, но на самом деле нужно что-то вроде PATH/LIB/INCLUDE плюс VisualStudioVersion/VCINSTALLDIR, чтобы оно смогло задетектить наличие студии.
Аноним 17/07/21 Суб 23:00:10 2098997291
>>2098913
>Как починить чтобы не пердолиться через консольку каждый раз
Установить луникс и погромировать на нём, очевидно же!
Аноним 17/07/21 Суб 23:20:15 2099014292
>>2098997
Ты че, ебанутый. Там постоянно придется с консолькой пердолиться, каждый день, блджад, а я хочу жить активной и полноценной жизнью.
Аноним 17/07/21 Суб 23:22:52 2099019293
>>2099014
Если не хочется, можно ни разу после первой установки её не открыть. Зато вскод работает по ярлычку!
Аноним 17/07/21 Суб 23:24:38 2099022294
>>2099019
C gcc и шлангом он и под виндой так работает. Но я захотел полноценный IntelliSense с документацией и шлюхами и теперь страдаю.
Аноним 17/07/21 Суб 23:32:45 2099027295
Аноним 17/07/21 Суб 23:36:04 2099028296
>>2099027
Да, с удаленной билд-машиной под виндой, ЛОЛ.
Аноним 17/07/21 Суб 23:36:15 2099029297
>>2099027
>статья
Или она про кросс компиляцию. Не хоче больше 5 слов за раз читать, поэтому не понятно.
Аноним 17/07/21 Суб 23:40:37 2099035298
Аноним 20/07/21 Втр 00:04:41 2100845299
>>2090177

Спасибо, анон, с твоей помощью я понял, как устроен этот синтаксис.
Аноним 21/07/21 Срд 01:39:58 2102089300
Чому long double в виндовом рантайме это double? Есть какой-то workaround или выход только MinGW собирать? Что они курили?
21/07/21 Срд 01:49:13 2102090301
>>2102089
Тому что так сложилось. Ты уверен, что тебе не хватает точности даблов? Ты уверен, что хочешь медленно считать 80 бит на FPU, а не 64 бита быстро на SSE?
Аноним 21/07/21 Срд 01:56:32 2102092302
>>2102090
Я хочу контроль. double когда нужна скорость и long double когда я сам решил, что мне нужна повышенная точность. Оправдания виндовому поведению просто нет. gcc в MinGW ведет себя правильно, но я боюсь что там в качестве workaround вообще программная реализация, а не просчет на FPU.
Аноним 21/07/21 Срд 04:00:06 2102100303
>>2102092
>мне не надо, но я хочу
Оправдания пердовому поведению просто нет.
Аноним 21/07/21 Срд 16:50:28 2102654304
>>2102089
Если тебе не хватает аж 52 битов мантиссы для вычислений, то, вероятно, тебе стоит задуматься об использовании более устойчивого алгоритма.

Я уверен практически на 100%, что если ты пришёл с таким вопросом на сосач, значит, оно тебе на самом деле не нужно.
21/07/21 Срд 17:32:59 2102684305
>>2102092
> Оправдания виндовому поведению просто нет
Оправдание есть: из существующего и распространенного железа только x87 из 1980 года умеет в хардварные 80 бит. Повторюсь, современный софт на x86 считает плавающую точку на SSE (даже если это обычные, не векторизованные вычисления), в x87 ходят только по большой нужде.

> боюсь что там в качестве workaround вообще программная реализация
Нет, там честные 80-битные даблы с выравниванием (лежат в 96-битных переменных), математика естественно на FPU, все ∗l() функции реализованы.
21/07/21 Срд 17:36:41 2102697306
>>2102092
Алсо, я вот не понимаю, когда int и long int синонимы в 32-битном коде, тебе почему-то норм, а вот когда double и long double, так сразу оправданий нет.

Алсо, не сразу увидел и поэтому не сразу проиграл:
> double когда нужна скорость
Посоны-то не знают, не флоаты, ХАЛФ-флоаты используют (там, где завезли), а он даблы, скорость.
22/07/21 Чтв 18:57:36 2103752307
>>2102697
>Алсо, не сразу увидел и поэтому не сразу проиграл:
> double когда нужна скорость
>Посоны-то не знают, не флоаты, ХАЛФ-флоаты используют (там, где завезли), а он даблы, скорость.
Кек, теперь и я проиграл, тоже не сразу увидел.
Аноним 23/07/21 Птн 08:22:54 2104144308
image.png 65Кб, 1099x622
1099x622
image.png 14Кб, 651x205
651x205
>>2027897 (OP)
Какого хуя ёбаный CMake, при сборке под MinGW Makefiles генерирует мне сука makefile в котором все пути указаны с \ а не с / (пикрил 1)? В итоге при попытке запустить этот makefile, вызываемый make'ом cmake эти слеши не правильно обрабатывает и удаляет их нахуй (пикрил 2).
Я просто не могу понять это я так обосрался или все эти системы сборок и системы сборок для систем сборок тупое ебаное костыльное кривое говно?
make из состава MinGW, CMake качал с оф. сайта.
Собираю libTMX библиотеку (https://github.com/baylej/tmx), всё это результат следующей команды https://pastebin.com/VjnpSREQ
Аноним 23/07/21 Птн 09:29:07 2104162309
>>2104144
Буквально вчера тоже с этим столкнулся. Нихуя не понимаю. И как под виндой библиотеки собирать?
Аноним 23/07/21 Птн 10:16:52 2104205310
>>2104162
окнепидоры не соснули повторяю
не соснули
не
соснули
Аноним 23/07/21 Птн 10:20:15 2104208311
Привет, вообщем недавно, начал изучать си, осилил синтаксис и понял что для написания программ недостаточно, когда ничинаешь писать что либо, испытываю страх за незнание, и собственно ответ прост, нужно писать код много гуглить, но времени у меня нет, так как чувствую что си уже никому не нужен, а я хочу найти работу в айти(
Аноним 23/07/21 Птн 10:26:12 2104212312
>>2104208
>а я хочу найти работу в айти(
Проще и быстрее будет выучить JS за полгода и идти работать низкосортной макакой за копейки.
Ну а лучше подсуетись кабанчиком и устройся куда нибудь охранником или грузчиком, нервы сбережешь
Аноним 23/07/21 Птн 10:26:17 2104213313
>>2104208
К посту выше, после этого я понял что мне нужен допинг и нашёл кое какие ноотропы, заказал и в случае успеха отпишу тут через месяц
Аноним 23/07/21 Птн 10:27:53 2104215314
>>2104212
В смысле охранником или грузчиком? Предлагаешь вообще не заниматься?
Аноним 23/07/21 Птн 10:36:58 2104220315
>>2104215
>Предлагаешь вообще не заниматься?
Именно
Аноним 23/07/21 Птн 10:38:23 2104221316
>>2104220
Я стану твоим конкурентом!
Аноним 23/07/21 Птн 11:21:49 2104257317
>>2104212
>Проще и быстрее будет выучить JS за полгода
Никак ты не научишься программировать быстрее от того что будешь учить синтаксис джаваскрипта вместо синтаксиса си — это просто так не работает. А то может быть и дольше будешь пердохаться с дохуя управляемыми языками, ведь там где си даёт понимание того, как работает компьютер, динамические языки заставляют ньюфага с собой работать как с чёрными ящиками разумеется компьютер тоже в какой-то степени чёрный ящик, но чем эта степень ниже тем лучше для обучения.
Аноним 23/07/21 Птн 11:55:33 2104288318
>>2104257
Дед, пей таблетки
Программирование это на 70% дизайн, и только на 10 попердольки (в среднем по индустрии но не суть). Научиться программированию можно только погружаюсь в проблематику домена. Чем ближе к юзкейсам и чем высокоуровневей — тем лучше.
Аноним 23/07/21 Птн 11:55:49 2104289319
>>2104257
>понимание того, как работает компьютер
Тут учиться надо, время тратить, мозги напрягать. Человеку вон, надо поскорее "вкотиться в ойти и рубить бабло", а ты ему про Си загоняешь
Аноним 23/07/21 Птн 12:24:15 2104317320
>>2104288
Ты совершенно не понял, о чём идёт речь.
Аноним 23/07/21 Птн 12:47:03 2104329321
>>2104317
попробуй не пукать ртом
Аноним 23/07/21 Птн 13:05:23 2104340322
>>2104208
Да си как раз-таки довольно простая хуйня, как и ассемблер. А вот войти в айти с сей действительно не получится, особенно если нет опыта даже в сопутствующих областях
Аноним 23/07/21 Птн 18:42:21 2104766323
Аноним 23/07/21 Птн 21:20:46 2104875324
>>2104144
там в шелле винды есть модификатор который заставляет шелл воспринимать \ как /
вроде бы
не программировал 10 лет просто, все забыл уже,

Аноним 23/07/21 Птн 22:34:10 2104912325
Пиздец просто почему ни где не написано про порядок линковки библиотек?
Пол дня нахуй мучался, не понимая почему у меня undefined reference на функции из libxml2, а оказывается сука, вопреки законам логики, библиотеку вызывающую libxml2 надо ставить ДО линковки libxml2.
Какая же хуйня боже просто пиздец
Аноним 23/07/21 Птн 22:39:33 2104920326
>>2104912
>библиотеку вызывающую libxml2 надо ставить ДО линковки libxml2
>вопреки законам логики
Аноним 23/07/21 Птн 22:49:17 2104926327
Аноним 24/07/21 Суб 13:45:39 2105239328
Аноним 25/07/21 Вск 18:42:31 2106529329
Пацаны, что написать на сишечке?
Аноним 25/07/21 Вск 18:47:58 2106544330
Аноним 25/07/21 Вск 20:24:31 2106654331
>>2106544
А чем срать на экран?
Аноним 25/07/21 Вск 21:44:55 2106750332
hqdefault[1].jpg 10Кб, 480x358
480x358
Впервые в жизни я решил вкатиться в С
ответ очевиден - у меня НИХУЯ не получилось
я открыл Кернигана и Ричи, стал всё читать, пробовать, компилировать. и что вы думаете??? ХУЙ!!!! нихуя у меня не получилось
а я могу даже пояснить почему я не могу скодить ДА ПОТОМУ ЧТО Я НЕ ВИЖУ В ЭТОМ СМЫСЛА
делаем типа переменные lower upper obosrupper и типа хуярим переводчик из фарингейта в цельсий, НАХУЯ МНЕ ЭТИ ЦЕЛЬСИИ ЕСЛИ У МЕНЯ В ГУГЛЕ ЕСТЬ ПЕРЕВОДЧИК В ЛЮБУЮ ЗАЛУПУ БЛЯТЬ ГОТОВЫЙ
может я странный человек?? я не знаю. всем удачи с этим ёбаным си

Аноним 25/07/21 Вск 22:18:18 2106773333
>>2106750
> ЕСЛИ У МЕНЯ В ГУГЛЕ ЕСТЬ ПЕРЕВОДЧИК В ЛЮБУЮ ЗАЛУПУ БЛЯТЬ ГОТОВЫЙ
Я так понимаю си это твой первый язык? Потому что любые другие языки преподают на таких же простых и сто раз решённых примерах.
Аноним 25/07/21 Вск 22:26:39 2106778334
>>2106654
Andre Lamothe Tricks of the 3d Game Programming Gurus: Advanced 3d Graphics and Rasterization

Nvidia GPU Gems

Game Engine Architecture
Аноним 25/07/21 Вск 22:55:49 2106797335
>>2106750
Так надо с Праты начинать.
Аноним 26/07/21 Пнд 09:32:21 2106985336
>>2106750
Да, ты очень странный человек
Аноним 26/07/21 Пнд 09:55:54 2107009337
Почему так часто именно Си советуют в качестве КМБ? Если у человека желание расти в эмбеддед, то не логичнее ли начинать с асмы под отдельно взятую архитектуру, а уже несколько позднее браться за K&R? Если обезьянство, то лучше наверное сразу с интерпритируемых ЯПов или нет?
Аноним 26/07/21 Пнд 10:59:26 2107068338
>>2107009
Это от того, что принципы, на которых построен Си, более или менее явно встречаются во всех промышленных языках. При этом, в отличие от Scheme и Smalltalk (принципы которых составляют >80% принципов "современных" интерпретируемых языков), он всегда был популярен в мейнстриме.
Аноним 26/07/21 Пнд 11:47:28 2107138339
>>2107009
Под эмбеддед на асме пишут только уебки, школьники на ютубе "я так могу" и старперы, которые выучили в 90-х архитектуру какого-то 8-битного PIC и там застряли.

В эмбеддед давно царствуют плюсы или сишечка, но для особо упоротых оптимизаторов, если надо ебать много байтов и регистров с очень маленькой памятью.
Аноним 26/07/21 Пнд 14:02:49 2107279340
>>2106544
Я бы взял плюсы, на плюсах такое писать в разы проще, т.к. там есть полиморфизм, темплейты, разные абстрактные типы в стандартной либе и т.д. На сишке такое писать стоит только в учебных целях.
>>2106529
Загрузчик, ведро, фирмфарь, драйвер.
Аноним 26/07/21 Пнд 14:43:13 2107306341
Как разделить код на си в несколько строк?
Вот например int a = ananas;
Если разделение будет между командами то без проблем, а если я хочу разделить вот так:
int a = ana
nas;
или так:
in
t a = ananas;
Что за йоба символ использовать?
Аноним 26/07/21 Пнд 15:12:23 2107331342
>>2107306
>Что за йоба символ использовать?
\
Аноним 26/07/21 Пнд 16:32:47 2107417343
Аноним 26/07/21 Пнд 16:52:21 2107463344
>>2107279
Ты упускаешь что игровой движок должен работать быстро.
Аноним 26/07/21 Пнд 18:49:21 2107626345
поясните по хардкору почему все так люто выступают против ютуб туториалов?
вот например https://www.youtube.com/watch?v=KJgsSFOSQv0 вроде норм объясняет последовательно и интересно. а Керниган и Ричи сразу начинают ебать мозг и приходится не обучаться, а посути догадываться. а после туториалов можно и книги почитать
Аноним 26/07/21 Пнд 18:54:58 2107644346
>>2107626
Там где ты скинул воды ахуеть. Но! Если тебе норм, то конечно норм. Однако я бы охуел от такой подачи.
26/07/21 Пнд 20:10:01 2107735347
>>2107463
Тем более кресты лучше. На сишке тебе придется пердолиться в воид поинтеры, в крестах компилятор сможет сгенерировать оптимальный код под конкретный тип. В сишке ты притащишь виртуальные функции в виде указателей в структурках, в крестах компилятор тоже притащит, но там он их еще и девиртуализовывать умеет. И вот так вот все. Кресты всегда в состоянии обогнать сишку просто потому что у них выразительных возможностей больше, но поэтому же писать быстрый код на крестах гораздо сложнее, чем на сишке. Не умеешь - получишь тормоза, скатишься в необдуманные абстракции всего и вся - получишь тормоза.
Аноним 26/07/21 Пнд 21:10:54 2107807348
>>2107463
Ты упускаешь что оптимизированный компилятором код игровых движков на крестах обычно производительней реализации на чистом C.
Посмотри даже какие-то бенчи языков программирования, кресты чаще всего впереди с реализацией того же алгоритма. Маргинально конечно, но все же. Учитывая это и более простую работу со структурами данных и ты прийдешь к выводу что без крестов никак.

https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/nbody.html
Аноним 26/07/21 Пнд 21:11:40 2107809349
Аноним 26/07/21 Пнд 21:13:38 2107813350
Аноним 26/07/21 Пнд 21:29:33 2107829351
image.png 73Кб, 413x335
413x335
сори за еще один супер нубский вопрос
на прикриле массивы чаров не на стеке выделяются?
почему это работает?
мне надо освобождать память такую?
26/07/21 Пнд 21:34:50 2107839352
>>2107829
Литералы константные и лежат в секции данных (обычно). То есть, фактически твой код:
static const char anonymous_string[] = "hello world";
char *a = anonymous_string;
return a;
Потому и работает. Освобождать нужно только то, что ты выделял маллоком или то, что другие выделили и сказали, как освобождать (fopen/fclose и т. д.).
Аноним 26/07/21 Пнд 21:48:07 2107852353
>>2107839
понял, спасибо
здоровьичка тебе
Аноним 26/07/21 Пнд 22:18:04 2107887354
>>2107735
>На сишке тебе придется пердолиться в воид поинтеры
Не пердолься в воид поинтеры
>В сишке ты притащишь виртуальные функции в виде указателей в структурках
Не тащи виртуальные функции
>писать быстрый код на крестах гораздо сложнее
Именно.
Аноним 26/07/21 Пнд 22:18:49 2107888355
>>2107807
>Ты упускаешь что оптимизированный компилятором код игровых движков на крестах обычно производительней
С чьих слов?
Аноним 27/07/21 Втр 01:41:20 2108018356
Аноны, есть что по работе кроме ембеддеда? На хх ищется только в паре с крестами.
27/07/21 Втр 02:09:29 2108026357
>>2107887
> не пердолься
qsort(), далеко ходить не надо. Сейчас ты скажешь реализовывать все стандартные алгоритмы, а для поддержки разных типов - копипастить, да?
> не тащи
А придется, потому что это единственный нормальный способ менять поведение в зависимости от типа объекта. Портянки из switch или ifelse ну никак не альтернатива.

>>2108018
Кресты все равно будут протекать в твой мир, даже если тебя возьмут исключительно на сишку. Смирись и выучи хоть как-то.
Аноним 27/07/21 Втр 10:17:34 2108140358
>>2108026
>Сейчас ты скажешь реализовывать все стандартные алгоритмы
Нет, сейчас ты такой перечисляешь мне все стандартные алгоритмы с войд поинтерами. Про qsort все знают и он гуглится легко, а остальные приведёшь, раз уж
>реализовывать все стандартные алгоритмы
?
qsort скажу реализовать, но qsort это не все стандартные алгоритмы, это один стандартный алгоритм.
>а для поддержки разных типов - копипастить
Ну ты можешь копипастить конечно, если по-другому не умеешь, но обычно это делают с помощью макросов.
Аноним 27/07/21 Втр 12:59:40 2108284359
16170461257300.jpg 29Кб, 562x702
562x702
>>2107807
>>2107809
Открыл ссылку. Исходники по ссылке для си и плюсов почти всюду разные, и чего они там по итогу сравнивают? Алсо, вот такого вот
> _mm256_setr_pd(...)
в геймдеве никто лепить не будет, лол (если ты, конечно, работаешь не на эпиков каких-нибудь, но тогда чего ты забыл на сосаче?).

>>2107463
Не-а.
Сегодня геймдев - это хуяк-хуяк на юнити или чертежами на анриле и в продакшн, сражаться за каждый такт как в девяностых никто уже не будет.
По вопросу: уж игры и даже движки пишите на чём вам удобнее, хоть на руби. Машины у юзверей сегодня мощные, пережуют.
Если, конечно, ты не UE5 собираешься с нуля писать.
Аноним 27/07/21 Втр 13:31:57 2108317360
>>2108284
>По вопросу: уж игры и даже движки пишите на чём вам удобнее, хоть на руби. Машины у юзверей сегодня мощные, пережуют.
Ну знаешь ли. Я вот думаю дропну нахуй Outer Wilds, юнитипараша графона не содержит ноль целых хуй десятых, зато комп во время её работы протапливает хату будь здоров (когда на улице 41 особенно заебись).
Там вопрос был плана "что бы такого написать на си", а писать на си надо очевидно то, где сишка с лучшей стороны себя покажет. Игровой движок это как раз такая штука, но лишь одна из многих.
Игры целиком писать на си наверное всё же не стоит, как и на крестах кстати. Не сильно жрущую игровую логику лучше реализовывать на динамических языках имхо. Даже майнкрафт немного страдает от того что там моды на джаве, а это джава, это не кресты и даже не си.
Аноним 27/07/21 Втр 14:20:21 2108367361
>>2108317
Это-то как раз объективно понятные вещи.
Но тут просто проблема в том, что пока что ты будешь писать на си или плюсах, конкуренты уже давно выпустят свой говнокод на говноюнити и твой продукт никому нахуй будет не нужен. И плевать, что код на юнити превращает пекарню в обогреватель.

Сишка - это, увы, для многих сегодня забытые технологии предков.
Но не для меня.
Аноним 27/07/21 Втр 14:39:50 2108374362
Аноним 27/07/21 Втр 14:48:58 2108384363
>>2108367
Ну вот пока что выходит что мне как потребителю говнокод на юнити не нужен, по крайней мере пока я в Норвегию не перееду. Это вполне себе один из факторов, бьющих по продажам. Может я уникальная снежинка, но почему-то кажется что не я один сношу парашу, греющую квартиру. А игры крупных издателей почему-то часто нормально оптимизированы, значит на оптимизоний спрос есть, взгляни на рдр2, дум тот же. А там ведь ещё соснолечки, на которых без байтоебства вообще никак.
Аноним 27/07/21 Втр 19:06:58 2108656364
>>2108317
>Там вопрос был плана "что бы такого написать на си", а писать на си надо очевидно то, где сишка с лучшей стороны себя покажет. Игровой движок это как раз такая штука, но лишь одна из многих.
>Игры целиком писать на си наверное всё же не стоит, как и на крестах кстати. Не сильно жрущую игровую логику лучше реализовывать на динамических языках имхо.
Двачую, простой спрайтовый движок написать на C не так уж сложно, многие кстати пишут инди- разработчики своё, да просто потому что проще в итоге выходит и в поддержке, и фишки можно реализовать уникальные, и если ты делать будешь десяток игр то это просто выгодно. Инди кстати которые на своих движках, почему то почти все успешны и игры у них круче. Сам либу писал на С графическую 2д, просто летает на 1% загрузки процессора, вот думаю ещё простую аудио- либу приделать и скриптовый движок lua и будет игровой движок. Все студии нормальные имеют свой движок, а это что то да значит.
Аноним 27/07/21 Втр 19:19:45 2108678365
а есть какой годный материал по структурам проекта, как собирать.
Про тот же СМаке, вот гуглю, но все для с++
Аноним 27/07/21 Втр 19:34:33 2108700366
а есть какой еще стайл гайд что-ли?
вижу есть кто как в парашном камел кейсе пишут
кто-то в божественном снейк кейсе, вот я люблю в_снейке_писать.
мне руки не оторвут, если я на си буду тоже так делать?

я в свое время обблевался от ебаного голанга, потому что там на уровне синтаксиса публичные штуки надо с большой буквы писать
Аноним 27/07/21 Втр 19:44:28 2108716367
>>2108678
>СМаке
На хуй тебе это говно? make достаточно
Аноним 27/07/21 Втр 19:48:49 2108725368
>>2108700
>а есть какой еще стайл гайд что-ли?
В каждом проекте свой, выбирай из них что считаешь нужным. Я например все переменные пишу слитно в нижнем регистре, а функции с _ ебой, имена структур с Большой буквы, ну и наименования без сокращений кроме счетчиков и индексов. А вот в крестах как раз КемелКейсом, там норм.
Аноним 27/07/21 Втр 20:16:33 2108763369
>>2108716
я хз, поэтому и спрашиваю
много где уже увидел смаке
да и вроде прикольно
>>2108725
в общем понял, все дрочат как хочут, круто
Аноним 27/07/21 Втр 20:18:29 2108765370
>>2108763
Сейчас популярно юзать meson
Аноним 27/07/21 Втр 20:19:54 2108767371
>>2108765
>meson
Это еще и питухон подтягивать?
Аноним 27/07/21 Втр 20:24:18 2108774372
>>2108765
ох, наделали каждый свое, в этом и проблема си, нет единой инфраструктуры
autotools cmake meson scons
Аноним 27/07/21 Втр 20:25:18 2108778373
>>2108774
а че юзать новичку, чтобы сразу привыкать не понятно
Аноним 27/07/21 Втр 20:29:26 2108785374
>>2108767
Ну да, можно ещё билд скрипты писать на чистом питоне.
>>2108778
cmake, т.к. много где используется
>>2108774
bazel ещё есть
Аноним 27/07/21 Втр 20:34:43 2108789375
>>2108778
Но лучше использовать IDE
Аноним 27/07/21 Втр 20:49:14 2108811376
>>2108774
Не говори, ещё языков программирования наделали, текстовых редакторов, браузеров, операционных систем, вообще суки как их земля носит
Аноним 27/07/21 Втр 20:56:54 2108826377
16269738865610.gif 5001Кб, 600x265
600x265
16269738865801.png 10Кб, 307x160
307x160
>>2108384
Это тебе.
Недавно вон в /v/ был бугурт про пикрелейтед.
8 гигабайт ОЗУ для вот этого вот, тогда как у сеги было 64 килобайта на борту.
Но всё равно сожрут ведь, куда они денутся-то.
27/07/21 Втр 21:46:00 2108901378
>>2108140
> а остальные приведёшь, раз уж
bsearch и qsort - это единственное, что есть в стандартной библиотеке, так уж получилось. Это еще одна проблема Си - нужно переизобретать мир, даже примитивный динамический массив заново писать, тогда как в крестах все из коробки. Но не суть. Обе функции с воид поинтерами. Но остальное реализуется так же, любые сортировки, любые структуры данных, у тебя либо частная реализация, либо где-то торчит войд поинтер.
Аноним 27/07/21 Втр 23:27:59 2109092379
Аноним 27/07/21 Втр 23:44:20 2109099380
>>2108901
>Это еще одна проблема Си - нужно переизобретать мир
Это не проблема. Это чистая вкусовщина и никакого консенсуса на тему что же должно быть в стандартной либе а чего там быть не должно попросту не существует (в контексте любого языка). Кому-то надо раздутую либу и раздутый язык с кучей говна к которому никогда не прикасаешься, и для него даже сишка со своими гото и волатайлами могла бы быть поменьше.
>у тебя либо частная реализация, либо где-то торчит войд поинтер
Либо ты генерируешь код макросами. Никто и ничто тебя не заставит копипастить код, если ты этого сам не пожелаешь.
Аноним 27/07/21 Втр 23:54:04 2109109381
>>2109099
>а для кого-то даже сишка
Фикс
Аноним 28/07/21 Срд 00:29:37 2109127382
image.png 199Кб, 773x268
773x268
парни, обоссыте но объясните
я тут спрашивал про чары >>2107829 , анон тут >>2107839 объяснил, я вроде понял

но новый кейс на пикрил, у меня тот же вопрос почему это работает
тут я тоже во float2_add не на стеке выделяю result?

как-то я все больше понимаю что я нихуя не понимаю
Аноним 28/07/21 Срд 01:08:56 2109131383
>>2109092
Из-за ностальгии, скорее.
Но эта дискуссия совсем нерелейтед.

>>2109127
Постараюсь попроще.
Внутри функции result действительно выделяется на стеке.
Но при этом, float2 является структурой данных, и при возврате из функции она копируется целиком. Поэтому v3 - это по факту полная копия структуры result, которая располагается уже на стеке функции main.

Проблемы у тебя возникли бы, если бы в функции у тебя было бы, например,
> char string[10];
И ты бы вернул из функции char * - в этом случае при возврате скопируется только указатель на массив, а сам массив будет потерян, ведь он располагался на стеке.
То же самое происходит, если ты пытаешься из внутренней функции вернуть
> const char string[] = "Hello";
Механизм работы точно такой же, но при этом поскольку константный литерал "Hello" лежит не на стеке, а в секции данных, то проблем в этом случае уже не возникнет.

В Си простые типы (int, float) копируются целиком, структуры копируются целиком, а вот массивы передаются только по указателю.
Как-то так.
Аноним 28/07/21 Срд 01:53:31 2109139384
>>2109131
ну ты боженька, спс большое, дай господь тебе долгой и счастливой жизни.

Тогда, я так понял, такие фокусы не получатся уже, если у меня в структуре будут указатели либо массивы, тогда уже под эти поля надо выделять динамическую память, иначе данные потруться когда выйду из функции? я правильно понял?
Аноним 28/07/21 Срд 02:17:03 2109141385
>>2109139
:3

Всё верно понимаешь, но там есть ещё одна тонкость, связанная с массивами и указателями.
Если у тебя есть структура
> struct yoba_s { int a[4]; int * b; }
И какая-то переменная этого типа, например, yoba_1.
То это означает то, что у тебя есть где-то область памяти, в которой подряд идут четыре целых числа int (в структурах массивы располагаются прямо "внутри" них), а затем указатель на массив из int.
Соответственно, если ты напишешь
> struct yoba_s yoba_2 = yoba_1;
То у тебя появится где-то на стеке вторая такая же структура, в которой будет точно такие же четыре int (опять же, структуры копируются целиком) и точно такой же указатель на массив int, указывающий на ту же самую область памяти, что и оригинальный.

Чтобы сделать полную "глубокую" копию этой структуры, тебе нужно будет после присваивания отдельно выделить память под поле b структуры yoba_2 и скопировать поле b в эту память из структуры yoba_1. В противном случае, если этого не сделать, массив a скопируется как ты ожидаешь, а вот массив b при изменении в структуре yoba_1 будет изменяться и в структуре yoba_2.
Аноним 28/07/21 Срд 02:44:56 2109143386
Допустим, есть функция, которая пушит элемент в конец связного списка, обращась к нему по его "хвосту":
void push(int value)
{
__struct node_t *node = malloc(sizeof(struct node_t));
__node->value = value;
__node->next = NULL;
__tail->next = node;
__tail = tail->next;
}

При последовательном вызове push() вне цикла всё нормально - элементы добавляются в список как надо. В цикле for или while вызов на первой итерации добавляет элемент, а последующие переписывают его по тому же адресу. Объясните нубу, как это работает?
Аноним 28/07/21 Срд 04:10:10 2109151387
>>2109143
> Объясните нубу, как это работает?
__tail->next = node;
__tail = tail->next;

Это чо ха хуйня? __tail = node
Аноним 28/07/21 Срд 10:02:47 2109243388
Что делать когда надо вводить много общих переменных? По ходу разработки сверху main ебнутый список образуется, где сложно орентироваться. Это нормально?
Аноним 28/07/21 Срд 10:23:49 2109262389
>>2109243
Ну это какбэ основной вызов программирования, что у тебя общего стейта становится больше и больше и в какой-то момент ты уже перестаёшь в нём ориентироваться. Для этого и придумывают всевозможные паттерны и парадигмы. ФП, например, минимизирует протечку стейта, декларируя что функции должны быть чистыми. ООП максимально изолирует стейт, распиливая его на кусочки и распихивая по объектам, где им сравнительно легко управлять. Вот и думай.
Аноним 28/07/21 Срд 10:44:02 2109271390
>>2109141
ага, понятненько

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

вроде даже как-то просто все
фух, вот это меня осенило, спс еще раз, анончик
Аноним 28/07/21 Срд 12:35:14 2109411391
>>2109151
tail на последний элемент списка указывает. Ты не добавляешь элемент в список, а просто переписываешь уже существующий.
Аноним 28/07/21 Срд 13:55:25 2109471392
tumblr2090ee899[...].png 59Кб, 216x233
216x233
>>2109271
Всё верно понимаешь!
Удачи тебе ещё раз в грызне гранита науки

>>2109143
Проблем не вижу, если честно.
Выкладывай полный код, как вызываешь внутри цикла.

>>2109151
> tail = tail->next;
> tail = node
Так это одно и то же ведь.

>>2109243
Смотря чего ты пишешь, но обычно нет, не нормально.
Объявляй переменные по ходу, сишка уже давным-давно позволяет так делать.
Разбивай функцию main() на подфункции или хотя бы на { блоки }, объявляй локальные для блоков кода переменные внутри этих самых блоков - они не будут видны для кода вне блока.
Сливай переменные в структуры, если какие-то из них по смыслу кода лучше смотрятся вместе.
Аноним 28/07/21 Срд 14:03:16 2109481393
>>2109471
>Так это одно и то же ведь.
Ебобо?
Аноним 28/07/21 Срд 14:41:09 2109534394
c353568fd458655[...].jpg 23Кб, 248x301
248x301
>>2109481
Ну давай, расскажи нам, чем
> tail->next = node;
> tail = tail->next;
отличается от
> tail->next = node;
> tail = node;
Аноним 28/07/21 Срд 14:47:53 2109546395
>>2109471
>Проблем не вижу, если честно.
Проблем и нет; после дебага оказалось, что дело вообще не в этом.

>>2109151
Да, ты прав, я тут >>2109411 тупанул немного, думая, что ты весь цитированный тобой код хочешь на tail = node заменить.
Так-то конечно то же самое, но изначального вопроса это не касается.
Аноним 28/07/21 Срд 14:50:48 2109549396
>>2109534
>> tail = tail->next;
Тем что это node->next текущего узла которое вероятно 0 или говно, ты глупенький?
Аноним 28/07/21 Срд 14:54:24 2109555397
Аноним 28/07/21 Срд 15:45:11 2109676398
>>2108700
Ориентируются на исходники юниксов и линуксов, но там много и устаревших приемов
Аноним 28/07/21 Срд 16:08:44 2109714399
>>2109676
>линуксов
Сейчас бы каргокультировать на говнлподелие обоссаного фина
Аноним 28/07/21 Срд 17:32:31 2109891400
>>2109714
Ну не ориентируйся. Тут тебе не раби, на что хочешь, на то и ориентируешься.
Аноним 28/07/21 Срд 17:35:18 2109899401
>>2109549
я глупенький,
еще раз объясните пожалуйста, только языком, понятным для аутистов почему
>> tail->next = node;
>> tail = tail->next;
>отличается от
>> tail->next = node;
>> tail = node;
?
Аноним 28/07/21 Срд 17:36:17 2109900402
Аноним 28/07/21 Срд 18:32:02 2109968403
>>2095582
А крестам, блять, вышка прям всралась штоле по-твоему? В каком месте?
Аноним 28/07/21 Срд 18:34:01 2109973404
Аноним 28/07/21 Срд 18:37:58 2109984405
>>2109891
Какое нахой “раби”? Ruby? МГИМО финишд? Он, блять, “рУби”
Аноним 28/07/21 Срд 18:50:17 2109996406
Аноним 28/07/21 Срд 18:53:40 2110002407
>>2109968
Не в том смысле, что для крестов нужна, а в том, что "для крестов даже не нужна, а кресты в 500 раз сложнее, для си тем более не нужна".
Аноним 28/07/21 Срд 19:04:08 2110028408
>>2109973
та всмысле? вон братишка чет спизданул, правда я нихуя не понял, там написано на эльфийском, видимо
> Тем что это node->next текущего узла которое вероятно 0 или говно, ты глупенький?
второй братик рапортовал что он обосрался

всмысле ничем? братик зря обосрался что-ли?
Аноним 28/07/21 Срд 19:25:20 2110075409
>>2109899
>еще раз объясните пожалуйста, только языком, понятным для аутистов почему
Ничем, просто второй вариант более очевидный
Аноним 28/07/21 Срд 19:26:46 2110076410
>>2110028
>всмысле ничем? братик зря обосрался что-ли?
Пошел на хуй, обосрался и обосрался, признал свою ошибку, что доебался то?
Аноним 28/07/21 Срд 19:32:11 2110086411
>>2110002
>кресты в 500 раз сложнее,
Кресты кстати легче чем Си. На Сях иной раз нужно городить костыли под 1000 строк, в то время на Крестах тоже самое можно сделать через какой-нибудь темплейт с лямбдами где все это займет 200 строк.
Аноним 28/07/21 Срд 21:24:41 2110191412
>>2110086
Количество кода = сложность, понял тебя.
Я-то думал что количество нативного языкового барахла и объём стандартной либы определяет сложность, т.к. их надо ещё изучать и знать где и как применять, но раз так значит так.
Аноним 28/07/21 Срд 22:16:20 2110247413
1.png 155Кб, 895x718
895x718
>>2110028
Чел, ты просто двух анонов перепутал.
Другой анон подумал, что там в первом случае tail->next не проинициализирован. На самом деле всё инициализировано предыдущей строкой - ну ошибся, ну с кем не бывает?

Код действительно ничем не отличается, только лишь читаемостью.
Аноним 28/07/21 Срд 22:47:16 2110270414
Аноны, есть говнокод из >>2093997 который не делает ничего сложного(открыть порт, получить данные, записать их в файл). Вопрос, какой самый простой способ написать к нему gui( использовать visual studio?), который будет работать на семействе операционных систем win xp - win 10?
Аноним 28/07/21 Срд 22:47:39 2110271415
Аноны, есть говнокод из >>2093997 который не делает ничего сложного(открыть порт, получить данные, записать их в файл). Вопрос, какой самый простой способ написать к нему gui( использовать visual studio?), который будет работать на семействе операционных систем win xp - win 10?
28/07/21 Срд 23:24:21 2110286416
>>2110270
Гуглишь: DialogBoxParam, сам диалог нарисуешь в Visual Studio (там можно .rc создать) или в Pelles C (100 метров вместо 6 гигов вижуалстудии) или в ResEdit (2 метра, http://rsdt.free.fr/ResEdit-win32.7z сайт https://resedit.net/ умер в этом году, есть в вебархиве).

> есть говнокод из >>2093997
Это под линукс, в винде никаких дев-тетивай нету. Нужно будет CreateFile("COMxx"...), SetCommState, Read/WriteFile, возможно WaitCommEvent, вот это все.
Аноним 29/07/21 Чтв 01:58:44 2110341417
>>2110247
да я дейсвительно братишек перепутал, с кем не бывает на двоще

>>2110076
да братик, я не доебался, я за тебя распереживался
я тоже обосрался, еще хуже чем ты, я братишек перепутал, за что категорически извиняюсь
вообще-то обидно было, что ты нахуй послал меня
Аноним 30/07/21 Птн 01:43:38 2111463418
image.png 353Кб, 1065x329
1065x329
привет братишки, эт снова я, скучал по вам

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

с меня как обычно огромное спасибо!
Аноним 30/07/21 Птн 02:14:09 2111486419
>>2111463
нашел у них ишью на гитхабе, можно с агрументом --debug
запустить бинарник с тестами и с гдб удаленно подключиться и дебажить, но гемор тот еще.
а я только в виме настроил гдб, а тут через какую-то шляпу надо запускать. Нормально что-ли сделать нельзя было. Эх, горе конечно (
хотелось бы найти способ чтобы просто скормить тесты гдб и стопнуться на брейкпоинте
Аноним 30/07/21 Птн 03:24:42 2111507420
>>2111463
Мдя... С GoogleTest из мира C++ таких проблем нет.
Аноним 30/07/21 Птн 03:33:56 2111511421
>>2111486
> скормить тесты
Алексей, зачем тебе тесты на С?
Аноним 30/07/21 Птн 03:50:09 2111514422
>>2111511
хз, тип хочешь подебажить в определенных условиях функционал свой, написал тест, нужные аргументы проставил, вызвал метод, брейкпоинт поставил и погнал, удобно. Я так на рубях привык, тут даже дело не в тесте, а именно в возможности продебажить, нашел пофасту свой тесткейс, брейкпоинт поставил и погнал. да и на будущее юнит тесты остаются, полезно тоже

А что, на си нет культуры тесты писать? мне кажется как раз наоборот, на каком нибудь питоне или руби можно хуй забить, а в си надо.

Зови меня просто Леша, или Леха, как тебе удобнее

>>2111507
GoogleTest можно си тестить?
Аноним 30/07/21 Птн 03:58:02 2111517423
>>2111514
>хз, тип хочешь подебажить в определенных условиях функционал свой, написал тест, нужные аргументы проставил
Все правильно, но на Си писать тесты это жопа, бери любой скриптовый язык который может с Си. Я в обще все на Перле прототипирую, потом на Си перекидываю. Си это ммм, вишенка на твоем разработанном и отлаженном торте.
30/07/21 Птн 07:05:42 2111548424
>>2111514
> А что, на си нет культуры тесты писать?
Это не культура, это бескультурие. Лучше потратить время на написание качественного кода, вместо кучи некачественных тестов.
Вообще, достаточно сделать отдельный main с ассертами внутри #ifdef TEST, какие еще нахуй фреймворки.
Аноним 30/07/21 Птн 09:54:31 2111615425
>>2111507
С самим C++ при этом куча других проблем.
Аноним 30/07/21 Птн 10:39:21 2111679426
>>2111548
>Это не культура, это бескультурие. Лучше потратить время на написание качественного кода, вместо кучи некачественных тестов.
я же говорю, что для дебага, как ты можешь написать качественный код не отладив его? и почему идет сравнение качественного кода и некачественных тестов, все равно что сравнивать свежий кексик с черствой печенюхой.

>Вообще, достаточно сделать отдельный main с ассертами внутри #ifdef TEST, какие еще нахуй фреймворки.
ну можно и так, я ж поэтому и спрашиваю, как принято.
В рубях тоже можно сделать test.rb файл и в нем ебошить что-то типо
raise "Test failed" unless actual == expected
но никто же так не делает.
Да и вон видишь как допустим этот тест фреймворк тесткейсы запускает, в потоках или форках хуй знает, видимо изолирует как-то их друг от друга.
Хотя я подозревал что в си сидят суровые дядьки с компилятором в голове, и они не отлаживают, они видят все проблемы сразу как только посмотрят на код
Но я же не такой (( пока)

>>2111517
не понял немного подхода, ты тип пишешь на перле и потом все на си переписываешь?
либо какой-то функционал переписываешь на си, но в общем это все равно перл? и как это спасает от написания тестов?
Аноним 30/07/21 Птн 13:56:20 2111949427
>>2110191
Все мы ошибаемся, так что всё нормально! Главное усвоить новый опыт
30/07/21 Птн 20:24:32 2112397428
>>2111679
> почему идет сравнение качественного кода и некачественных тестов
Потому что тестировать strlen("x") == 1 глупо. Чтобы в тестах был смысл, нужно увидеть и проверить граничные условия и специальные случаи. Если ты их не видишь или видишь не все, то твои тесты некачественные. Это во-первых.

Во-вторых, вот у тебя есть код: int values[3] = {0}; for (i = 0; i <= 3; i+=) values += 2; Вот ты написал тест, assert, memcmp, все дела и пошел спать довольный. А завтра у тебя код падает, тест работает. Или наоборот. А потому что в Си есть UB. Это скорее всего та причина, по которой твой фреймворк запускает тесты в потоках. Но потоки все равно ничего не гарантируют, на то оно и UB.
Аноним 30/07/21 Птн 21:44:25 2112476429
>>2112397
да я согласен что юнит тесты вообще не дают никаких гарантий. Я на практике это знаю.
но ты просто так говоришь что вот не будешь ты писать тесты, и код качественней станет за счет того что ты больше времени на него потратил. я с этим категорически не согласен.
Во первых тебе все равно надо как-то прогнать/запустить то что ты написал, как ты можешь быть увереным в том что код твой рабочий, если ты его не запустил. Юнит тесты отличное этому применение, я для этого их и юзаю, а не для уверенности что я обработал вообще все состояния и исходы.
Во вторых пока ты тестишь вручную, по сути тоже самое что и тестами, только в случае тестов, они у тебя остаются на будущее. В случае какого-то рефакторинга, добавление каких-либо данных или фичей старые тесты помогут понять не сломался ли старый функционал, как минимум то что было покрыто.
Да и как по мне когда у тебя описаны основные кейсы тестами то отладка ускоряется, тебе всего лишь в нужное состояние надо брейкпоинт вставить, и сиди колупай что происходит. Сам тест написать не сложно, хуле вызвал ассерт свою функцию что ожидается. Разработка как по мне ускоряется когда рука набита тесты писать.
30/07/21 Птн 23:15:46 2112532430
image.png 689Кб, 800x534
800x534
>>2112476
> как ты можешь быть увереным в том что код твой рабочий, если ты его не запустил
Я сейчас скажу страшную вещь, адепты TDD от нее рвутся обычно. Ты не поверишь, но я свой код читаю. В особо сложных случаях (реализации алгоритмов, а не перекладывание байтиков из одной переменной в другую) еще и комментирую возможные входные данные и реакцию на них, потому что спустя полгода нихуя не очевидно, почему оно написано именно так.

> старые тесты помогут понять не сломался ли старый функционал
Вот это реальный юзкейс, но рефакторинг еще не факт что будет. Это как с избыточными абстракциями в ООП: чаще всего интерфейс не имеет больше одной реализации, код не переиспользуются, но все равно пишется куча ненужного кода на тот невероятный случай, если вдруг когда-нибудь понадобится сделать что-то странное. Будет рефакторинг - тогда придет время писать тесты (для публичного апи), без этого никак. Не будет - останется больше времени на написание кода.
Аноним 31/07/21 Суб 00:40:53 2112573431
>>2112532
>Ты не поверишь, но я свой код читаю.
ну я так пока не могу, я только вкатываюсь в си. я не могу быть уверен на 100% что я написал код, который работает как надо, просто потому что у меня опыта на си толком нет.
и я не адепт TDD, скорее R(epl)DD, но так как репла в си нет, я пытаюсь сделать реализацию, запустить ее с какими-то входными данными и пройти в гдб по шагам. Но запускать мне проще через тесты, чем все время менять тело main функции, да и других причин хватает. Возможно я пытаюсь применить подход не применимый к си.
Аноним 31/07/21 Суб 01:38:43 2112595432
>>2112573
>я не могу быть уверен на 100% что я написал код, который работает как надо
Тесты тебе не помогут
Аноним 31/07/21 Суб 06:06:04 2112624433
Лол, вы ИТТ на полном серьезе затираете мантры уровня ТЕСТЫ НЕ НУЖНЫ потому что в сишке это боль? Пиздец вы дегроиды.
Аноним 31/07/21 Суб 13:00:22 2112811434
>>2112624
Тесты не нужны, я живу активной и полноценной жизнью. Каждая отладка занимает 20 минут. А потом я иду писать void ptr, я не писал void ptr неделю!!! Пойду попишу.
Аноним 31/07/21 Суб 13:02:54 2112812435
>>2112624
Тесты не нужны, я живу активной и полноценной жизнью. Каждая отладка занимает 20 минут. А потом я иду писать void ⚹ptr, я не писал void ⚹ptr неделю!!! Пойду попишу.
Аноним 31/07/21 Суб 17:38:02 2113177436
как в си с utf-8 работать?
Аноним 31/07/21 Суб 17:53:28 2113185437
>>2112624
Тесты часто проверяют банальщину, что тратит время, а сложное протестировать ты всё равно не сможешь, ибо обычно прогер всё проверяет на работоспособность и если ошибка возникает, то она такой сложности, что ты заебёшься придумывать тест для неё.
31/07/21 Суб 21:51:21 2113388438
>>2113177
Так, как будто никакого UTF-8 не существует. Он вполне прозрачен, особенно пока твоя обработка ограничивается ASCII-символами (ну там путь к файлу по слешам порезать или текст на строчки разбить). Если нужно будет всякое там регистронезависимое сравнение, возьмешь ICU уже по-взрослому, но обычно это означает гораздо больше ебли с юникодом, чем ты можешь себе представить.
Аноним 31/07/21 Суб 22:52:43 2113418439
>>2112624
Но ведь тесты алголоподобным языкам реально не нужны, ведь есть борщехлёбские тройки Хоара.
Аноним 01/08/21 Вск 05:25:04 2113521440
>>2113185
> часто проверяют банальщину
Не банальщину, а edge cases, чтобы при очередном рефакторинге тебя банальной off-by-one error по невнимательности не убило нахуй.
> сложное протестировать ты всё равно не сможешь
Сложное руками тестировать не нужно, для этого есть fuzzing. Руками нужно тестить то, на чем уже погорел, т.е. удостовериться, что все найденные баги действительно пофикшены.
> если ошибка возникает, то она такой сложности, что ты заебёшься придумывать тест
Это указывает на проблемы в дизайне кода. Функции надо делать размером поменьше, абстракции попроще, а state локализовывать.
какие же сишники дегенераты, пиздец, подумать только, я лет 10 назад сам таким же был
01/08/21 Вск 08:37:31 2113548441
>>2113521
> edge cases
Я уже говорил об этом выше. Если знаешь, что тебя тут может ебануть - проще перепроверить условие, а не писать тест. Если не знаешь или предполагаешь неверно - и код, и тест будут неверными.

> fuzzing
Это называется рандом. Или найдет проблему, или не найдет. Второе вероятнее, зато можно говорить работодателю модные слова и уверять, что ты не занимаешься хуйней вместо написания кода.

> Функции надо делать размером поменьше
Начинаются своих макконнеллов, а потом у них хром с одной вкладкой тормозит. Надо, да. Еще бы это было всегда возможно, вообще было бы здорово.
Аноним 01/08/21 Вск 10:17:35 2113616442
>>2113548
Ты ему про Ерёму, а он тебе про Фому.
> Если знаешь, что тебя тут может ебануть - проще перепроверить условие
А если не заметишь и проебёшься? А если это не твой код, и ты не знаешь? Такими темпами и код-ревью давай в пизду, а то что время на какую-то хуйню новомодную тратить, кабану код выкатывать ещё вчера. Прелесть тестов именно в том, что то, что ты предлагаешь можно автоматизировать: вместо того, чтобы всем постоянно делать это вручную, достаточно запрограммировать один раз.
> Если не знаешь или предполагаешь неверно - и код, и тест будут неверными.
Это всё детский максимализм. Вот у тебя и еще сотни разработчиков проект на 10 миллионов строк, какая-нибудь залупа из твоего кода дергает функцию, написанную 10 лет назад чуваком, который уже помер, а она тормозит. Можно пойти, выбросить к хуям так любимые сишниками связанные списки и воткнуть туда хеш-таблицу. Тебе не надо тратить время и разбираться как эта функция работает, тебе лишь интересно убрать десяток миллисекунд латенси в своей API или что там у тебя. Если функция покрыта тестами, то у тебя на подобный фокус уйдет минут 15, дальше ты можешь дальше идти заниматься своими делами, а иначе нужно сидеть и изучать бизнес логику, играть сам с собой в виртуальную машину и т.п. Нахуя? Ну ок, вот решил ты полностью переписать этот старый кусок говна. Молодец, а что дальше? А дальше, если у остальных есть тесты, то быстро всплывет, что то, что ты посчитал в коде придурью и выбросил за ненужностью оказывается было необходимо для какой-то хитрой ебанины, про которую ты вообще раньше и не слышал даже. Проблема, безусловно, в ебанине, которая, возможно, неверно понимает контракт, но фишка в том, что баг удалось поймать до релиза. А не было бы тестов - уронил бы прод, потому что полез своими ручонками куда не следует.
Аноним 01/08/21 Вск 10:36:41 2113624443
>>2113521
>Функции надо делать размером поменьше
Это вот эти вот легендарные погромисты "мам функция слишком длинная, разделю-ка я её на три и вызову их последовательно, ну и что что они у меня больше нигде в программе не вызываются", превращающие нормальный структурированный код в лапшу.
Аноним 01/08/21 Вск 11:06:46 2113642444
>>2113624
Все с точностью до наоборот: превращают лапшу в структурированный код. Банально потому, что у функций есть осмысленные человекочитаемые имена. Но меру тоже надо знать, это да. Писечка, конечно, вся именно в правильно выбранных абстракциях и композиции.
Аноним 01/08/21 Вск 12:35:08 2113739445
>>2113642
>у функций
>осмысленные человекочитаемые имена
Более читаемые, чем комментарии в длинной функции? Сильно сомневаюсь, что названия функций способны достичь такого уровня читаемости, которого способен достичь обычный английский (да и любой человекочитаемый) язык, со всеми словоформами и знаками препинания.
Если по замыслу большое количество кода выполняется последовательно (например инициализация в игре или ещё где), то так оно и должно выглядеть, представление же длинной последовательности кода в виде лапши снижает читаемость и вводит читателя в заблуждение — если некая часть длинной функции изолирована, ты заставляешь человека держать в голове, что эта функция может вызываться откуда-то ещё, и ему прежде чем исправить баг в твоём коде придётся ещё всю лапшу изучить и убедиться, что это именно лапша а не хитровыебанный код, в котором можно что-то поломать.
Аноним 01/08/21 Вск 13:57:36 2113825446
>>2113739
зачем тебе прыгать по лапше функций чтобы понять что эти функции делают. Из названия функции должно быть понятно что она делает.

мимо другой анон
Аноним 01/08/21 Вск 14:01:28 2113830447
Аноним 01/08/21 Вск 14:23:33 2113852448
>>2113739
> чем комментарии в длинной функции
Возможно, я для тебя сейчас сделаю великое открытие, но комментарии зачастую являются индикатором как раз-таки хуёвого кода. В самих комментариях, разумеется, нет ничего плохого (за исключением того, что на практике их никто никогда не поддерживает, и, как следствие, они мгновенно протухают), это именно недостаток экспрессивности твоего кода, что толкает на их написание. Пиздатый код выезжает уже на грамотном именовании сущностей, не зря шутка про two hard things in computer science ни хуя не шутка. Исключениями являются docstrings, пояснения за контринтуитивные вещи (с номером бага, ссылкой на литературу и т.п.) и пруфы указанной асимптотики или корректности кода.
Аноним 01/08/21 Вск 14:33:28 2113863449
>>2113739
И да, забыл добавить.
> ты заставляешь человека держать в голове, что эта функция может вызываться откуда-то ещё
Это глупость, не надо так думать. Функция это просто последовательность команд. Точка. В идеале она должна делать ровно одну вещь и её контракт (вход, выход, внутренний стейт включая эксепшены) должен быть предельно понятен. Если что-то имеет права быть функцией, оно должно быть функцией, и похуй, что она вызывается в одном месте. Сегодня в одном, а завтра дохуя где. Ты код для людей пишешь, а не для компилятора. Компилятору поебать, он все эти функции заинлайнит, если имеет смысл.
> придётся ещё всю лапшу изучить и убедиться, что это именно лапша а не хитровыебанный код, в котором можно что-то поломать
Для предотвращения ровно этого и нужны юнит-тесты, лол.
Аноним 01/08/21 Вск 17:00:32 2114000450
Так-так, тесты не делаем, комментарии не пишем, всё нужное помещаем в одну большую функцию void zdelat_zaebis(), и вызываем её один раз. То есть тратим всё время на написание кода, а не на эти всякие шуры-муры бесполезные. Я все правильно усвоил? Кто-то из вас уже готов меня нанимать?
Аноним 01/08/21 Вск 17:05:21 2114006451
>>2113852
>Возможно, я для тебя сейчас сделаю великое открытие
Возможно я после этих слов пост просто скрою. Хотя какое "возможно" — так и сделаю. Оставь свои великие открытия при себе, когда о них не просят.
Аноним 01/08/21 Вск 17:06:04 2114008452
>>2114000
Не гори, найдёшь ты себе работу когда-нибудь.
Аноним 01/08/21 Вск 17:08:11 2114013453
>>2114008
При чём тут горение? Я просто пытаюсь усвоить все советы тредика. Что-то не правильно посоветовали? Я, вроде, всё прочитал.
Аноним 01/08/21 Вск 17:12:07 2114016454
>>2114013
Понятия не имею, причём тут твоё горение, на самом деле. Ну просто вот взял и порвался. Кто-то попрал твою догму, а ты загорелся, судя по всему. Тред предполагает дискуссию, а не грустные попытки в троллинг с горелой жопой. Потушись сначала, а потом уже отпускай саркастичные комментарии.
Аноним 01/08/21 Вск 17:14:19 2114019455
>>2114016
> Кто-то попрал твою догму
У меня нет никакой догмы? Я пришёл тредик почитать, а тут такие советы. Решил переспросить на всякий случай.
01/08/21 Вск 17:22:04 2114026456
>>2113616
> Если функция покрыта тестами, то у тебя на подобный фокус уйдет минут 15
И об этом я тоже уже писал. Если тебе надо трогать чужой код, ты можешь покрыть его тестами предварительно. Именно если, потому скорее всего то, что ты усираясь покрывал тестами, будет выкинуто через пару лет целиком вместе со всеми тестами. Я видел очень много разнообразных "заделов на будущее", и практически никогда они не использовались.

>>2113852
> комментарии зачастую являются индикатором как раз-таки хуёвого кода
Давай ты нам напишешь что-нибудь нетривиальное: какое-нибудь сжатие или обработку сигналов с кучей математики, и мы посмотрим на твой хороший и понятный код, в котором нет комментариев, зато есть охуенные понятные имена функций. И еще на то, как ты в имени константы опишешь, почему она равна двум, а не трем. Вся эта хуйня с двустрочными функциями (заголовок и return) - это когда ты на жабке из одного сервиса другой дергаешь. А когда ты начинаешь писать программы, а не прослойки и обертки, комментариев вполне может быть строк по десять на одну строчку кода.

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

>>2113863
> внутренний стейт включая эксепшены
А, ну точно жаба, так бы сразу и сказал.
Аноним 01/08/21 Вск 18:54:17 2114106457
Анон, который пишет бутлоадер, как успехи?
Аноним 01/08/21 Вск 18:59:21 2114109458
>>2113852
Вижу что Фаулер у тебя от зубов отскакивает, молодец.
>>2113863
>Это глупость, не надо так думать. Функция это просто последовательность команд. Точка.
Глупость это как раз твоя проповедь. Вот есть в ЯП такой выразительный инструмент, как процедурная абстракция. Где-то его нет, а у тебя он есть. Как его применять? Ну наверное когда у тебя копипаст кода начинается, а ты такой херак пишешь функцию и вызываешь её во всех тех местах, где у тебя была копипаста. Как ты его предлагаешь применять? Ты предлагаешь написать функцию и тут же её вызвать единственный раз и больше никогда нигде не вызывать. Можно ли так сделать? Кто ж тебе запретит. Нужно ли? Для этого надо ответить на вопрос "чем это будет лучше, чем если ты комментариями пояснишь что у тебя делает кусок кода?" Для меня ответ "ничем", причём функция даже хуже, т.к. в её названии особо не разгуляешься. Дальше копипастишь хуйню из книжки фаулера:
>за исключением того, что на практике их никто никогда не поддерживает, и, как следствие, они мгновенно протухают
Скажи мне, а чем в этом отношении название функции лучше комментария? Типа комментарий можно не поддерживать, а название функции не поддерживать нельзя? А кто тебе запретит? Ну точно так же влезешь ты или кто-то ещё в твою функцию, сделает так, что она будет делать совершенно не то, в честь чего названа, и какой тест тебе это поймает?
>В идеале она должна делать ровно одну вещь
Что понимается под одной вещью, о великий гуру? Так-то даже функция возведения в квадрат не занимается никакой одной вещью, ведь возведение в квадрат можно представить как умножение числа само на себя (а это ведь одна вещь), ну а умножение по крайней мере в контексте целых чисел можно представить как суммирование, что является не одной операцией, а последовательностью операций.
Вся эта хуйня про одни вещи дико субъективна, а я не должен заниматься философией во время программирования. Если книжка просит меня становиться философом во время программирования — это плохая книжка.
>Если что-то имеет права быть функцией, оно должно быть функцией
А что понимается под "иметь право"? Я не только философом, но ещё и юристом должен быть?
>Ты код для людей пишешь, а не для компилятора.
Ну а комментарий для кого пишется, сладкий, для компилятора разве?
02/08/21 Пнд 06:02:13 2114494459
>>2114026
> Если тебе надо трогать чужой код, ты можешь покрыть его тестами предварительно.
Блядь, что ты несешь, ты же просто поехавший.
> Давай ты нам напишешь что-нибудь нетривиальное
Давай ты не будешь передёргивать: про наукоёмкие вещи я написал двумя предложениями дальше твоего гринтекста. Ссылку на whitepaper в комментарии оставить за милое дело.
> И так как мы тут пишем на сишке, а не на жабе, у нас такого большинство.
Возьми репу любого Пинус-дистра и подсчитай сколько долей процента сишного кода приходится на сжатие или обработку сигналов.
> А, ну точно жаба, так бы сразу и сказал.
У тебя какая-то нездоровая фиксация на жабе. Эксепшены с раскруткой стека есть в десятках если не сотнях языков, начиная от крестов, заканчивая питухоном.
>>2114109
> Вижу что Фаулер у тебя от зубов отскакивает
Понятия не имею кто такой и чем знаменит.
> Как его применять? Ну наверное
Свое наверное себе в жопу засунуть можешь.
> Типа комментарий можно не поддерживать, а название функции не поддерживать нельзя?
На практике так и выходит, на поддержку комментариев даже при наличии код ревью все забивают хуй, и уже спустя пару лет от них больше вреда (т.к. дезинформируют), чем пользы.
> Что понимается под одной вещью, о великий гуру?
Иди перечитывай SICP, там во всех примерах практически эталон того, как надо писать код. Если ещё ни разу не читал, просто уёбывай с этой доски, сука.
> Ну а комментарий для кого пишется, сладкий, для компилятора разве?
Зачем вы такие тупые? Я же написал: в самих комментариях нет ничего плохого, но зачастую это индикатор того, что у твоего кода недостаток экспрессивности, что, собственно, и толкает тебя на их написание. Вместо этого нужно подумать ещё раз правильно ли выбраны абстракции и хорошо ли согласована схема именования сущностей.
02/08/21 Пнд 09:15:30 2114547460
>>2114494
> Ссылку на whitepaper
Ни разу не дает понимания того, как именно ты это реализовал и почему именно так.

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

> У тебя какая-то нездоровая фиксация на жабе
Ладно бы жаба, так ты еще и лисп принес. Жаба - отличный пример языка, где исключительно по экономическим (не техническим!) причинам отношение количества логики к количеству классовметодов стремится к нулю.

> на поддержку комментариев даже при наличии код ревью все забивают хуй
Ну конечно. Может быть, потому что слишком долго обсуждали на ревью, правильно ли названа функция, и не стоит ли ее разбить еще на три?
02/08/21 Пнд 09:21:49 2114552461
>>2114547
Блядь, какой же ты дебил, просто пиздец.
Аноним 02/08/21 Пнд 12:24:23 2114681462
>>2114494
Жди, вечером я трахну тебя, сейчас лень.
Аноним 02/08/21 Пнд 15:22:22 2114825463
1548012290387.png 7Кб, 256x196
256x196
зачем выёбываться вот так:

if(3 < 2 || 2 > 5){
printf("True\n");
} else {
printf("Fasle\n");
}

если можно написать вот так по-нормальному, просто, понятно и компакто:

if(3 < 2 || 2 > 5){printf("True\n");}
else {printf("Fasle\n");}
Аноним 02/08/21 Пнд 15:37:03 2114831464
>>2114825
в современных языках можно писать
print_newline (3<2 || 2>5)
02/08/21 Пнд 15:37:17 2114832465
>>2114825
Компактно - это puts("Fasle"). А вообще, для любителей писать в одну строку есть тернарный оператор: printf((expr) ? "True\n" : "Fasle\n");
Аноним 02/08/21 Пнд 16:06:25 2114857466
020821-160543.png 12Кб, 379x142
379x142
>>2114825
У тебя не просто и компактно, а нечитаемая каша.

Аноним 02/08/21 Пнд 16:09:08 2114863467
>>2114832
о вот это норм тема, спасибо анон
Аноним 02/08/21 Пнд 16:10:37 2114867468
>>2114857
так эти постоянные переносы но новую строку ещё больше запутывают
Аноним 02/08/21 Пнд 18:28:14 2115010469
>>2114867
Почему ты уверен в своей правоте, когда эти переносы и были придуманы для тогл, чтобы не запутываться. И миллиарды людей ими пользуются именно по этой причине. Но появляешься ты, и считаешь, что все вокруг идиоты.

Запутывают они тебя лично. Потому что ты дурак.
Аноним 02/08/21 Пнд 18:42:46 2115033470
>>2115010
ну я же и спросил зачем с какой целью эти переносы делаются, если проще всё в одну строку написать, хули ты пригорел то?
Аноним 02/08/21 Пнд 18:47:00 2115038471
>>2115033
У тебя типичная нубская дурь. Типа я напишу компактнее и это однозначно заебись.
На самом деле это далеко не всегда так, скорее наоборот.
Аноним 02/08/21 Пнд 21:05:25 2115203472
>>2114825
А зачем тебе скобки, я иногда так пишу, если выражение однострочное и с одним тривиальным иф

if(3 < 2 || 2 > 5) printf("True\n");

если с елсе, то

if(3 < 2 || 2 > 5)
printf("True\n");
else
printf("Fasle\n");

Сейчас всякие питонщики накинутся, потому что только они могут допустить ошибку в бесскобочной форме
Аноним 02/08/21 Пнд 21:06:50 2115204473
>>2115203
Бля табы во втором проебались, да и хуй с ними
Аноним 02/08/21 Пнд 23:48:08 2115342474
>>2115033
Проще ровно наоборот, а не то, что ты там себе придумал.
Аноним 03/08/21 Втр 09:54:13 2115462475
>>2114825
Ha самом деле надо так:

if(3 < 2 || 2 > 5)
{
\tprintf("True\n");
}
else
{
\tprintf("Fasle\n");
}

Перенососрач вечен. И бессмысленен
Аноним 03/08/21 Втр 09:56:41 2115464476
>>2115462
Ах да, после иф еще пробел лучше ставить, т.е.:
> if (3 < 2 || 2 > 5)
> {
> \tprintf("True\n");
> }
> else
> {
> \tprintf("Fasle\n");
> }
Фикс
Аноним 03/08/21 Втр 11:32:21 2115574477
>>2033137

В общем случае нихуя не ускоряет (context switching же). И нужно больше не для этого, а для того чтобы выполнение одной задачи не блокировалось выполнением другой в real-time ПО типа физических движков, где при однопоточности программы движущиеся объекты обновлялись бы неравномерно; или в тех же апишках, где из-за очень тяжелого метода запросы на другие висели бы до ослиной пасхи.
03/08/21 Втр 14:15:14 2115723478
>>2115574
> не усоряет
У тебя одно ядро?
Аноним 03/08/21 Втр 16:31:54 2115876479
>>2115723
>У тебя одно ядро?

исправил, не благодари
Аноним 03/08/21 Втр 16:32:32 2115877480
>>2115876
блядь, ну я и еблан, я же нихуя не исправил
ай ладно похуй
Аноним 03/08/21 Втр 17:27:38 2115914481
Аноны, как сконпелировать мой хеловорд с freerdp?

gcc rdp.c -lcrypto -lssl -lfreerdp2
rdp_check.c:10:10: fatal error: freerdp/freerdp.h: No such file or directory
10 | #include <freerdp/freerdp.h>
| ^~~~~~~~~~~~~~~~~~~
compilation terminated.
Аноним 03/08/21 Втр 18:04:08 2115930482
Аноны, есть тут любители QT?

По нажатию на кнопку выполняю следующий код:

QByteArray serialdata = serial->readAll();
QByteArray bigdata;
bigdata.append(serialdata);

qDebug() << "read " << bigdata.size() << "bytes";

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



Вывод qDebug:

read 60 bytes
read 3968 bytes
read 3968 bytes
read 3968 bytes
read 3968 bytes
read 3968 bytes
read 3968 bytes
read 3968 bytes
read 3844 bytes
read 124 bytes
read 228 bytes
Аноним 03/08/21 Втр 18:50:38 2115971483
>>2115930
Это не си, а кресты, и тебе буфер наполнения данными надо создавать где-то уровнем выше, скорее всего в конструкторе класса, а не в функции приема данных.
Аноним 03/08/21 Втр 18:53:12 2115974484
>>2115930
А ридолл вызывай при приеме данных, сделай коннект на напомню что, дата реди или типа того.
Аноним 03/08/21 Втр 19:37:05 2116022485
Аноним 03/08/21 Втр 22:08:57 2116153486
>>2115723

Потоков может быть больше чем ядер.
Аноним 04/08/21 Срд 13:45:18 2116793487
Господа, есть неделя на изучение чистого C, из языков знаю только Python и JS, Что кто может посоветовать для максимальной скорости? Не буду подробно описывать ситуацию, просто срочно надо изучить, уделять буду часов по 10 в день.
От себя: Точно прочитаю книгу "C Programming Language", больше ничего в голову не приходит.
нужно максимально быстро с нуля за неделю научиться писать нормальный код на чистом C
Аноним 04/08/21 Срд 18:16:21 2117031488
Аноним 04/08/21 Срд 22:09:25 2117224489
Аноним 04/08/21 Срд 23:03:58 2117272490
зачем в гну в макросе макс присваиваются переменные
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })

почему просто нельзя?
#define max(a,b) (a) > (b) ? (a) : (b)
Аноним 05/08/21 Чтв 01:03:39 2117371491
>>2117272
Потому что макросы в си не гигиеничные.
Аноним 05/08/21 Чтв 01:07:35 2117375492
Аноним 05/08/21 Чтв 02:06:41 2117390493
Аноним 05/08/21 Чтв 02:50:01 2117396494
>>2030872
>вагона знаний
Это какого же, интересно? Я на чистом Си (без крестов) писал в 12 лет для DOS.
Там не нужен ни матан, ни теория категорий, ни лямбда-исчисление.
Си и Ассемблер - языки для тупых даунов, которые не могут осилить функциональное программирование.
Аноним 05/08/21 Чтв 03:23:09 2117415495
подскажите книженцию для 3 попытки вката в Си. в первый раз пробовал по книге кернигана и ричи, забросил, дальше была подробная и объемная книга стивена прата, до какого места там продвинулся не помню, но продвигался по ней медленно и мучительно, хотя книга на самом деле мне нравилась, т.к. там описывались низкоуровневые штуки. такая ситуевина, стоит ли снова кернигана и ричи читать? я туповат для тамошних заданий которые продвинутого уровня. мог долго сидеть и просто тупить в экран или что-то похожее. судя по воспоминаниям хочется сказать что у меня математическая/алгоритмическая база не очень хороша для них. .
извиняюсь за мелкобукву и несвязность мыслей, я - еблан.
Аноним 05/08/21 Чтв 03:51:40 2117433496
>>2117415
сори за правду, но походу Си это не твоё. Пробуй дальше Прату. По кернигану и ричи у тебя выйдет хуёво, там нужно прям хуярить на мотивации, а ты тут забрасываешь.

Пробуй, хуле.
Аноним 05/08/21 Чтв 04:10:52 2117443497
>>2117433
спасибо за честный ответ!!
буду пробовать
Аноним 05/08/21 Чтв 04:14:20 2117446498
>>2117443
Если прата и в правду не нравится, то тогда можно совершить небольшое отступление во время и почитать книгу дейтелов (https://vk.com/doc7608079_448866001) так то по сути тоже 1000 страниц, но упражнений больше чем в прате. Короче главное - чето делай.

Если тебе вот хуево поставь себе цель каждый день или через день садится читать главу и осиливать упражнения. Прочитал, сделал - пиздуй делать другие дела, в игорьки там поиграй. Мотивация хоть и важна кодеру но на ней далеко не убежишь, нужна дисциплина(как в армии)
Аноним 05/08/21 Чтв 04:14:58 2117447499
Аноним 05/08/21 Чтв 10:49:54 2117562500
>>2117396
ну не всем же быть такими невероятно пиздатыми как ты
кстати, какого хуя ты тогда тут с тупыми даунами сидишь?
пиздуй в тред по хаскелю для вундеркиндов, который сдох и его не перекатывали когда тебе еще 12 лет было

>>2117390
так доп переменные наоборот добавляют негигиеничности же?

я наверное просек почему на самом деле, если закидывать в макрос какое-нибудь выражение, или вызов функции, то она буудет вызвана 2 раза при #define max(a,b) (a) > (b) ? (a) : (b), а если выражение с сайд эффектом то тогда вообще попизде может все пойти
Аноним 05/08/21 Чтв 12:50:07 2117658501
>>2117415
Не очень понятно, что учить в Си, язык простой. Из зубодробильного там разве что какие-нибудь сложные типы указателей, указатели на функции со сложными параметрами и т.п.

В целом язык о том, что просто берёшь и пишешь. Если умеешь программировать, то сможешь писать на Си.

Но вот программировать надо учиться, конечно. И ещё поправку делать, что на Си в основном всякую низкоуровневую системную хрень делают, надо чтобы к этому душа лежала.
Аноним 05/08/21 Чтв 13:19:24 2117682502
image.png 23Кб, 647x214
647x214
чет почитал про дженерики в си - имхо это какая-то шляпа.
это просто какой-то свитч кейз для типа переменной.
и примера на пике все равно же придется писать миллиард имплементаций для каждого типа.
Или эт пример хуевый и я не понял истинной мощи это залупы?
Аноним 05/08/21 Чтв 13:46:57 2117716503
>>2117415
Чувак все книги пишут об одном, если реально хочешь научиться, прогай, это 100% совет, потом по алгоритмам
05/08/21 Чтв 14:28:55 2117782504
>>2117682
Это не полноценные дженерики, это просто способ писать acos(value), не задумываясь о типе value. Но реализации - да, сам. Обычно, если типы скалярные, реализации не сильно отличаются и поэтому делаются макросами или инклудами:
#define STREAM_IMPLEMENT(type) \
bool stream_write_##type(stream ∗s, type value) { ... } \
bool stream_read_##type(stream ∗s, type ∗dest) { ... } \
// и потом:
STREAM_IMPLEMENT(int)
STREAM_IMPLEMENT(double)

Либо ты можешь сделать отдельный файл с реализацией:
// some_impl.tpl.h
bool stream_write_##type(stream ∗s, type value) { ... }
bool stream_read_##type(stream ∗s, type ∗dest) { ... }
#undef type
// и потом в каком-нибудь main.c:
#define type int
#include "some_impl.tpl.h"
#define type double
#include "some_impl.tpl.h"
Результат ничем не отличается от макроса. Инклуд удобнее, когда кода много (нет ебли с \).

И вот потом уже ты можешь автоматически выбирать с помощью _Generic из stream_write_int и stream_write_double в зависимости от типа значения и писать просто stream_write, а он уже там само. Но особенного удобства это не добавляет, да и все равно все вышеперечисленное - это очень кривые костыли. Включая сам _Generic.
Аноним 05/08/21 Чтв 14:36:25 2117794505
всем спасибо за ответы
Аноним 05/08/21 Чтв 17:57:37 2118031506
>>2117782
с инклюдами прикольную тему ты рассказал, почти как шаблоны в плюсах, только вручную #define type int регистрировать типы надо.
но в целом да, собирать надо залупу какую-то из говна и палок.
Аноним 05/08/21 Чтв 18:03:44 2118037507
>>2117562
>так доп переменные наоборот добавляют негигиеничности же?
_var считаются внутренними по конвенции, так что, по идее, нет.

>она буудет вызвана 2 раза
Ага, и это тоже.
Аноним 05/08/21 Чтв 18:05:36 2118040508
>>2117782
>>2118031
хотя, наверное, когда делаешь _Generic и перечисляешь типы, то до этого эти же типы регистрируешь через #define type #include
Аноним 05/08/21 Чтв 18:06:57 2118044509
>>2117396
>Си и Ассемблер - языки для тупых даунов, которые не могут осилить функциональное программирование
Мне всегда наоборот казалось — фп чистое и понятное, а в си и тем более ассемблере стейт распидорашивается по всей программе и мгновенно становится непонятно что у тебя откуда взялось. Недаром про Forth говорят что он write-only.
А люди типа Криса Касперски всегда вызывали глубочайшее уважение своей степенью аутизма, позволяющей им разбираться в дизассемблированных экзешниках, даже не будучи их авторами. Тут свой же собственный высокоуровневый код через полгода читаешь как в первый раз, а эти титаны ковыряют чужой ассемблер.
Аноним 05/08/21 Чтв 19:26:53 2118158510
image.png 51Кб, 760x666
760x666
Аноним 05/08/21 Чтв 20:32:29 2118262511
>>2118158
слава есусу я работаю на руби
а дрочу на си
Аноним 05/08/21 Чтв 20:52:45 2118285512
>>2118158
>Язык Си - самый низкооплачиваемый язык программирования.
по результатам опросА пиздаболов с хабра?
Аноним 05/08/21 Чтв 21:23:33 2118325513
>>2117272
Ебать, а я и не знал, что в скобках можно блоки кода хуячить
Аноним 05/08/21 Чтв 22:01:20 2118370514
>>2118285
>врети
Посмотри стату не на хабре, а в любом другом месте, результат будет примерно такой же.
Прогеры на Си действительно зарабатывают меньше всего.
Аноним 05/08/21 Чтв 22:31:28 2118399515
>>2118325
Там можно хоть твою жирную мамашу псевдографикой нарисовать, это ж макрос, он вставит всё что бы ты там ни написал.
Аноним 05/08/21 Чтв 22:34:38 2118400516
>>2118370
>Посмотри
Ну посмотрю, отчего ж не посмотреть
https://lvivity.com/top-highly-paid-programming-languages
>перл на первом месте
>джава и пыха ниже сишки
>сша
>сишка топ 8
Сдаётся мне, что все эти сраные графики пиздец какие условные, если не откровенно с потолка взятые.
Аноним 05/08/21 Чтв 22:48:32 2118406517
>>2118399
Настолько привык самоутверждаться на дваче, что даже не заметил
>в скобках можно блоки кода хуячить
Дед, я прекрасно понимаю, как работает препроцессор. Я просто не знал, что можно полноценный блок кода со своими локальными declaration, statement и т.д. сделать внутри выражения, и последний expression statement станет значением выражения. Даже мысленно всплакнул по всем этим штукам, когда целые дни валял дурака на иждивении у родной матушки, а не работал не крестах.
Аноним 06/08/21 Птн 08:34:06 2118584518
>>2118400
1) Во-первых, речь шла о зарплатах разрабов в Россиии.
2) Во-вторых, даже в твоей ссылке восьмой он только "at the US". А в "According to Developer Survey Results 2020, conducted by Stack Overflow" он 4-й снизу.
06/08/21 Птн 09:28:29 2118606519
>>2118406
А вот и нельзя. Это расширение гцц, поэтому придется определиться - ты пишешь на сишке или на гцц.
Аноним 06/08/21 Птн 09:36:53 2118614520
>>2118584
> А в "According to Developer Survey Results 2020, conducted by Stack Overflow" он 4-й снизу.
Я не слепой, я обратил внимание на то, что там все остальные языки переместились в рейтинге на десятки позиций, и
>джава и пыха
Те самые, которые у русни якобы были в топе, оказались
>ниже сишки
которая внизу.
И всё это навело меня на мысль, что рейтинги эти копирайтеры сочиняют.
Аноним 06/08/21 Птн 09:40:12 2118616521
>>2118406
Чел, не проецируй, я не настолько чмо чтобы подобного рода >>2118399
шутки были для меня "самоутверждением", было желание про жирную мамашу пошутить и пошутил. Не надо там такое значение придавать будто я тебя хотел унизить, лол, нахуй ты мне нужен унижать тебя ещё.
Аноним 06/08/21 Птн 10:07:20 2118657522
>>2118616
Ладно, на самом деле, я даже посмеялся, и вообще захожу сюда за этим. Лучей добра тебе посылаю.
Аноним 06/08/21 Птн 10:09:13 2118661523
>>2118616
Но мамаша у меня приличная, образованная и весьма симпатичная для своих лет женщина, НАСЧЕТ КОТОРОЙ МЕНЯ НИКОГДА НЕ ПОСЕЩАЛИ ГРЕШНЫЕ МЫСЛИ!
Аноним 06/08/21 Птн 12:31:59 2118850524
1573184043530.jpg 260Кб, 1200x1200
1200x1200
вот учу сейчас си, скучно пиздец, через силу смотрю туториалы, про чтение книг вообще молчу. думаю, может заказать с Алика какой нибудь Ардуино и по чужим проектам попробовать чтот-то своё сделать, а походу уже учить теорию. так хоть движуха какая-то будет
Аноним 06/08/21 Птн 13:08:16 2118906525
>>2118850
>вот учу сейчас си
Зачем?
Си самый низкооплачиваемый язык в России эвар >>2118158 лучше выбирай языки которые хорошо оплачиваются и по которым есть много вакансий, вроде тех же Go, JS и Java.
Аноним 06/08/21 Птн 14:17:30 2119019526
>>2118906
>ссылка на пост, который разъебали
Классическое хождение по кругу.
Аноним 06/08/21 Птн 14:27:38 2119037527
>>2118906
>Зачем?
Попытка не быть быдлом. Ведь сколько бы ни платили, эти жс, пхп, жава, шарп и т.д всего лишь макакины скрипты. Даже если на словах пациент яро отрицает, в глубине души всё равно понимает, вот и стремится вылезли из помойной клоаки, а значит в си. Это что касается "почему?".

То, что такие попытки обречены на провал, это немного другой вопрос. Постосту говоря, люди не меняются. Если родился макакой, неизбежно вляпаешься в макакинфы скрипты ради денег, и никуда больше от этого не денешься до гроба. А кто родился человеком, придет в си естественным образом, так что "вкатываться" не требуется.
Аноним 06/08/21 Птн 16:08:58 2119130528
>>2119037
двачаю

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

вот недавно пришел в си. мне нравится, хотя думаю мне мозгов не хватит полноценно вкатиться. так что наверно останусь все-таки макакой
Аноним 06/08/21 Птн 16:12:28 2119134529
>>2118906
ты предлагаешь сразу начать с JS?
ПЕРЕКАТ Аноним # OP 06/08/21 Птн 18:47:29 2119303530
Аноним 06/08/21 Птн 20:31:10 2119499531
>>2119019
Где разъебали?
Ты выложил зп по США, а мы о России говорим, долбоеб.
Посмотри на hh.ru, увидишь примерно такую же картину.
Аноним 06/08/21 Птн 20:34:19 2119501532
>>2119134
Нет конечно, давай сначала кампутер сайнс учить неск лет, потом микропроцессорную технику, потом асм и паскаль/си, потом теорию алгоритмов и данных, и только потом учить жс.
Только вот за это время ероха просто пройдет курс по жс, вкатиться и станет мидлом, пока славка сычев будет тратить время на "саморазвитие".
Аноним 06/08/21 Птн 20:45:10 2119508533
>>2119037
Такие рассуждения хороши только когда ты малолетний долбоеб и сидишь на шее у мамши, а когда станешь взрослым поймешь, что люди программируют не ради программирования или каких-то своих принципов, а ради денег.
> стремится вылезли из помойной клоаки
Так они уже выползли из помойной клоаки, потому что нормальные специалисты с многолетним опытом по этим языкам имеют те самые 300к, квартиру в нормальном районе или хороший дом, дорогой автомобиль, могут позволить себе все что нужно для нормальной жизни.
А в помойной клоаке живут С/С++ программисты которые за зарплату польского дворника пашут с переработками на кабанчика в офисе, где зимой нет отопления а летом кондиционера, живут на шее у родителей или отдают половину за аренду, добираются на работу в общественном транспорте или на б/у-шном корыте или того хуже, жигулях, и терпят это, потому что если уволяться будут нахуй никому не нужны, а здесь хотя бы стабильно платят, вот где помойная клоака. Зато в отличии от тупых скриптомакак они заняты великим делом - ебут байты указателями!
А у тебя еще есть шанс не влезть в эту помойную клоаку.
Аноним 06/08/21 Птн 22:29:18 2119592534
>>2119499
Долбоёб — твой отец.
Твой аргумент уничтожили не выкладыванием зарплаты по чему-либо, а демонстрацией того, что эти статейки друг другу резко противоречат — а значит, либо они все неверны, либо одна из десяти тысяч верная, и у тебя нет никаких оснований утверждать, что та самая одна из тысячи — именно та что ты принёс.
Аноним 06/08/21 Птн 22:30:13 2119594535
>>2119501
куда он там вкатится нах жидко пёрнет когда на собесе попросят дерево развернуть и всё фантазёр ёбаный
Аноним 06/08/21 Птн 22:31:21 2119596536
>>2119508
Хуя какое подробное и красочное описание своих фантазий, снимаю шляпу.
Аноним 06/08/21 Птн 22:59:35 2119637537
>>2119592
>Твой аргумент уничтожили не выкладыванием зарплаты по чему-либо, а демонстрацией того, что эти статейки друг другу резко противоречат — а значит, либо они все неверны, либо одна из десяти тысяч верная, и у тебя нет никаких оснований утверждать, что та самая одна из тысячи — именно та что ты принёс.
Хорошо, где по твоему достоверная стата по зарплатам в России?
На hh.ru?
Так она идентична той, что представлена на хабре.
Аноним 06/08/21 Птн 23:01:12 2119641538
>>2119594
ой блять как будто рокет сайнс , дерево развренуть ахаха
потренеруется перед этим решать задачки для собесов вроде чернобелых деревьев и сортировки пузырьком и всего делов
Аноним 06/08/21 Птн 23:01:43 2119643539
Аноним 06/08/21 Птн 23:57:53 2119680540
>>2119637
Нигде, пока кто-то не докажет обратного.
Аноним 06/08/21 Птн 23:58:34 2119682541
>>2119641
чуть формулировка не та в вопросе
Аноним 07/08/21 Суб 15:26:37 2120044542
>>2119680
Ясно, очередные среньк-пук вы все врети.
Живи дальше в манямирке, маня, когда начнешь работать программистом на си, поймешь, что я был прав.
Аноним 07/08/21 Суб 17:23:19 2120238543
test
Аноним 07/08/21 Суб 20:03:21 2120373544
>>2120044
Я не помещаюсь в манямирке, там всё занято тобой и твоими "врёти".
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов