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

Ответить в тред Ответить в тред
Check this out!
C Programming Language #68 /clang/ Аноним # OP 05/03/21 Птн 21:31:43 19586251
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 (октябрь)

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

- Очевидный 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 помогает читать сложные сишные декларации.

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

- №65: http://arhivach.net/thread/637465/
- №66: http://arhivach.net/thread/637469/
- №67: http://arhivach.net/thread/667170/ >>1904954 (OP)
Аноним 05/03/21 Птн 23:51:39 19587242
Аноним 05/03/21 Птн 23:59:41 19587273
Аноним 06/03/21 Суб 01:07:22 19587644
Аноним 06/03/21 Суб 01:20:46 19587775
07/03/21 Вск 09:59:36 19595976
Тред умер.
Аноним 07/03/21 Вск 13:40:09 19597367
14524227295540.jpg 15Кб, 300x300
300x300
Подскажите по такому вопросу: мне надо вывести первые N символов из указателя на строку.

char istr = strstr("foo bar 123", "bar");
printf("istr pointer: %.
s, 3, istr);

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

Что за херня? У меня уже крыша едет.
Аноним 07/03/21 Вск 16:02:58 19598888
>>1959736
принтфэ("%.3s", истр);
диржи)))
Аноним 07/03/21 Вск 21:09:04 19602279
>>1959888
Хуй во рту у себя подержи, чепуш.
Аноним 07/03/21 Вск 21:49:59 196025010
>>1959736
Ты забыл двойной кавычкой закрыть, странно, что она у тебя в вебе скомпилировалась, скорее всего бракованный компилятор под компотом, попробуй накатить Linux, там вроде годные компиляторы под компотом
Аноним 07/03/21 Вск 22:25:01 196027411
>>1960227
я трипл три мотрешки)), я нт чипушь)))
>>1960250
прыщики в место моего тонково хода >>1959888. да ты хорош))
Аноним 07/03/21 Вск 22:45:43 196029612
>>1960274
Агент шишки-ёлочные-игрушки передаёт, что все в порядке, отставьте преждевременную мобилизацию эскадр

)))
Аноним 08/03/21 Пнд 00:09:52 196036013
>>1959888
>переменная N
прасти братиш, я обосрался. вот тебе как нужна порометризировать форматированый аутпут:

снпринтфэ(пук, "%%.%us", N);
принфэ(пук, истр);
Аноним 08/03/21 Пнд 00:53:44 196036914
snoop-dogg-face[...].jpg 165Кб, 1000x667
1000x667
Ок, я перекачусь с выкладкой в эмуляторе.
А то тут какая-то клоунада.
Аноним 08/03/21 Пнд 02:38:37 196040715
>>1960360
братиш, у меня с тваего пука сек фолт выпал, чё дилать а

сиг фолт (кор дампед)
Аноним 08/03/21 Пнд 10:16:18 196045616
>>1960407
ну ставь сайз вторым аргументом я ебу ващь, ты такой конч чо не можешь загуглить в консоле "ман снпринтфэ"?.
Аноним 11/03/21 Чтв 22:30:18 196433717
>>1960456
я гашиш не курю если чо
12/03/21 Птн 09:54:41 196460618
Тред умер.
Все ушли в плюсач.
Аноним 12/03/21 Птн 16:52:11 196499819
16133244495910.png 507Кб, 1230x813
1230x813
Чики, программач, дублирую из ньюфаг-треда, может хоть тут ответят

Кое-как вкатился на поз. data engineer, уже почти накапал год опыта
Собственно вопрос, мне нравится сфера embedded, стоит ли перекатываться? Учитывается ли мой текущий опыт хоть как-то? Есть гайды по развитию в данном направление? Всякие там Roadmap'ы C++ обязателен? Какого уровня хватит для начала работы ждуном?

Гуглить умею, не тупой, просто хочется послушать мнения и советов анонов, которые уже разрабатывают под железки
Аноним 12/03/21 Птн 20:28:20 196532720
Аноним 13/03/21 Суб 05:50:59 196560421
image.png 19Кб, 536x182
536x182
сап, это идентичная обработка сигнала?
13/03/21 Суб 11:31:35 196569422
>>1964606
Нет не умер, просто на дваче мало кто уже сидит, а еще тут есть пидор который всех банит
Аноним 13/03/21 Суб 15:04:21 196584423
>>1965604
Нет, в твоем случае будет вызвана функция hide_signal, даже если она будет состоять из одной инструкции выхода из процедуры. SIG_IGN это определенный константный адрес (например, 1), вызвав функцию signal с таким аргументом ось пометит сигнал как игнорируемый (если возможно) и не будет передавать управление никакому коду из пространства пользователя.
Аноним 13/03/21 Суб 15:17:47 196586224
>>1965694
А куда все съебали?
Аноним 13/03/21 Суб 15:29:30 196587525
>>1965862
Мелкоборды, конфочки.
Аноним 13/03/21 Суб 15:50:09 196589426
как вам книга Стивена Праты "Язык программирования C. Лекции и упражнения"?
Планирую вкатится в си, до этого дел с программированием не имел....
Если Прата окажется говном - посоветуйте чтива по пуре си пожалуйста...
И еще, что можно будет прочитать после Праты?
Аноним 13/03/21 Суб 15:55:27 196589927
>>1965894
>до этого дел с программированием не имел
Тогда лучше начни с видеуроков на тему c/c++/c# на ютубе, с полного нуля в прату не вкатишься.
Аноним 13/03/21 Суб 16:10:12 196592228
>>1965899
бля, бля.
знакомый программист посоветовал именно Прату новичку..
Я уже прочитал первую и вторую главу и сделал упражнения(по второй, в первой там хуйня а не упражнение) меня пронесло чтоли? я теперь Довакин в мире программистов?
Аноним 13/03/21 Суб 16:11:33 196592329
>>1965922
Ну, если доходит, то ок.
Аноним 13/03/21 Суб 16:15:08 196592530
>>1965922
Хотя начиная с 9-10 главы уже будет посложнее.
Аноним 13/03/21 Суб 16:21:55 196592931
>>1965925
только трусы не играют в хоккей, ёпта.
Аноним 13/03/21 Суб 17:12:27 196597332
>>1965922
Дак и читай прату, единственный нормальный учебник, прочитаешь будешь хоть ориентироваться уверенно. А как Прату прочитаешь, советую не переходить к более углубленным учебникам, а хорошо попрактиковаться, сделай какую нибудь игры на файлов 10-15 с применением различных либ. И поверь, практика даёт такой ахуенеший буст скиллу, который никакие книги тебе не дадут, но про них тоже забывать не стоит.
Аноним 13/03/21 Суб 17:15:02 196597533
Аноним 13/03/21 Суб 17:51:01 196600234
>>1965922
>>1965973
хуйню не несите
новичку лучше всего по Си читать справочник шилдта чтобы вкатится
а уже после него более сложные учебники если надо
Аноним 13/03/21 Суб 18:01:13 196601335
>>1966002
Я бы этот справочник нихуя не понял на вкате. Да и упражнений там нет.
Аноним 13/03/21 Суб 18:01:53 196601536
>>1965975
ыа трусы ыаааа )))))0)
Аноним 13/03/21 Суб 18:04:40 196601837
>>1965973
понял, бля... практика звучит сейчас страшно(учитывая то что я прочитал всего 2 главы) в том плане что это будет трудно, но отступать не хочу и буду пробовать пока пальцы не отпадут

спасибо, анон
Аноним 13/03/21 Суб 23:06:52 196623638
Мне в VS нужно поработать с отладчиком в дочернем процессе, который что-то принимает от родительского. Возможно ли это? Как? Научи меня.
Аноним 14/03/21 Вск 02:36:26 196633539
>>1966236
Цепляешься отладчиком к нужному процессу. Профит. По крайней мере в gdb так можно, думаю и VS так должна уметь.
Аноним 14/03/21 Вск 11:39:21 196643440
А вы знаете, что name mangling в вашем костыльном языке был бы не нужен, если бы компоновщики могли искать символ по имени и типу? Но поддержку типа в компоновщики никто не заложил, всем было наплевать на ваш смешной препроцессор к С. Только С нативно поддерживается в бинарных и объектных файлах (не считая префиксов _ в некоторых ущербных ABI). Вы понимаете, что это значит? Ваш язык не фундаментален, это нашлепка.
Аноним 14/03/21 Вск 14:40:38 196650841
>>1966434
Чего? Хоть Си и ущербен, но придумывать какой-то костыльный нейм манглинг, учитывая типы это было бы суперплохо для такого приближённого к машинам языка как Си. В том-то и дело, что написал функцию на Си и можешь вызвать её из ассемблера и наоборот.
Аноним 14/03/21 Вск 14:49:52 196651242
k44a01jnifge.jpg 89Кб, 720x628
720x628
>>1966508
Это паста про кресты.
Аноним 14/03/21 Вск 16:28:50 196657343
>>1958625 (OP)
У меня вопрос - нужна ли математика для программирования на СИ?
И просьба - посоветуйте курсы на ютубе на русском желательно.
Аноним 14/03/21 Вск 17:17:22 196659444
>>1966573
Да, нужна, матан, функан, линейная алгебра и дискретка - это минимум для условного джуна, дальше идёт теория типов и гомология, без них любой хардварщик и яйца выеденного не стоит. По курсам и по книгам ты этого никогда не осилишь, по первым потому что слишком мало инфы, по вторым не хватит усидчивости и практики. Так что для этого нужно идти в вуз на 5 лет, иначе дальше хелоу ворлд не продвинешься.
Аноним 14/03/21 Вск 20:23:21 196678545
>>1966594
У меня есть учебник по гомоморфофобии, подойдёт? Я смогу по нему вкатиться в разработку на Си?
Аноним 14/03/21 Вск 21:24:16 196684746
>>1966594
>иначе дальше хелоу ворлд не продвинешься
Толсто.
Аноним 14/03/21 Вск 21:55:20 196686847
>>1966785
Надо проконсультироваться у гомоморфофобоведов.
Аноним 14/03/21 Вск 23:59:16 196693948
>>1966335
А кнопочки то какие жать, чтобы "цепляться"?
Аноним 15/03/21 Пнд 03:54:32 196705149
Если ReadFile может читать только charы, то как считать intы?
Аноним 15/03/21 Пнд 11:16:48 196716750
Аноним 15/03/21 Пнд 15:21:28 196739051
Аноним 15/03/21 Пнд 16:07:39 196742052
>>1966573
Тимофея Хирьянова на ютубе канал посмотри у него есть по си лекции.
Аноним 15/03/21 Пнд 18:17:33 196756153
Аноним 16/03/21 Втр 06:33:42 196813354
image.png 5Кб, 750x80
750x80
Мне нужно вывести измененную строку если длинна больше 10. Правильно ли сделан вывод при условии если все остальное подсчитано верно. Нужно ли выводить \0 для формальности окончания строки?
Аноним 16/03/21 Втр 06:34:43 196813455
>>1968133
Если что вывести нужно первый и последний элемет, а также длинну оставшихся элементов между ними.
Аноним 16/03/21 Втр 08:34:12 196816156
>>1968133
Да, все правильно.
>>1966594
Чуть не подавился, благо что сразу понял, что ты имеешь ввиду.
>>1966512
Общение с пастой иногда полезно, помогает выявить неочевидные вещи в очевидных.
>>1966018
Не просто читай главы, записывай, стенография и т.д Там дается хороший бэкграунд по компьютерной науке, хоть и немного. В основном всё нужное покрывается по мере надобности. Я щас на 16 главе, сегодня 4 часа её читал. Уже пишу игрули и прочее, смотрю на другие языки как на игрушки.
Еще заметил, что на Си приятней писать, чем на любом другом языке, не понимаю почему, ведь этот язык сложнее.
Аноним 16/03/21 Втр 09:12:38 196817257
Аноним 16/03/21 Втр 12:36:31 196839258
1612981013007.jpg 33Кб, 403x335
403x335
>>1968161
> пишу игрули и прочее
Аноним 16/03/21 Втр 14:07:28 196849459
>>1966939
Какие-то. Берешь и цепляешься. Быстро и четко. Твердо и осторожно.
Аноним 16/03/21 Втр 14:30:01 196852060
Подскажите нубу.

Тыкаю микроконтроллер. Экран в общем то. И возникла следующая проблема.
Есть функция которая отправляет строку на экран. Пусть будет LCD_send()
Но она отправляет только строку, а мне нужно что бы она отправляла все что мне захочется. Насколько я понял для этого нужно предварительно конвертировать данные в строку. Для этого я использую sprintf(). С ним разобрался все удобно. Но получается лишняя ебала с конвертацией. По этому хочется как то все это обьединить. Хочется получить что то вида:

void LCD_print(???, ???)
{
char buff[100];
sprintf(buff, ???, ???);
LCD_send(buff);
}

Что бы в итоге рабочий вариант был напримет такой:

LCD_print("%d", 10);

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

Или можно как то вообще по другому реализовать мою задачу хуй знает.
Аноним 16/03/21 Втр 14:38:13 196853461
Аноним 16/03/21 Втр 14:45:56 196854862
>>1968534
Получится так что ле?:

void LCD_print(char , ...)
{
char buff[100];
sprintf(buff, char
, ...);
LCD_send(buff);
}
Аноним 16/03/21 Втр 14:53:15 196856263
>>1968548
Не, сам вижу что хуйню какую то написал.
Анон выручай. Вижу что там указатель, но хуй знает как определить на что он указывает. С троеточиями вообще в первый раз сталкиваюсь.
Аноним 16/03/21 Втр 15:33:37 196861664
>>1968534
Кажется разобрался.

void LCD_print(char* format, ...)
{
char buff[128];
va_list args;
va_start (args, format);
vsprintf(buff, format, args);
lcd_send_string(buff);
va_end (args);

}
Вот это работает вроде как. Не до конца вдуплился что за va_list и как он работает. Насколько я понимаю это возможность впихивать разные параметры вместо определения одного. Но хуй знает. Буду читать дальше.
В любом случае спасибо анон что намекнул где искать. Гугл на закрос "троеточие СИ" начал выдавать что то осмысленное из того что меня интересовало.
Аноним 16/03/21 Втр 17:01:54 196871965
изображение.png 12Кб, 801x217
801x217
Поясните WTF is going on here.
Вроде я всё более менее понимаю в самом С, но когда дело доходит до указателей на функции и прочего пиздеца, или указателей на указатель (зачем это вообще существует), у меня немного не хватает знаний кажесят.
Аноним 16/03/21 Втр 17:10:15 196873866
>>1968719
А еще какие-нибудь есть книги желательно на русском. Хоть я английски и знаю но читать на нём тяжко по Си программированию более продвинутому, именно стиль и приёмы, хорошие практики того как пилякать код на нём?
Аноним 16/03/21 Втр 18:09:39 196883267
>>1968616
>Гугл на закрос "троеточие СИ"
Гугли Variadic functions

>vsprintf(buff, format, args);

И на будущее, используй лучше vsnprintf(), особенно если пердолишься с микрухами. Для ограничения максимальной длинны форматируемой строки.

А также, если на ARM пишешь, то можешь использовать _vsnprintf() когда тебе не нужно выводить вещественные числа. Сэкономишь дохуя места в памяти.
Аноним 16/03/21 Втр 19:45:02 196895868
>>1968738
Ты Кернигана проходил в школе?
Аноним 16/03/21 Втр 19:46:12 196895969
>>1968832
>vsprintf()
>gvsprintf()
>abcdefgsprintf()
Аноним 16/03/21 Втр 19:46:57 196896270
>>1968392
Че ты смехуечки кидаешь, уебище?
Аноним 16/03/21 Втр 19:50:12 196896671
>>1967051
Сам понял что спросил?
Аноним 16/03/21 Втр 19:51:31 196897072
Аноним 16/03/21 Втр 19:53:20 196897573
>>1966573
>нужна ли математика для программирования на СИ?
Обязательно.
Аноним 17/03/21 Срд 08:16:03 196938474
>>1968958
Нет не прохожу.
Более менее в финтаксисе разобрался но одну вещь не понял.
Когдау нас есть указатель на данные это ещё более менее понятно, но когда у нас есть указательно на ФУНКЦИЮ я немного не понимаю, как и где в указателе на функцию указывается какие данные функция принимает и что возвращает, а также чем технически является тип void* и его свойства. Это в его книге есть?
Аноним 17/03/21 Срд 08:19:42 196938575
Анон, помоги разобраться с анонимными каналами в винде, только ты сейчас можешь мне помочь.
В дочернем процессе scanf как будто падает в какой-то бесконечный цикл и на нём всё зависает, однако с ReadFile всё нормально, но ReadFile может считать только чары, а мне инты нужны. Если попытаться в scanf принять не число, то поведение как при обычном консольном вводе.
parent http://cpp.sh/2usoa
child http://cpp.sh/5calw
Помогите, я в отчаянии. Нужно сделать такое именно под виндо, линуксоиды идут лесом.
Аноним 17/03/21 Срд 08:27:14 196938676
>>1968719
Указатель на функцию объявляется так же, как функция, только слева от имени указателя звезда и все это в скобках:
int main(int, char@@);
int (@ptr)(int, char@@) = main;
Аноним 17/03/21 Срд 08:34:35 196939077
>>1969386
Да, это я уже понял. по сути такая функция может использоватьтся как переопределяемый интерфейс. просто не понятно КАК это работает и какие у этого метода свойства
Аноним 17/03/21 Срд 09:09:36 196940578
>>1969390
> как
Просто ячейка памяти, где лежит адрес функции. Содержимое можно менять - получается как бы функция с произвольной реализацией.
Аноним 17/03/21 Срд 09:14:38 196941479
>>1969405
Ну хорошо, а какие возможности у C с танцеванием вокруг этого, функции будут работать ТОЛЬКО если их сигнатуры (принимаемые параметры и возвращаемое значение) одинаковы или тут есть некоторая свобода?
Аноним 17/03/21 Срд 09:27:50 196944080
>>1969414
Можешь засунуть туда адрес функции другого типа. Так иногда делают. Что будет происходить - смотри ассемблер. Например, указатель типа void (@)(), a ты засунул туда struct bigstruct f(). Она упадёт при вызове, т.к. большие структуры возвращаются через скрытый аргумент, но в нем будет мусор .
Аноним 17/03/21 Срд 11:03:30 196951381
>>1968161
>Не просто читай главы, записывай, стенография и т.д Там дается хороший бэкграунд по компьютерной науке, хоть и немного. В основном всё нужное покрывается по мере надобности. Я щас на 16 главе, сегодня 4 часа её читал. Уже пишу игрули и прочее, смотрю на другие языки как на игрушки.
Еще заметил, что на Си приятней писать, чем на любом другом языке, не понимаю почему, ведь этот язык сложнее.
Не, ну я это делаю. Трудные темы(понятия) я конспектирую и гляжу на досуге
Аноним 17/03/21 Срд 11:04:42 196951682
>>1969440
Хорошо пояснил, я всё понял, благодарствую
Аноним 17/03/21 Срд 13:18:38 196966583
>>1969384
У Праты всё расписано детально.
Указатель на функцию указывает на начало функции, где она находится, пространство в памяти т.к у неё есть адрес как и у любого элемента, а еще у неё есть возвращаемый тип.
Указатель на функцию используется в основном как аргумент другой функции, т.е ты говоришь функции какую использовать функцию.
Т.е представляем, что функция это такая же нормальная переменная как и все -
int sqrt(int number);
Тут у нас виден тип, имя функции, и параметр который передается. Мы берём и создаем соответствующий указатель.
int (ptr)(int number);
Всё должно совпадать с оригинальной, ибо компилятору нужно знать, с какой памятью работать, и какие значения принимает функция. Как у любой другой переменной, имя функции это её адрес. Поэтому мы можем взять прошлую декларацию -
ptr = sqrt;
И присвоить функцию указателю, чтобы использовать её в дальнейшем.
ptr(12); или (
ptr)(12) тоже самое что и sqrt(12); Но использовать можешь что хочешь, потом поймешь зачем разные синтаксисы.
(ptr)(12) это помечает, что ты используешь указатель. Где-то это надо, где-то нет.
В некоторых языках есть такая реализация (если хочешь можешь попробовать сам написать, но для этого знания малока нужны) как функция где перебирают массивы и делают над ними операции с указанной в параметрах функции, на Си это вот так может выглядеть:
void
array_map(void (ptr)(void), void array, int n);
Тут говоря про указатель void
, это означает нулевой указатель, т.е он может указывать на какой угодно тип, но ему нужно динамически выделить память. Т.е передаем в параметры любую функцию которую будем использовать, выделяем память функции соответствующего типа массива и запускаем цикл, в котором запускаем указатель, на любую функцию.
Если непонятно, посмотри как работает qsort().
Мне сайт один нравится, там всё объясняется:
https://www.geeksforgeeks.org/function-pointer-in-c/
https://www.geeksforgeeks.org/void-pointer-c-cpp/
Аноним 17/03/21 Срд 13:20:09 196966784
>>1969665
Забыл про разметку, понятнооо
Аноним 17/03/21 Срд 13:33:44 196968585
>>1969665
ОО кайф, я обожаю когда прямо так подробно хуячат текст, моментально в голове всё по полочкам раскладывается прямо ух бля. Прату почитаю раз ты говоришь что расписано детально. Еще раз благодарю за такое мощное пояснение
17/03/21 Срд 14:27:03 196972586
Хорошо, что в нормальных языках у функций есть свой тип.
Аноним 17/03/21 Срд 16:02:01 196980587
>>1969384
Ну ей богу.
Ты должен знать, что программа на C компилируется в машинный код, и исполняется именно в этом виде в реалиях архитектуры компьютера.
Т.е. в этих реалиях есть процессор(ы) со своей системой команд, регистрами. Есть память, есть другие внешние устройства с портами ввода-вывода.

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

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

Тип void
же - это просто указатель (т.е. адрес в памяти), про который неизвестно на что же именно он указывает.
Это дело программиста - проследить, что указатели void используются без ошибок. Их всегда кастуют в нужный тип. И можно например указатель float перекастовать в int.
Что из этого получится - тебе, как программисту виднее. Язык такое позволяет, а дальше дело твоё.

Ещё есть такой момент. Существуют архитектуры компьютеров, где данные и код программы лежат в разных адресных пространствах. Это т.н. Гарвардская архитектура.
Это даёт свои тонкости. Например, там может получиться, что по одному и тому же адресу в разных адресных пространствах лежит и код функции какой-нибудь, и данные какие-нибудь.


>Тут говоря про указатель void , это означает нулевой указатель, т.е он может указывать на какой угодно тип, но ему нужно динамически выделить память.
Ты, сука, бред не говори, и не путай человека, коли не знаешь.
Указатели void
, это именно то, что я написал выше, и никак иначе. Он нихуя не указывает на какой угодно тип, а просто указывает неизвестно на что.
И как их использовать - решать тебе. Выделять там память динамически, хуически, или ещё как. Как хочешь, так и поступай.
Можешь взять void* у глобальной переменной, если хочется.
Аноним 17/03/21 Срд 16:05:41 196981688
>>1969805
Ох сука, как же эта разметка заебала. Всё поехало из-за звёздочек.
Аноним 17/03/21 Срд 16:06:15 196981989
>>1969805
Заебись пояснил, пасибо
>Можешь взять void* у глобальной переменной, если хочется.
А это что значит?
Аноним 17/03/21 Срд 16:26:42 196985890
>>1969819
То и значит. Взяв указатель на void от глобальной переменной, ты, очевидно, получаешь в указателе адрес, где эта переменная лежит в памяти.
Аноним 17/03/21 Срд 18:52:38 196999291
>>1969805
>Можешь взять void× у глобальной переменной, если хочется.
А можно создать указатель типа воид? Или имел ввиду взять адрес и привести к типу void×?
Аноним 17/03/21 Срд 19:10:03 197001092
>>1969992
Это что, троллинг тупостью? Попробуй разобраться в этом вопросе самостоятельно.
Аноним 17/03/21 Срд 21:10:23 197010493
Аноним 17/03/21 Срд 21:13:23 197010894
>>1970010
Да это ты по ходу флексишь тупостью, много воды спизданул и доволен.
Аноним 17/03/21 Срд 21:23:28 197011295
>>1969805
Никогда не видел такого сложного пояснения простого концепта, еще и запутал ненужной информацией. Мда.
Аноним 17/03/21 Срд 21:58:22 197013996
image.png 192Кб, 320x300
320x300
Аноним 17/03/21 Срд 22:48:16 197016697
>>1969805
>Тут говоря про указатель void , это означает нулевой указатель, т.е он может указывать на какой угодно тип, но ему нужно динамически выделить память.
>Он нихуя не указывает на какой угодно тип, а просто указывает неизвестно на что.
Ну я не говорил такого. Читай внимательней, а еще я ссылки приложил для подробных пояснений, там это первым пунктом говорят.
Аноним 17/03/21 Срд 22:50:46 197016898
>>1969805
А еще соглашусь с анонами выше, ты много лишнего написал.
17/03/21 Срд 22:59:03 197017599
Чую траля.
17/03/21 Срд 23:19:24 1970184100
image.png 114Кб, 340x340
340x340
Аноним 18/03/21 Чтв 00:28:26 1970234101
>>1970010
>пук
Маня, если тебе везде мерещаться тролли - мне тебя жаль. Складывается впечатление что ты реально контуженный , обиженный жизнью имбицил. Могу тебе и в глаза сказать, готов приехать послушать?)) Вся та хуйня тобою написанное это простое пиздабольство, рембо ты комнатный)) от того что ты много написал, жизнь твоя лучше не станет)) пиздеть не мешки ворочить, много вас таких по весне оттаяло)) Про таких как ты говорят: Мама не хотела, папа не старался) Вникай в моё послание тебе постарайся проанализировать и сделать выводы для себя)
Аноним 18/03/21 Чтв 05:14:13 1970320102
Какую либу посоветуете для UI на линукс? GTK? Хочу написать какую нибудь прогу, стаж - нуб.
Аноним 18/03/21 Чтв 06:12:31 1970335103
>>1969805
Это опять я.
Я не случайно заикнулся про гарвардскую архитектуру.
Сейчас вот порылся, навёл справки. У меня в закоулках памяти действительно что-то такое было.
Дело в том, что стандартом ISO C запрещено присвоение указателя на функцию указателю на void.
Это как раз связано с этой архитектурой.

Вот смотрите
https://stackoverflow.com/questions/36645660/why-cant-i-cast-a-function-pointer-to-void
Аноним 18/03/21 Чтв 06:16:31 1970336104
>>1970108
О да! Сначала мне говорят "заебись пояснил", а теперь "много воды спизданул".
Коль читаешь по слогам, и ничего не понимаешь - нехуй на других проецировать.
Аноним 18/03/21 Чтв 07:57:18 1970358105
>>1970336
Хуя у тебя проблемы с эго, ебачок.
Аноним 18/03/21 Чтв 07:58:20 1970359106
>>1970335
>Это опять я.
Мы уже соскучились.
Аноним 18/03/21 Чтв 08:10:12 1970364107
>>1970335
В вопросе чувак кастит указатель на функцию на простой нулевой указатель. Кому это надо бля? Причем тут архитектуры, мозгоеб?
Аноним 18/03/21 Чтв 08:31:13 1970373108
>>1970336
тут несколько человек общаются с тобой, тот кто говорил что заебись пояяснил уже ушел
Аноним 18/03/21 Чтв 11:54:50 1970471109
>>1969805
>>1969665
Два студента-долбоёба не могут найти консенсус в споре об элементарных вещах, в силу неутолимой потребности в самоутверждении
Аноним 18/03/21 Чтв 12:43:14 1970510110
>>1970364
Уж точно не тебе. Тебе кроме бояры ничего не надо.
Аноним 18/03/21 Чтв 12:48:58 1970517111
>>1970373
Неужели я это не понимаю? Мы тут сейчас просто выясняем кто кого перетроллит :)
Аноним 20/03/21 Суб 03:33:06 1971913112
>>1970471
Эээ я ни с кем не спорил просто помог чуваку понять эти элементарные вещи. Я хз что там за шизойд на меня напал.
Аноним 20/03/21 Суб 03:36:10 1971915113
Да и тем более тред умер раз уж таким шизикам тут дают ротан раскрывать для наливания мочи.
Аноним 20/03/21 Суб 08:25:23 1972015114
>>1970510
Иди выебываться в своём дворе шавка шизойдная
Аноним 20/03/21 Суб 08:56:49 1972029115
>>1971915
Налил тебе мочи на ротан, проеряй.
собеседование Аноним 20/03/21 Суб 10:27:02 1972085116
Назовите все способы узнать длину файла в Posix.
20/03/21 Суб 12:23:13 1972161117
>>1972085
Звонишь в POSIX, спрашиваешь.
Аноним 20/03/21 Суб 14:09:48 1972230118
Аноним 20/03/21 Суб 19:29:00 1972476119
>>1972085
Что за POSIX? Это компания по продаже магнитофонов?
Аноним 20/03/21 Суб 21:08:26 1972564120
>>1972085
>Назовите все способы узнать длину файла в Posix.
Это такие вопросы на собеседованиях дают?

Если б меня такое спросили про Windows, я бы сказал что в WinAPI есть различные системные вызовы. Среди них должен быть и тот, позволяющий узнать длину файла. Когда мне это понадобится в коде, я просто открываю документацию и выясняю этот вопрос.
Я posix не знаю и как там узнать длину файла в душе не ебу.
Может, команда ls позволяет вывести название файла и его размер. Однако она все равно должна вызывать какие-то соответствующие системные вызовы, к которым всё сводится.
Вообще, нахуй на зубок знать этот posix, эти API? Берёшь доки и читаешь.
Аноним 20/03/21 Суб 21:19:36 1972577121
817166.jpg 44Кб, 800x800
800x800
>>1972476
По продаже файлов, очевидно. Но вообще они стандартные, самые распространенные - под А4, т.е. размер 21 на 27 см.
Аноним 20/03/21 Суб 22:20:56 1972629122
>>1972015
Это ты про себя, да?
Аноним 21/03/21 Вск 00:11:45 1972710123
>>1972085
Ну, stat и open+lseek. Наверняка, ещё есть, нормальных больше не знаю.
Аноним 21/03/21 Вск 15:39:08 1973163124
Скопирую с asm треда, так как там пусто.
>Не знаю, туда ли я обращаюсь, но попробуем. Недавно увидел вебмку с демкой на спектруме и задался вопросом. Если ли тут аноны, которые пишут/писали демки? Можете гайдов подкинуть или других материалов. Просто для меня это темный лес.
Аноним 21/03/21 Вск 15:44:56 1973167125
Хочу попробовать посмотреть С. Перед этим хотелось бы узнать, актуален ли он в 2021? Для чего он сейчас используется? Легко ли будет найти, с подобными навыками, работу?
Аноним 21/03/21 Вск 18:11:41 1973333126
если мы объявляем переменную, то мы в стеке под неё тут же аллоцируем память?
Аноним 21/03/21 Вск 18:14:13 1973334127
Срочно нид хелп с пасалем. Сам фротендер подзалупный, другу срочно нужно 1 задание с табулированием фукции и средним арефмитическим. Его уже разок ебанули за копипаст, второй раз не прокатит скатать. Есть уже рабочий правильно код, его нужно переписать чтобы препод не доебался
БРАТЬЯ СЛОВЯНЕ ПОМОГИТЕ
Аноним 21/03/21 Вск 18:22:56 1973349128
>>1973333
Да, если она в функции и не статическая.
Аноним 21/03/21 Вск 18:25:43 1973357129
>>1973349
а если она extern? Кто нибудь пользуется этой хуйнёй?
Аноним 21/03/21 Вск 18:56:24 1973412130
>>1973357
Значит она глобальная и в другой единице трансляции.
Аноним 21/03/21 Вск 21:22:50 1973551131
Ананасы, никогдаине интересовался программированием для встраиваемых систем. С чего стоит начать? Никаких желкзок, правда, не исею
Аноним 21/03/21 Вск 22:47:23 1973633132
>>1973551
Стоит начать с тырпрайза, потом идти байтослесарем.
Аноним 22/03/21 Пнд 06:25:17 1973868133
>>1973167
>работу
Нахуя? Пиши читы или ботов для игр.
Аноним 23/03/21 Втр 10:44:00 1975013134
>>1973163
Ищи на сайте олдгеймс, ещё в игромании вроде была статья лет 10 назад или раньше, и на хабре тоже.
Аноним 23/03/21 Втр 10:44:31 1975014135
>>1973163
Гугли демосцены. не демки.
Аноним 23/03/21 Втр 18:47:13 1975426136
>>1973551
Arduino? Arduino. Поиграться со светодиодиками, датчиками, придумать себе какой-нибудь проектик по управлению чем-то. Учиться только на практике, никаких блять книг на 1000 страниц. Там С++ хибару запилили над обычным AVR контроллером. Инфы в инете полно. Но держи в уме что это игрушка. Когда станет тесно, переходить к STM32 на бибилотеке HAL. Отладочные платы nucleo или bluepill. Там уже можно "Инсайдерское руководство по STM" почитывать, что бы понимать как работает ядро и не писать как пхпшник. Так же советую статьи istarik.
Ну а там уже можно и регистрами немного преисполниться, если оно тебе нафиг надо, на низкоуровневых либах типа LL (SPL скоро фсё, но деды на проде еще 100500 лет будут юзать).
Аноним 23/03/21 Втр 18:52:31 1975430137
Ну и ещё есть ESP что-то вроде SoC для различного сетевого кочегара данных на сервер и потом выводить это в браузере/приложении.
Аноним 23/03/21 Втр 23:43:01 1975694138
В чём принципиальная и функциональная разница между char и CHAR[/b при использовании windows.h?
Аноним 23/03/21 Втр 23:43:28 1975696139
>>1975694
char и CHAR
Самоисправил.
Аноним 24/03/21 Срд 00:19:29 1975714140
>>1975696
А зайти в исходник и посмотреть не судьба?

typedef char CHAR;

Никакой разницы
Аноним 24/03/21 Срд 00:28:49 1975729141
>>1975714
>зайти в исходник и посмотреть
Зачем, если я могу заставить это сделать тебя?
Аноним 24/03/21 Срд 03:58:18 1975789142
>>1973868
Двачую!
>>1973167
Он будет актуален еще как минимум вечность! (Есть RUST еще, на счёт него не в курсе, читал про возможности, интересно но не прикасался)
>>1975426
Ничего себе ты расписал, схороню хоть и мимокрок.
>>1975729
Лол
Аноним 24/03/21 Срд 04:03:45 1975791143
Как в этом треде относятся к макросам?
Аноним 24/03/21 Срд 07:53:22 1975835144
>>1969805
>Тип void же - это просто указатель (т.е. адрес в памяти), про который неизвестно на что же именно он указывает.
Тип void это не указатель и не адрес в памяти долбоеб. Это тип который не имеет памяти, или информации.
>Это дело программиста - проследить, что указатели void используются без ошибок. Их всегда кастуют в нужный тип. И можно например указатель float перекастовать в int.
Нихуя, я могу не кастовать и присвоить указатель на него и нихуя не будет.
>Существуют архитектуры компьютеров
Они нахуй никому не нужны.
>Тут говоря про указатель void , это означает нулевой указатель, т.е он может указывать на какой угодно тип, но ему нужно динамически выделить память.
Можно не выделять.
>Он нихуя не указывает на какой угодно тип, а просто указывает неизвестно на что.
Приебался к терминологий хотя априори они не нужны для других целей. В общем долбоеб садись, тройка.
Аноним 24/03/21 Срд 12:15:25 1976023145
>>1975835
Хуета питушки, можно присваивать чо угодно в ваших маня-байтах, дебичи. Только вот прогрмма работает с данными, а не байтами, и по этому переводят всякие s_int u_int суммированием половины регистра
Аноним 24/03/21 Срд 12:17:20 1976027146
Аноним 24/03/21 Срд 12:20:07 1976032147
>>1976027
ну короче было 129 битов записано(+1 бит = 1), тут мы поменяли указатель и потекла подлива ведь нужно мне теперь отгрузить не 129 дылдаков коней, а уже ?? хз короче
Аноним 24/03/21 Срд 12:21:00 1976035148
>>1976032
>129 битов
Таблетки, шиз.
Аноним 24/03/21 Срд 12:22:47 1976039149
>>1976035
пидерашка, опять путаешь нумерацию с позиционной записью?
Аноним 24/03/21 Срд 12:23:47 1976041150
>>1976035
Давай еще раскажи что нумерация(порядок) массивов у тебя с ноля начинается, а нет не начинается, индекс может, а вот нумерация врядли, может даже не быть нумерации, плак-плак. Вообщем обтекай, лох-пидр.
Аноним 24/03/21 Срд 12:39:55 1976059151
haloperidol-tab.jpg 45Кб, 500x333
500x333
Аноним 24/03/21 Срд 13:39:26 1976105152
>>1976023
>прогрмма работает с данными, а не байтами
Аноним 24/03/21 Срд 13:41:19 1976108153
>>1976059
Боевые картиночки. Мда.
Аноним 24/03/21 Срд 13:43:36 1976110154
>>1976108
А таблетки все же прими, шизик, у тебя весеннее обострение.
Аноним 24/03/21 Срд 13:47:05 1976112155
>>1976105
Прикинь, 0xFF0011 вообще нехуя не значит вне контекста и то что ты ответишь на 2+2=Залупа никому не нужно
Аноним 24/03/21 Срд 13:49:52 1976114156
>>1976023
Ну как это противоречит моему утверждению про присваивание любого типа нулевому указателю?
(И вообще много хуйни с плюсов пришло, но это не значит что свойства энных такие же и в Си)
>>1976112
Ну для твоего контекста эта хуйня что-то будет значить 100% иначе нахуй тебе эта рандомная цифра? Байтоебля есть, вкурсах?
>>1976110
Ну извини что я тебя обидел словом шизик, шизик, хватит это проецировать на меня. Лечиться тебе надо, а не мне.
Аноним 24/03/21 Срд 13:56:55 1976121157
>>1976114
Пиздец ты тупой, шизик.
Аноним 24/03/21 Срд 16:40:10 1976391158
Аноним 24/03/21 Срд 16:49:25 1976405159
>>1976391
Не пойду к тебе, сам там сиди.
Аноним 24/03/21 Срд 16:55:51 1976420160
Аноним 25/03/21 Чтв 05:02:39 1976826161
Что происходит до начала работы препроцессора и как называется этот процесс? Какие этапы проходит программа в это время и что происходит в каждом их них?
25/03/21 Чтв 08:46:43 1976885162
>>1976826
Нахуй путешествуй, чмоня, тут тебе не ответы мейл.сру
Аноним 25/03/21 Чтв 12:22:42 1977010163
>>1976826
Ничего. Препроцессор первый. Он потому и PREпроцессор.
Но возможны нюансы с прекомпилированными хидерами, которую поддерживают некоторые компиляторы.

Где ты такой вопрос нашёл? Тащи препода сюда - сейчас мы ему объясним где он не прав.
Аноним 26/03/21 Птн 11:06:33 1977908164
Анонче, изучаю С, но идей для пет проектов, кроме как реализации криптографических алгоритмов нет вообще. Мб у кого-то будут какие-то идеи для зеленых? Или кто-то вспомнит, что он делал, когда он сам изучал этот язык? Благодарю заранее.
Аноним 26/03/21 Птн 12:35:45 1977990165
>>1977908
самое интересное для начала это сокеты и IPC
Аноним 26/03/21 Птн 12:41:49 1977992166
>>1977908
Попробуй BMP файл создать из кода.
Содержимое для начала рандомом, затем градиентом.
Задача простая, но наглядная. Заодно и кросспалтферменная - там хватит только open, write, close и чистый Си. Будет работать абсолютно на любой системе.
Аноним 26/03/21 Птн 14:16:34 1978050167
Подскажите, где-то стандартом описано, можно ли сразу уничтожать семафор после поста?

<thread1>
sem_wait(&sem);
....

<thread2>
sem_post(&sem);
sem_destroy(&sem);
...
Аноним 26/03/21 Птн 15:27:58 1978089168
>>1978050
Подумай сам, что будет если семафор не в ожидании был, в thread, которому ты сигналишь, во время sem_post был занят какими-то делами. Потом он попадает на освобождённый семафор и в лучшем случае вернёт ошибку, а в худешем упадёт.
Аноним 26/03/21 Птн 22:55:44 1978597169
>>1977908
Когда я изучал этот язык, я ничего не делал. Если хочешь чего-то поделать, можешь, например, написать кодирование uint64_t, int64_t (со знаком) по протобаферовской схемке (https://developers.google.com/protocol-buffers/docs/encoding) в переменное число байтов, выше советуют сокеты, можешь написать клиент для dns по udp. Советую не лезть во всякие ipc, треды там всякие, когда чуть обрастёшь щетиной, отправляйся изучать, как работает комплюктер/ос.
Аноним 27/03/21 Суб 15:21:14 1978969170
Анон, если я пишу ПО для микроконтроллеров, но по факту работаю на заводе, я ИТ специалист или заводчанин?
Аноним 27/03/21 Суб 15:27:15 1978973171
Аноним 27/03/21 Суб 15:33:05 1978976172
>>1978973
Ор, взял на вооружение :D
Аноним 27/03/21 Суб 23:20:49 1979238173
>>1977908
Хэш-таблицу и бинарный хип. Это нужно всегда.
Аноним 29/03/21 Пнд 14:27:29 1980461174
>>1978597
Cделай программу которая будет принимать файлик как ввод и брать из него слова и заносить в другой файлик как отдельные в структуру из которой можно будет их брать. И при этом в файлик будет заноситься всё больше и больше структур с разных файлов.
В процессе пиши заголовочный файл и добавляй туда разные функции которые можно будет использовать в будущем для вывода данных с файлов. Постарайся использовать макросы для этого и функции и typedef декларации.
Аноним 29/03/21 Пнд 14:33:18 1980466175
>>1977908
Cделай программу которая будет принимать файлик как ввод и брать из него слова и заносить в другой файлик как отдельные в структуру из которой можно будет их брать. И при этом в файлик будет заноситься всё больше и больше структур с разных файлов.
В процессе пиши заголовочный файл и добавляй туда разные функции которые можно будет использовать в будущем для вывода данных с файлов. Постарайся использовать макросы для этого и функции и typedef декларации.
Аноним 29/03/21 Пнд 15:39:58 1980530176
>>1977010
Программа проходит 3 этапа перед предобработкой. Компилятор сначала берет заменяет все комментарии на пробел, а так же все \ и символы новой строки, а так-же приводит всё в порядок согласно кодировке. Позже начинается уже сама предобработка.
Аноним 29/03/21 Пнд 15:45:46 1980539177
>>1976885
Это же форум мейл.сру с ответами
Аноним 29/03/21 Пнд 23:54:59 1980985178
>>1980530
Какой компилятор? КТо тебе это рассказал?
Аноним 30/03/21 Втр 02:38:49 1981048179
Мне понадобилоь около 23 лет, чтобы понять чем отличается XImage от Pixmap в протоколе X11.
Точнее, 23 года между подходами.
А получилось так - грузил картинку из файла на стек и скармливал её в XCreateImage. А по выводу на экран видел странные артефакты в виде цветных точек внизу картинки. Тогда вставил между загрузкой картинки и выводом её на экран функцию, в которой создал локальный массив на несколько килобайт, и забил его 0x77. И при выводе картинки появилась серая полоса. Затем поэксперементировал с XCreatePixmap и, о чудо, артефакт не было.
И я весь счастливый и обрадованный завалился спать и всю ночь видел бредовые, но красочные сны.

Вопрос на засыпку - а вы понимаете чем отличается XImage от Pixmap?

Вот, хочу побаловаться с X11 на предмет "надрать задницу" gtk, Qt и иже с ними. Насчёт gtk особых проблем не вижу, она изначально кривая, а Qt может соснуть за счёт кроссплатформенности у кода, который на 101% заточен под X11. Не то, чтобы мне было очень интересно или какие-то перспективы, просто работа так заёбует, что неторопливо покопаться во внутренностях X11 сойдёт за отдых.


Аноним 30/03/21 Втр 04:29:14 1981059180
Аноним 30/03/21 Втр 08:46:01 1981086181
>>1981048
Первый раз услышал эти слова, замер в благоговейном ужасе.
Аноним 30/03/21 Втр 08:49:07 1981088182
2021-03-30094820.jpg 180Кб, 816x663
816x663
Аноним 30/03/21 Втр 11:30:22 1981163183
Аноним 31/03/21 Срд 14:08:29 1982380184
Работаю с бинарными файлами, написал функцию открытия файла с ловлей ошибок и функцию удаления структуры. Функция удаления структуры в процессе работы вызывает функцию открытия файла, в которой вводится имя файла. Собсна пытаюсь передать это имя файла массивом char как минимум в функцию удаления, ну или в main. но нихрена не выходит, это вообще возможно? Создавал массив в main передавал через аргумент в функцию удаления, а оттуда в функцию открытия, там изменял, но судя по всему адрес не доходит. Так же создавал массив в функции удаления и передавал в функцию открытия, та же херня. Напишите пример как это правильно сделать, а то уже башка кипит от этих указателей. Спасибо
Аноним 31/03/21 Срд 14:36:47 1982398185
Аноним 31/03/21 Срд 14:36:55 1982399186
Аноним 31/03/21 Срд 15:17:00 1982422187
>>1982398
>>1982399
Вроде разобрался, не помню как было, но сделал типа такого
void main()
{
char Array[32];
func1(Array);
}
void func1(char Array[32])
{
func2(Array);
}
void func2(char Array[32])
{
scanf(%32s, Array)
}

Хуй знает, я вроде изначально так и делал, вроде только амперсанд в scanf'e перед Array убрал, хотя вроде это ничего поменять не должно было, короче, не ебу, оно работает и я рад, хлть и не понимаю как
Аноним 31/03/21 Срд 15:21:39 1982426188
>>1982422
Господи, что ты делаешь?
Ты понимаешь что передавать массив в функцию это худшее, что можно придумать?
Срочно меняй

void func2(char Array[32])

на

void func2(char * Array)
Аноним 31/03/21 Срд 20:13:46 1982751189
>>1982426
>Ты понимаешь что передавать массив в функцию это худшее,

Почему? Энивей передается указатель.
Аноним 31/03/21 Срд 20:26:45 1982759190
challenge.png 1646Кб, 3840x2160
3840x2160
сяч, почему бутлодер помечен фиолетовым цветом? ведь он же по сути

- получает управление от bios/uefi, прочитав mbr/uef-раздел или подобное;
- на втором этапе чекаются диски и партиции на предмет программ (наверное через магические байты или адреса);
- далее, по выбору загрузка и передача управления;

неужели это напорядок сложнее какого-нибудь сишного компилятора, или я что-то пропустил?
асло насколько заебисто будет пилить такое для нюфага?
есть ли вообще смысл это делать, когда гугл уже на нулевой спойлерит гайдами по сабжу? мб лучше будет просто откопать и почитать сурцы какого-нибудь граба или лило?
Аноним 31/03/21 Срд 20:27:11 1982760191
>>1982751
Такие вот у нас погромисты нынче.
Аноним 31/03/21 Срд 20:33:36 1982764192
>>1982760
>>1982760
>вот у нас погромисты нынче.

Я как то недавно с подобным сталкивался. Ради интереса даже смотрел асм-листинги, вроде там адрес передавался, а не копия в стэк. Но могу ошибаться, либо неправильный гцц.
Аноним 31/03/21 Срд 21:00:16 1982789193
>>1982764
Дико извиняюсь, был не прав, сейчас тоже листинги посмотрел, там при передаче массива в качестве аргумента, он на указатель распадается. Неплохая каша у меня в голове, тогда где массивы полностью копируются?
Аноним 31/03/21 Срд 21:37:36 1982816194
>>1982789
>тогда где массивы полностью копируются?
Опять же могу ошибаться, но структуры копируются со всеми полями.
Аноним 31/03/21 Срд 21:40:02 1982819195
>>1982816
>но структуры копируются со всеми полями.
Разумеется, если их передать явно, то есть f(struct s);
Аноним 01/04/21 Чтв 08:36:40 1982993196
image.png 79Кб, 320x180
320x180
Аноним 01/04/21 Чтв 11:26:28 1983058197
Очередные шавки делают то что должен делать компилятор, в прочем ничего нового
Аноним 01/04/21 Чтв 18:33:45 1983451198
>>1982759
Сложно всё, где ты зависишь от спецификаций и того как кто-то другой что-то запилил.
Когда пилишь компилятор - весь код твой, тебе не нужно ебаться чтобы понять почему такая структура AST, или репрезентация данных.
А вот с бутлоадером надо. Плюсом ещё надо делать драйвера для фс. Уметь общаться с Ефи/биосом(это отдельный Легаси ад). На каком-то riscv/arm может и попроще, но там зачастую вообще целая цепочка из бутлоадеров используется для созданий нужной среды исполнения ядра ОС.
Аноним 01/04/21 Чтв 23:29:01 1983728199
>>1983451

>Плюсом ещё надо делать драйвера для фс.

здесь же всё на уровне апи - open/read/write, не так ли?

>Уметь общаться с Ефи/биосом(это отдельный Легаси ад)

сейчас мне это представляется самым интересным хотя знаю об этом почти нихуя.

>На каком-то riscv/arm может и попроще,

бтв портабельность может стать проблемой. изначально хотел писать под x86_64, а сейчас даже не знаю. алсо думаю отладить на старом иде-диске, вместо ВМ.
Аноним 02/04/21 Птн 00:00:05 1983758200
>>1983728
>
> >Плюсом ещё надо делать драйвера для фс.

> здесь же всё на уровне апи - open/read/write, не так ли?
На этапе бутлоадера у тебя есть какая-то инфа на блоках на винте. Тебе из нее нужно собрать фс. Нужно понимать представление файлов и директорий на диске. И все это нужно написать. Или спиздить библиотеку с гитхаба

> >Уметь общаться с Ефи/биосом(это отдельный Легаси ад)

> сейчас мне это представляется самым интересным хотя знаю об этом почти нихуя.
Это легаси ад с тонной принятых нынче не логичных решений. На каком-то биосе система загружается в 16 битном реальном режиме. Нужно А20 разблокировать. И дальше более высокие режимы включать. Велика вероятность что твой код может не заработать на другом процессоре/биосе, так как баги имеют место быть.

> >На каком-то riscv/arm может и попроще,

> бтв портабельность может стать проблемой. изначально хотел писать под x86_64, а сейчас даже не знаю. алсо думаю отладить на старом иде-диске, вместо ВМ.
Однозначно.
Алсо, есть ещё несколько способов читать накопители, так что мужайся.

Пока не начнёшь писать - не поймёшь почему это задача выделенная фиолетовым.
Аноним 02/04/21 Птн 06:31:33 1983821201
>>1982759
>мб лучше будет просто откопать и почитать сурцы какого-нибудь граба или лило?
Можно, но зачем, если всё можно прочитать на osdev вики.
>>1983451
>бутлоадером
>драйвера для фс
>Уметь общаться с биосом
Запиздючился в первые 512 байтов, прочитал сектора через бивосо int13h:02, и не надо делать никакую fs.

Для ньюфага проще не ебатсо с загрузчиком, если это не сама цеаль, а ебануть мульбутовое ядро.
Аноним 02/04/21 Птн 06:46:06 1983826202
>>1983821
>мульбутовое
multiboot поправился.
Аноним 02/04/21 Птн 07:27:23 1983827203
Bamp
Аноним 02/04/21 Птн 10:08:52 1983870204
Аноним 02/04/21 Птн 22:29:12 1984381205
Возможно ли имея указатель на функцию в структуре получать доступ к функции только исключительно через структуру?

Наглядно:

struct stack
{
struct node (pop)(struct stack sptr);
}

struct stack
example_stack = malloc(sizeof(example_stack));

struct node
example_node = newstack->pop(example_stack);

Если попробовать объявить pop() как static в условном stack.c (где и происходит маллок на структуру), очевидно, не срабатывает.
Аноним 02/04/21 Птн 22:32:57 1984386206
>>1984381
Стерлись астериски.
Аноним 02/04/21 Птн 22:57:41 1984412207
>>1984381
Это не плюсовый тред, бро, ты jmp по не установленому адресу делаешь.
Аноним 02/04/21 Птн 23:14:15 1984437208
image.png 18Кб, 352x252
352x252
Аноним 03/04/21 Суб 00:20:18 1984486209
аноны, помогите, я щас с ума сойду. при отладке возникает ошибка Run-Time Check Failure #2 - Stack around the variable 'cv' was corrupted.https://pastebin.com/L52X6sbD
Аноним 03/04/21 Суб 00:21:25 1984490210
>>1984486
оно как я понимаю бывают при выходе за пределы массива, однако у меня вроде все норм с этим
Аноним 03/04/21 Суб 00:34:35 1984499211
>>1984486
Если это реальный отрывок кода, то в malloc пропущен struct.
Аноним 03/04/21 Суб 00:45:22 1984502212
image.png 297Кб, 1920x1080
1920x1080
>>1984499
по сути да. в каком смысле пропущен struct?
Аноним 03/04/21 Суб 00:51:47 1984505213
>>1984490
Там везде struct пропущен, ну тип надо проверять, чё там fread пишед. Это плюсовая параша похоже.
Аноним 03/04/21 Суб 00:54:21 1984507214
>>1984502
Везде где sizeof должно быть sizeof(struct vuz).
Аноним 03/04/21 Суб 01:10:40 1984519215
image.png 281Кб, 1920x1080
1920x1080
image.png 168Кб, 1920x1080
1920x1080
>>1984507
ничего не изменилось(
в файл все верно записано кста
Аноним 03/04/21 Суб 02:33:20 1984552216
>>1984486

Блин, а когда ты будешь проверять что тебе всё верно выделилось/вернулось?
Что вернул fread? Что вернул malloc()?

И один маленький нюанс - заверни структуру в
#pragma pack(1)
хотя бы для теста.
Я допускаю что массив структур может занимать место, не равно sizeof множенное на количество.
Аноним 03/04/21 Суб 02:35:36 1984553217
>>1984519
Бля, а ты не внимательный.
ты в fread передаешь указатель на указатель. Нафига?
Всё, ошибка найдена. Исправляй первый параметр. Убирай & у первого параметра.

Аноним 03/04/21 Суб 07:54:49 1984576218
03/04/21 Суб 08:05:43 1984579219
>>1984552
> Я допускаю что массив структур может занимать место, не равно sizeof множенное на количество.
Нет.
Аноним 03/04/21 Суб 11:48:57 1984637220
Поясните, как устроены userspace аллокаторы памяти. Какой смысл в сисколлах типа brk, если можно автоматически выделять страницу памяти в момент первой записи? Как аллокаторы борятся с фрагментацией? Можно ли вызвать много раз alloc так, чтобы максимально фрагментировать память? Какая структура данных применяется для отслеживания освободившегося места?
Аноним 03/04/21 Суб 14:05:44 1984738221
>>1984637
>Какой смысл в сисколлах типа brk, если можно автоматически выделять страницу памяти в момент первой записи?
1. можно освобождать память с конца хипа.
2. отлавливание обращений не туда.
3. brk задает нижнюю границу для автоматического роста стека.
>Как аллокаторы борятся с фрагментацией?
Если размер маленький, округляют его вверх (32,48,64...) и делят страницы на кусочки одного размера. При выделении кусков в несколько страниц никак не борются, только делают эффективную структуру для поиска свободного места.
>Можно ли вызвать много раз alloc так, чтобы максимально фрагментировать память?
Да. если потом вызвать free для каждого второго блока.
> Какая структура данных применяется для отслеживания освободившегося места?
Списки или битовые карты для кусочков внутри страниц, списки/деревья/хеши для свободных кусков в страницу и более.
Аноним 03/04/21 Суб 14:45:50 1984758222
>>1984738
А как треды живут каждый со своим стеком? По другому адресу выделяют новый стек или всё-таки переключают страницы?
Аноним 03/04/21 Суб 15:05:56 1984781223
>>1984758
Сейчас память под стеки мапится. Гугли MAP_GROWSDOWN, например. И хип также мапится, а brk считается устаревшим интерфейсом.
Аноним 03/04/21 Суб 15:33:10 1984815224
Аноним 03/04/21 Суб 16:48:34 1984896225
Похоже раст и питон используют стандартные аллокаторы из libc. И на этом по сути живёт FFI. Ну разве что питон запрещает PyObject выделять через сишные аллокаторы, а вот просто кусок памяти — пожалуйста.
Аноним 03/04/21 Суб 20:43:59 1985022226
image.png 33Кб, 1066x508
1066x508
Буффер вывода на винде и линуксе разный? Я просто еще не смешарик. На винде без флаша выводит исполняемый файл текст "hello there", на линухе - нет.
Аноним 03/04/21 Суб 20:51:22 1985033227
>>1985022
Вероятно зависит от реализации терминала ещё. Линукс таки да, без явного флаша не выводит пока не наберётся целая строка.
Аноним 03/04/21 Суб 21:24:07 1985065228
Аноним 03/04/21 Суб 21:28:54 1985073229
Аноним 04/04/21 Вск 07:39:12 1985362230
Аноним 04/04/21 Вск 07:55:16 1985364231
>>1969665
>Как у любой другой переменной, имя функции это её адрес

у тебя интовая переменная тоже равна своему указателю?
такое поведение ровно в двух случаях есть: функции мутируют в указатель на себя, массивы мутируют в указатели на первый элемент.
Аноним 04/04/21 Вск 07:56:19 1985365232
>>1969805
>И можно например указатель float перекастовать в int.

чё ты несёшь, вот чё ты несёшь. это UB
04/04/21 Вск 08:21:19 1985370233
>>1985365
Не, это ИД. И очень полезно ьывало.
Аноним 04/04/21 Вск 09:53:47 1985418234
>>1985370

лень искать ссылку на стандарт. но это нарушение strict aliasing. К байтам объекта можно обращаться только по эффективному типу либо по типу char/unsigned char. То есть кастовать (floatж) в (charж) можно, и читать потом, в (intж) - нельзя.
Аноним 04/04/21 Вск 10:26:48 1985428235
>>1985418
А если написать (int@)(char@)flt?
Аноним 04/04/21 Вск 14:51:09 1985668236
Аноним 05/04/21 Пнд 01:38:16 1986251237
>>1985428

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

Аноним 05/04/21 Пнд 03:54:50 1986264238
Аноним 05/04/21 Пнд 12:15:40 1986403239
>>1985418
>нарушение strict aliasing
Проиграл. Вместо того, чтобы починить компилятор, который своими говняными оптимизациями ломаент код, они просто придумали запрещающее маня-правило. Чисто русский подход.
Аноним 05/04/21 Пнд 18:17:17 1986849240
>>1986403
Брайан В. Керниган, Деннис М. Ритчи кто из этих достойных джентльменов русский?
Аноним 05/04/21 Пнд 19:34:13 1987008241
изображение.png 24Кб, 713x445
713x445
Аноним 05/04/21 Пнд 19:43:38 1987023242
>>1984738
Да где вы блять эту инфу берёте нахуй?
Аноним 05/04/21 Пнд 20:50:54 1987153243
>>1987023
Исходники нескольких маллоков и т.п. Вот посмотри phk malloc.
Аноним 06/04/21 Втр 00:01:25 1987412244
Аноним 06/04/21 Втр 04:54:06 1987581245
>>1987153
Посмотреть то можно, а вот понять.
Аноним 06/04/21 Втр 08:31:09 1987621246
>>1987008
>ваще похую

ну ты тут показал, что тебе конкретная версия конкретного компилятора с конкретными флагами на конкретном сорце не провела по губам, имея такую возможность. писатели компиляторов стараются без особой нужды не проучивать васянов, но зачем создавать в коде место для потенциального рандомного бага?
07/04/21 Срд 13:09:21 1988837247
Тред умер. Я 10 лет пилю йоба легаси на этом самострельном языке. Сейчас вкатываться в Це (да и в ++Ц) даже как-то глупо.
Аноним 07/04/21 Срд 13:42:45 1988866248
Пока макаки вкатываются в жабу и душат питона, нормальные мужики пишут на Си и работают за 100к на заводиках
Аноним 07/04/21 Срд 14:07:23 1988888249
>>1988837
>Я 10 лет пилю йоба легаси на этом самострельном языке.
Я конечно люблю С++, но если ты эстет и любишь компактный исполняемый код, считая это разновидностью искусства, то у Си конкурентов как бы нет.

А когда ты пытаешься вытянуть компактность исполняемого кода в С++, то он внезапно сразу становится похож на Си - без библиотек шаблонов и с отключенными опциями компилятора исключениями.
Иначе исполняемый код растёт как на дрожжах.
Аноним 07/04/21 Срд 14:19:57 1988902250
>>1988888
От моего легаси требуется не компактность, а производительность и возможность навешивать плюшки до бесконечности. И вот тут бы с самого начала писать с шаблонами и даже классами. Хз как с производительностью, но мне почему-то кажется, это могло бы уменьшить попоболь и вносимые ошибки.
Аноним 07/04/21 Срд 14:27:01 1988906251
>>1988888
В смысле нет конкурентов? А zig? А rust без стдлибы?
Аноним 07/04/21 Срд 14:45:31 1988916252
>>1988906
>А zig? А rust
Какие страшные слова. Ну зачем мне эти языки, если я пишу на Си и Си с плюсами? И на них я могу сделать всё. Почти всё.

>>1988902
> а производительность и возможность навешивать плюшки до бесконечности.
Так выбор алгоритма это 75%-90% производительности, а остальное это остальные факторы, начиная от прямоты рук и заканчивая вомзожностями компилятора.

Например, я обожаю ассоциативный массивы, просто оргазмирую от этой структуры данных, при этом даже на плюсах иногда отказываюсь от использования std::map и фигачу свою специализированную реализацию хеш-таблиц, заточенных под конкретную задачу.
Аноним 07/04/21 Срд 14:56:58 1988919253
>>1988916
Удивительно как сишники/плюсовики в упор не понимают проблем своего языка. Конечно, это дорого переучиваться, и зачастую незачем, но в такое отрицалово реальности уходить можно разве что из-за непомерного количества времени которое ушло на изучение плюсов. Типа никому не признаюсь что купил говно, уж очень оно дорогое было.
Аноним 07/04/21 Срд 15:07:12 1988926254
>>1988919
>в упор не понимают проблем своего языка
ну и что тебе ответить? Если не брать во внимание хитрые шаблоны, то смотря на код я знаю что сгенерирует компилятор и как будет выполняться сгенеррованный код. Знаю что и где будет оптимизировано, какие конструкции поломают оптимизацию, а где можно оптимизировать руками.

А некоторые приёмы вообще рассказывать не хочется, потому как в чистом виде know how, что позволяет иметь конкурентное преимущество.
Аноним 07/04/21 Срд 15:14:18 1988935255
>>1988926
При этом zig и rust для тебя страшные слова. Удивительно.
Аноним 07/04/21 Срд 15:18:40 1988941256
>>1988935
Это из анекдота, зумерок.
07/04/21 Срд 15:56:03 1989013257
>>1988941
Токсичный дед. Ну понятно.
Аноним 07/04/21 Срд 16:11:40 1989029258
>>1988906
Есть еще божественная Дишечка с ее BetterC.
Аноним 07/04/21 Срд 19:00:48 1989169259
бамп
Аноним 08/04/21 Чтв 00:46:23 1989546260
Кто-нибудь пробовал для прикола программировать на B lang? ИТТ ведь много энтузиастов, вряд ли у вас всех голвый Си на работе.
Аноним 08/04/21 Чтв 00:51:23 1989551261
Аноним 08/04/21 Чтв 09:45:49 1989665262
Как же надоело проверять возвращаемые значения...
Аноним 08/04/21 Чтв 10:51:50 1989704263
144276890116823[...].webm 619Кб, 314x176, 00:00:05
314x176
Аноним 08/04/21 Чтв 11:05:24 1989714264
Аноним 08/04/21 Чтв 11:09:13 1989716265
>>1989704
Вот тут говно какое-то.

nb = (strlen(buf) > 0) ? nb += strlen(buf + nb) : 0;

Перепиши.


Аноним 08/04/21 Чтв 11:22:28 1989731266
14280770828420.png 67Кб, 308x300
308x300
>>1989716
Нет там никакого говна.
Попытался сделать выбор массива, куда надо писать, путём добавления ещё одного аргумента в макрос и функцию.
И, видимо, где-то обосрался.

Когда убираю аргумент и делаю массив фиксированным - всё работает как надо.
Аноним 08/04/21 Чтв 11:30:06 1989735267
>>1989731
Я тебе сказал что делать. Выбор за тобой - ебись дальше или перепиши нормально.
Аноним 08/04/21 Чтв 11:47:13 1989767268
>>1989735
Ну рас ты скозал...
Хоть объясни что не так. Что там, блядь, криминального?
Аноним 08/04/21 Чтв 11:48:30 1989770269
trr
Аноним 08/04/21 Чтв 12:08:23 1989804270
>>1989731
Прочитай выражение которое написал. Оно реально не самое очевидное. От такого в коде лучше избавляться.
Аноним 08/04/21 Чтв 12:09:52 1989806271
Аноним 08/04/21 Чтв 12:27:01 1989816272
149159131619765[...].jpg 25Кб, 480x293
480x293
>>1989804
И как бы мне это помогло, просто интересно?
Ну вот переписал я. Но в целом это не поможет...

Я уже обрадовался: чел помог, нашёл в чём проблема - поправлю и пойду бодаться дальше, а тут ему не нравится написание... БЛЯДЬ!

https://onlinegdb.com/SkvVhB2Hd
Аноним 08/04/21 Чтв 12:40:39 1989836273
>>1989704
>countof(buf)
>(sizeof(array) / sizeof(array[0]))
Ты в функцию передал уже не массив, а только указатель.
Аноним 08/04/21 Чтв 12:41:18 1989839274
>>1989816
Это намек что ты пишешь трудночитаемое говно. Если левый созерцатель не смог понять что у тебя происходит - вряд ли и ты понимаешь что пишешь. Один это выразил негодованием и требованием переписать строчку, второй предупредил что строка мутная. Оба просто не захотели в нечитаемом говне колупаться.
Но вообще у тебя ошибка из-за использования макроса так то, а остальной код - ну его можно просто заменить на 2 строчки - вызов vsnprintf и прибавление к nb количества символов.
Аноним 08/04/21 Чтв 12:43:51 1989844275
>>1989767
multiple unsequenced modifications
Аноним 08/04/21 Чтв 12:50:00 1989850276
image.png 75Кб, 698x556
698x556
image.png 39Кб, 454x234
454x234
>>1989836 >>1989816
Если захардкодить, то работает, но тебе надо менять логику, правильно выше пишут. Первым звоночком должно было стать, что у тебя 2 раза одно и то же условие проверяется.
Аноним 08/04/21 Чтв 13:00:47 1989859277
14514848092970.jpg 60Кб, 900x900
900x900
>>1989839
>Это намек что ты пишешь трудночитаемое говно. Если левый созерцатель не смог понять что у тебя происходит
Я, блядь, голову на отсечение даю - ты ещё трудночитаемого говна не видел!
И к кому мне, бладжад, бежать, если мне что-то не нравится?

>>1989850
>>1989836
>в функцию передал уже не массив, а только указатель
Это как-то можно пофиксить?
Подсчёт кол-ва чимволов просто и в других местах использую.
Пока засунул в епременную внутри функции...
Аноним 08/04/21 Чтв 13:05:00 1989866278
>>1989859
> >Это намек что ты пишешь трудночитаемое говно. Если левый созерцатель не смог понять что у тебя происходит
> Я, блядь, голову на отсечение даю - ты ещё трудночитаемого говна не видел!
Вообще видел, ты его сюда притащил.
> И к кому мне, бладжад, бежать, если мне что-то не нравится?
fork & pull request
Аноним 08/04/21 Чтв 13:05:30 1989868279
>>1989859
>И к кому мне, бладжад, бежать, если мне что-то не нравится?
Поздно уже бежать, надо было учить, пока была возможность.

>Это как-то можно пофиксить?
Захардкодить в дефайне или глобалке и везде использовать; передавать размер ещё одним аргументом; передавать структуру с массивом внутри, тогда весь массив будет копироваться; переходить на другой язык, где это делается автомагически; поменять логику программы.
Аноним 08/04/21 Чтв 13:15:37 1989879280
>>1989859
>Это как-то можно пофиксить?
Ты студент? Отвечай! А? М?
Аноним 08/04/21 Чтв 13:22:01 1989893281
>>1989866
>Вообще видел, ты его сюда притащил.
Смешно. Линус, залогинься. Тоже мне, единственный и неоспоримый нашёлся.
>>1989868
>Поздно уже бежать, надо было учить, пока была возможность.
Ещё один. Шиза.

>>1989879
Вот только не надо. Ещё название ВУЗа попроси, чтобы на кафедру отписать.
Нет, не студент.
Аноним 08/04/21 Чтв 13:25:30 1989904282
>>1989893
>Вы все шизики! Один я д'Артаньян стою красивый в белом пальто и знаю, как правильно! (только ошибку за меня найдите, а то мне тяжело)
Аноним 08/04/21 Чтв 13:32:24 1989920283
Возможно я зря огрызаюсь, но не нападали бы - не пришлось бы писать подобную дичь.

>>1989904
Чувак, давно у психиатра был?
Дай угадаю, ты там ржал при написании. Я тоже посмеялся.

Аноним 08/04/21 Чтв 13:51:03 1989964284
>>1989893
>Смешно. Линус, залогинься. Тоже мне, единственный и неоспоримый нашёлся.
Знаешь, качественный код отбирают тонны глаз. А ты проверки парой глаз не прошел.
>Ещё один. Шиза.
На самом деле ты не умеешь признавать свои ошибки и программист из тебя явно из-за этого херовый.
>Вот только не надо. Ещё название ВУЗа попроси, чтобы на кафедру отписать.
Ну это многое бы объясняло. В основном студенты так оправдывают свое говно.
>>1989904
Выглядит реально так, лол.
>>1989920
> Возможно я зря огрызаюсь, но не нападали бы - не пришлось бы писать подобную дичь.
Дураком себя выставил на самом деле. На критику и негатив реагировать не умеешь. За умного ты больше не сойдешь здесь.
Аноним 08/04/21 Чтв 13:55:42 1989974285
>>1989964
>А ты проверки парой глаз не прошел.
>За умного ты больше не сойдешь здесь.
Какой ужас. Как же теперь дальше жить. Пожалуй, выйду покурить в окно.

Иди на хуй просто, лол.
Аноним 08/04/21 Чтв 14:09:56 1990003286
>>1989974
Кого ты посылаешь, маня, посылалка не выросла, ты даже код писать не умеешь, лол.
Аноним 08/04/21 Чтв 18:29:56 1990327287
sshot-2021-04-0[...].png 10Кб, 662x259
662x259
sshot-2021-04-0[...].png 32Кб, 647x699
647x699
бамп
Аноним 08/04/21 Чтв 19:13:51 1990381288
Аноним 08/04/21 Чтв 19:20:27 1990396289
>>1988919
Конечно, есть проблемы. Есть свои проблемы у всего. Но так ли они суперкритичны, чтобы уходить на что-то другое? И будут ли какие-то суперпреимущества, которые нивелируют новые проблемы? То-то же.
Аноним 08/04/21 Чтв 19:21:24 1990399290
Аноним 08/04/21 Чтв 19:28:50 1990417291
Аноним 08/04/21 Чтв 19:37:15 1990428292
>>1990396
Да я не призываю уходить. Преимущества есть, всё не на ровном месте выросло. Хотя бы в курсе дел быть стоит. А то получаются такие личности, которые искренне верят что существует только один язык, это на котором я пишу, и конкурентов у него нет, тоже только потому что я на нём пишу.
Аноним 08/04/21 Чтв 20:24:41 1990483293
sshot-2021-04-0[...].png 22Кб, 541x508
541x508
>>1990381
Чуть переделал, спасибо.
Аноним 09/04/21 Птн 09:57:58 1990848294
>>1990483
Код говно, да и сам ты лох и чмо :)
Аноним 09/04/21 Птн 15:19:55 1991112295
>Unfortunately, the PC industry has never been good about maintaining standards. So each PC manufacturer and each BIOS manufacturer randomly made up new BIOS functions.

неужели за 40 лет нельзя было запилить?
кун-с-бутлодером
Аноним 09/04/21 Птн 15:24:11 1991116296
Аноним 09/04/21 Птн 19:45:02 1991332297
>>1991112
Большинство стандартных вещей поддерживалось всеми более-менее одинаково. Уж на бутлоадер-то точно хватало. А сейчас UEFI уже, вообще не о чем думать.
Аноним 09/04/21 Птн 20:05:36 1991338298
Аноним 09/04/21 Птн 20:13:26 1991344299
>>1991338
>yvDz8u7pIOru5CE=
Я не уверен, но по-идее можно в таблицу ебануть нули на позицию '=', и тогда всё будет чики-пуки.
Аноним 09/04/21 Птн 20:16:29 1991345300
>>1991112
Зачем тебе бутлоадер?
Аноним 10/04/21 Суб 18:17:16 1992062301
>>1991116
Ly8gyu7k6PDu4uDt6OUgYmFzZTY0DQppbnQgYmFzZTY0X2VuYyhjaGFyICpvdXRwdXQsIGNoYXIgKmlucHV0LCBpbnQgc2l6ZV9pbnB1dCwgaW50ICp0ZW1wLCBpbnQgc3RyX2xlbikNCnsNCgljaGFyICpiNjQgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7DQoJY2hhciAqZmxhZyA9IChjaGFyICopIHRlbXA7DQoJY2hhciAqdCA9IChjaGFyICopIHRlbXAgKyAxOw0KCWNoYXIgKmRhdGEgPSAoY2hhciAqKSB0ZW1wICsgMjsNCgljaGFyICpkbGVuID0gKGNoYXIgKikgdGVtcCArIDM7DQoJaW50IG4gPSAwOw0KCQ0KCXN0cl9sZW4gPSBzdHJfbGVuIC8gNCAqIDQ7DQoJDQoJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplX2lucHV0OyBpKyspDQoJew0KCQlzd2l0Y2ggKCp0KQ0KCQl7DQoJCQljYXNlIDA6DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbaW5wdXRbaV0gPj4gMiAmIDYzXTsNCgkJCQkqZGF0YSA9IGlucHV0W2ldOw0KCQkJCSgqdCkrKzsNCgkJCQlpZiAoKmZsYWcgJiYgaSA9PSBzaXplX2lucHV0IC0gMSkNCgkJCQl7DQoJCQkJCW91dHB1dFtuKytdID0gYjY0WypkYXRhIDw8IDQgJiA0OF07DQoJCQkJCW91dHB1dFtuKytdID0gJz0nOw0KCQkJCQlvdXRwdXRbbisrXSA9ICc9JzsNCgkJCQkJb3V0cHV0W24rK10gPSAweDBEOw0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEE7DQoJCQkJCSp0ID0gMDsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDE6DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbKmRhdGEgPDwgNCAmIDQ4IHwgaW5wdXRbaV0gPj4gNCAmIDE1XTsNCgkJCQkqZGF0YSA9IGlucHV0W2ldOw0KCQkJCSgqdCkrKzsNCgkJCQlpZiAoKmZsYWcgJiYgaSA9PSBzaXplX2lucHV0IC0gMSkNCgkJCQl7DQoJCQkJCW91dHB1dFtuKytdID0gYjY0WypkYXRhIDw8IDIgJiA2MF07DQoJCQkJCW91dHB1dFtuKytdID0gJz0nOw0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEQ7DQoJCQkJCW91dHB1dFtuKytdID0gMHgwQTsNCgkJCQkJKnQgPSAwOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQlvdXRwdXRbbisrXSA9IGI2NFsqZGF0YSA8PCAyICYgNjAgfCBpbnB1dFtpXSA+PiA2ICYgM107DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbaW5wdXRbaV0gJiA2M107DQoJCQkJKnQgPSAwOw0KCQkJCWlmIChzdHJfbGVuICYmIChuICsgKmRsZW4pICUgKHN0cl9sZW4gKyAyKSA9PSBzdHJfbGVuIHx8ICpmbGFnICYmIGkgPT0gc2l6ZV9pbnB1dCAtIDEpDQoJCQkJew0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEQ7DQoJCQkJCW91dHB1dFtuKytdID0gMHgwQTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQoJDQoJaWYgKCpmbGFnKQ0KCQkqZGxlbiA9IDA7DQoJZWxzZQ0KCQkqZGxlbiA9IChuICsgKmRsZW4pICUgKHN0cl9sZW4gKyAyKTsNCgkNCglyZXR1cm4gbjsNCn0NCg0KLy8gxOXq7uTo8O7i4O3o5SBiYXNlNjQNCmludCBiYXNlNjRfZGVjKGNoYXIgKm91dHB1dCwgY2hhciAqaW5wdXQsIGludCBzaXplX2lucHV0LCBpbnQgKnRlbXApDQp7DQoJY2hhciAqdCA9IChjaGFyICopIHRlbXAgKyAxOw0KCWNoYXIgKmRhdGEgPSAoY2hhciAqKSB0ZW1wICsgMjsNCgljaGFyIGluZGV4Ow0KCWludCBuID0gMDsNCgkNCglmb3IgKGludCBpID0gMDsgaSA8IHNpemVfaW5wdXQ7IGkrKykNCgl7DQoJCWluZGV4ID0gaW5wdXRbaV07DQoJCWlmIChpbmRleCA+PSA2NSAmJiBpbmRleCA8PSA5MCkgLy8gQS1aDQoJCQlpbmRleCAtPSA2NTsNCgkJZWxzZSBpZiAoaW5kZXggPj0gOTcgJiYgaW5kZXggPD0gMTIyKSAvLyBhLXoNCgkJCWluZGV4IC09IDcxOw0KCQllbHNlIGlmIChpbmRleCA+PSA0OCAmJiBpbmRleCA8PSA1NykgLy8gMC05DQoJCQlpbmRleCArPSA0Ow0KCQllbHNlIGlmIChpbmRleCA9PSA0MykgLy8gKw0KCQkJaW5kZXggPSA2MjsNCgkJZWxzZSBpZiAoaW5kZXggPT0gNDcpIC8vIC8NCgkJCWluZGV4ID0gNjM7DQoJCWVsc2UgDQoJCQlpbmRleCA9IC0xOw0KCQkNCgkJaWYgKGluZGV4ID49IDApDQoJCXsNCgkJCXN3aXRjaCAoKnQpDQoJCQl7DQoJCQkJY2FzZSAwOg0KCQkJCQkqZGF0YSA9IGluZGV4IDw8IDI7DQoJCQkJCSgqdCkrKzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAxOg0KCQkJCQlvdXRwdXRbbisrXSA9ICpkYXRhIHwgaW5kZXggPj4gNDsNCgkJCQkJKmRhdGEgPSBpbmRleCA8PCA0Ow0KCQkJCQkoKnQpKys7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjoNCgkJCQkJb3V0cHV0W24rK10gPSAqZGF0YSB8IGluZGV4ID4+IDI7DQoJCQkJCSpkYXRhID0gaW5kZXggPDwgNjsNCgkJCQkJKCp0KSsrOw0KCQkJCQlicmVhazsNCgkJCQljYXNlIDM6DQoJCQkJCW91dHB1dFtuKytdID0gKmRhdGEgfCBpbmRleDsNCgkJCQkJKnQgPSAwOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkNCglyZXR1cm4gbjsNCn0=
Аноним 10/04/21 Суб 19:57:13 1992170302
>>1992062
Ты суть-то понял, зачем используется таблица, и почему подобный метод быстрее на современном железе?
Аноним 10/04/21 Суб 20:39:33 1992234303
>>1992170
Да - ты сразу получаешь нужный base64-индекс.
Аноним 10/04/21 Суб 20:50:21 1992247304
>>1992234
На поверхности. Cмысл в том, что ты экономишь на командах, и на современном железе за такой небольшой таблицей ты в память не ходишь.
Аноним 10/04/21 Суб 22:11:45 1992329305
>>1992247
То есть она вся располагается во внутренней памяти процессора?
Аноним 10/04/21 Суб 22:23:19 1992340306
>>1992329
Не дальше второго уровня.
Аноним 11/04/21 Вск 01:17:40 1992442307
>>1992329

256 байт - это 6 кэшлайнов в худшем случае, в плотном цикле они ваще не будут выходить из кэша первого уровня.
Аноним 11/04/21 Вск 21:18:31 1992964308
Есть ли смысл в постоянных деалокациях?
Аноним 12/04/21 Пнд 08:08:50 1993410309
>>1992964
Если освобождаешь горячую память(в кэше). Или памяти мало(ембед).
Аноним 12/04/21 Пнд 16:03:22 1993799310
>>1964998
Ты зарплаты сначала посмотри. Охуеешь.
Аноним 12/04/21 Пнд 22:05:33 1994148311
>>1982789
> Дико извиняюсь, был не прав, сейчас тоже листинги посмотрел, там при передаче массива в качестве аргумента, он на указатель распадается.
В Си массивы никогда неявно не копируются.
Более того, объявления void f(int arr[32]), void f(int arr[]) и void f(int * arr) вообще абсолютно эквивалентны друг другу.

> Неплохая каша у меня в голове, тогда где массивы полностью копируются?
Целиком копируются лишь структуры со всеми их полями (но не массивы структур, тут правила те же).
А ещё std::vector<> и иже с ними из плюсов, а также классы со специальными конструкторами копирования оттуда же, но это уже не Си, понятное дело.
Скорее всего, именно с плюсовыми шаблонами из STL всё и перепуталось.
Аноним 12/04/21 Пнд 22:29:52 1994159312
>>1989816
При передаче указателя на массив в функцию efm_log_writev()
Функция получает указатель на sendbuf, а не весь массив. Информация о размере массива внутри функции утеряна.
В связи с этим countof(buf) внутри этой функции всегда возвращает sizeof(char )/sizeof(char) = 8 (или 4 на 32-битной архитектуре), но никак не ожидаемые 2000.

Переписывается примерно так. Не тестировал, но суть должна быть понятна.
> void efm_log_writev(char
buf, const char tag, const char format, va_list args)
void efm_log_writev(char buf, unsigned buf_countof, const char tag, const char *format, va_list args)

> #define EFM_LOGE( buf, tag, format, ... ) efm_log_write(buf, tag, LOG_FORMAT(E, format), tag, ##__VA_ARGS__)
#define EFM_LOGE( buf, buf_countof, tag, format, ... ) efm_log_write(buf, buf_countof, tag, LOG_FORMAT(E, format), tag, ##__VA_ARGS__)

И так далее, всюду после buf добавляешь buf_countof
В самой функции efm_log_writev вместо countof(buf) и sizeof(buf) используешь buf_countof. К счастью, размер char всегда равен одному байту по определению, так что они здесь будут эквивалентны.

На самом верхнем уровне
> EFM_LOGE(sendbuf, TAG, "FOO %s, %d", "bar", 123);
EFM_LOGE(sendbuf, countof(sendbuf), TAG, "FOO %s, %d", "bar", 123);

Макрос countof() может быть полезным, но об него очень просто обрезаться. Настолько просто, что я бы не рекомендовал использовать его практически нигде, кроме тех случаев, когда работаешь с массивом, который только что локально объявил на стеке.
А без знания этих тонкостей языка его лучше вообще не трогать, как по мне.
Аноним 12/04/21 Пнд 22:31:41 1994161313
>>1994159
*забыл обработать звёздочки как надо, ну да ладно, суть всё равно должна быть понятна
Аноним 13/04/21 Втр 01:34:42 1994296314
изображение.png 29Кб, 1315x403
1315x403
Котаны, объясните, почему иногда функции пишут в хедерах?
Аноним 13/04/21 Втр 03:50:26 1994309315
>>1994159
Забей. Этому долбоебу не стоит помогать. Он на помощь огрызается.
Аноним 13/04/21 Втр 03:53:58 1994310316
>>1994296
Можно написать в хэдэре функцию, чтобы ее определение было в файлах, в которые ты подключил заголовочник. Плюсом к этому получаешь библиотеку, которая не имеет своих модулей компиляции. Сплошь удобство? Минусы есть - могут быть дубликаты функций в разных файлах, куда ты свой заголовочник подключал. Особенно если делал функции как static.
Причины можно придумывать дальше, да и недостатки подхода тоже. Как и во всем Си - надо знать что делаешь, и с какой целью, и тогда это оправдано.
Аноним 13/04/21 Втр 03:57:09 1994312317
>>1994296

это сишный способ писать шаблоны. Таким образом можно реализоввывать библиотеки с двумя важными свойствами
1) типобезопасность
2) лучшая оптимизация (чем при передаче шаблонного параметра в качестве "обычного")

с типобезопасностью понятно. в плане оптимальности, если рассматривать пример библиотеки векторных вычислений, компилятор сможет заинлайнить векторные функции, в то время как при стандартном подходе (заголовок + реализация в отдельном компилируемом модуле) компилятору придётся строго придерживаться ABI (по-простому - протокола передачи аргументов при вызове функции). компилятору придётся лишний раз копировать данные (частенько); так как функция теперь - чёрный ящик, он не сможет оптимизировать, используя о ней знание.
Аноним 13/04/21 Втр 07:14:57 1994331318
>>1994309
Спасибо, но я просто задал размер массива в дефайне, а затем объявляю массив с задефаненным размером. Пока всё нормально.

>>1994309
>Этому долбоебу не стоит помогать. Он на помощь огрызается.
Это не помощь. На меня просто вылили ушат помоев, которые, похоже, до меня приняли такие вот "помощники".

Спасибо, ЧСВ-шное чмо, за твою "помощь". Ебал я таких помощников.
Аноним 13/04/21 Втр 08:02:38 1994340319
есть тут, кто llvm собирал с clang под windows? как долго происходил make-процесс? это пиздец, llvm собирался 4 часа, clang быстрее, но все равно долго (2ч где-то). что за хуйня? почему так нахуй, обэма? при чем cmake сам там все флаги оптимизации поставил -O3 на этапе конфигурации мейкфайла. на *unix так же долго все?
Аноним 13/04/21 Втр 08:07:14 1994343320
>тест
>тест
Аноним 13/04/21 Втр 10:43:39 1994417321
>>1994340
Кода много, железо слабое, собираешь в 1 поток. Причин достаточно
Аноним 13/04/21 Втр 11:53:06 1994471322
>>1994340
Плюсы
@
Несколько гигов исходников
@
Хуле так долга собирается

Пару лет назад нужно было собрать, ждал 8 часов.
Аноним 13/04/21 Втр 12:23:44 1994506323
pills-lemon.jpg 31Кб, 552x710
552x710
Аноним 13/04/21 Втр 13:26:10 1994539324
>>1994506
Че то не нраветься?
Аноним 13/04/21 Втр 14:03:22 1994571325
единственный способ копирать из файла в файл только через буфер? и зачем нужен setbuf() и друзья?
Аноним 13/04/21 Втр 14:18:51 1994578326
>>1994571
Наверняка есть какой-нибудь системный вызов для копирования файлов, ну и обёртка над ним в стдлибе.
>man setbuf
>stream buffering operations
Фаел != стрим, чувак.
Аноним 13/04/21 Втр 14:28:40 1994587327
>>1994340
Помню, как пытался собрать эту залупу. Раз 5 где-то пересобирал. Самый лютый пиздец в том, что пока ты не соберешь успешно до условных 60-80%, ты не узнаешь какая хуйня решит наебнуться/отвалиться. В основном это из-за кривой конфигурации cmake, а официальная документация llvm-project оставляет желать лучшего. Короче, собирал где-то 3 дня все это. Правда не помню уже зачем и нахуя.
Аноним 13/04/21 Втр 21:02:58 1995082328
>>1994578
>Наверняка есть какой-нибудь системный вызов для копирования файлов,

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

>>man setbuf
>>stream buffering operations
>Фаел != стрим, чувак.

так отличие только в сикабельности, все стандартные потоки в прыщах есть char devices, т.е. тe же файлы.
Аноним 13/04/21 Втр 22:33:52 1995212329
>>1994331
Ну, так тоже сработает, конечно.
Мой вариант пригодится в случае, если код разрастётся и если вдруг когда-нибудь придётся использовать более чем один буфер с разными размерами.
Просто поосторожнее с countof() и sizeof(): они в этом аспекте очень опасны.
Вот.
Аноним 14/04/21 Срд 11:31:36 1995602330
snake.zip.png 10Кб, 408x430
408x430
Написал змейку на winapi. Пипец, первый раз пишу что-то сложнее хеловорда на винапи, это было трудновато, но интересно. Архив с программой в картинке.

Раскритикуйте говнокод пожалуйста:
https://pastebin.com/zWmKy6AY
Аноним 14/04/21 Срд 13:05:12 1995666331
>>1995602
1- нет комментариев
2- нет разделения между логикой игры и винтухлятиной
3- направление проще представлять в виде двух дельт, тогда уйдут свитчи
Аноним 14/04/21 Срд 14:25:32 1995727332
>>1995666
>разделения между логикой игры и винтухлятиной
Это как делается?
Аноним 14/04/21 Срд 15:28:25 1995781333
>>1995727
Тип короче ты всякие штуки, которые относятся чисто к сущности snake мутишь в wndproc, хотя их бы вынести в отдельные функции (возможно, даже в отдельный compile unit, если бы >>1995666 анон этого затребовал), думай об этом так, что если бы тебя попросили написать змейку для терминала (80×24), неплохо было бы использовать уже написанное. Неплохо бы написать комменты, описалово к функциям, ну и вообще.

Выше ньюфаг декодер для base64 делал, пиздуй декодер для utf8 писать, скидывай результат в тред, обсудим
Аноним 14/04/21 Срд 15:29:41 1995783334
Почему конпилятор ругается на (a > b) ? b = a : a = b, но не на аналогичную конструкцию с if/else? причём именно на второе присвоение, пишет что *а это не lvalue
Аноним 14/04/21 Срд 15:33:36 1995789335
2021-04-14 1732[...].jpg 22Кб, 1044x108
1044x108
>>1995783
бля забыл что между звёздочками курсив, не сижу на ваших двачах просто
короче пикрил смотрите
Аноним 14/04/21 Срд 15:52:49 1995800336
>>1995789
Однажды Эрнест Хемингуэй поспорил что сможет написать строку, способную растрогать любого

Выражения дополнительно в скобки оберни.
Аноним 14/04/21 Срд 16:16:25 1995832337
>>1995800
Какова же разница между expression и conditional expression?
Аноним 14/04/21 Срд 19:41:41 1996188338
>>1995789
Приоритет тернарного ниже присвоения.
Аноним 14/04/21 Срд 22:11:57 1996379339
>>1959736
Тебе надо добавить перевод строки чтобы буфер сбрасывался
Аноним 15/04/21 Чтв 01:22:12 1996482340
>>1995781
>декодер для utf8 писать
Нахуя, какой в этом толк?
Аноним 15/04/21 Чтв 19:01:44 1997297341
>>1996188
То есть выше, но все всё поняли.
Аноним 15/04/21 Чтв 21:41:00 1997450342
Аноним 15/04/21 Чтв 22:06:43 1997458343
Аноним 15/04/21 Чтв 22:17:11 1997465344
Аноним 15/04/21 Чтв 22:21:59 1997471345
Аноним 16/04/21 Птн 01:13:33 1997601346
Помогите с дочерними процессами.
Пишу свой обрезанный шелл. Проблема при вызове любой комманды с пайпом - к примеру ls | cat -e.
Поставленно все так, что для каждой отдельной команды определяется откуда и куда вводить\выводить вызывается fork в котором выполняется execve. Таким образом выходят паралельные дочерние процессы, в случае примера первая дочь будет execve(ls) а вторая execve(cat).
Проблема в том, что хоть как-то умирает после execve только первый процесс (уходит в зомби), все что после него продолжает жить, даже после вывода. То есть пример выведет все как надо, но вторая дочь (cat) будет продолжать работать. Что происходит и как это исправить?
Аноним 16/04/21 Птн 01:20:59 1997608347
>>1995082
> >Наверняка есть какой-нибудь системный вызов для копирования файлов,
> наврятли.
sendfile на Linux, fcopyfile на bsd/mac os
На винде думаю свое апи тоже есть
Аноним 16/04/21 Птн 01:49:31 1997625348
16/04/21 Птн 11:06:18 1997782349
>>1997601
>дочерними процессами
Сажи безграмотному.
Аноним 16/04/21 Птн 11:57:58 1997833350
>>1997782
>Сажи безграмотному.
Чем тебе не нравитсч "дочерний"? Сыновний или детский звучит вырвиглазно.

Можно конечно использовать "порождённый" или "потомок", но такой термин точно не передаёт суть.
Аноним 16/04/21 Птн 12:51:25 1997897351
>>1997833
> Чем тебе не нравитсч "дочерний"?
Потому что процесс.
> Сыновний звучит вырвиглазно.
Кек.
Аноним 16/04/21 Птн 12:52:17 1997898352
>>1997782
Даже в мане говорится про дочерний, но давай, приведи свой охуенный вариант
Аноним 16/04/21 Птн 12:57:47 1997902353
man.png 17Кб, 785x152
785x152
>>1997898
>в мане
Кек
>свой
Сыновний (ТАДАМ!)
Аноним 16/04/21 Птн 13:22:06 1997932354
Аноним 16/04/21 Птн 13:26:12 1997939355
>>1997897
Тебя не смущает что "седьмой час", это нифига не семь часов и сколько-то там минут.
Тебя не смущает что XX век это 1901-2000?
Тебя не смущает что при этом "девяностые" это 1990-1999?
Иди лучше там повоюй.
Аноним 16/04/21 Птн 13:41:31 1997954356
>>1997932
> Сссылается на перевод каких-то
> Alexey Mahotkin <alexm@hsys.msk.ru> 2000
> Виктор Вислобоков <corochoone@perm.ru> 2003

>>1997939
Меня смущает ровно то, что существительное мужского рода называют дочерью.
Аноним 16/04/21 Птн 13:51:08 1997968357
>>1997954
>Alexey Mahotkin <alexm@hsys.msk.ru>
Я это имя ещё в FidoNet слышал. Яркий персонаж. Глыба. Старая школа.

>>1997954
>Меня смущает ровно то, что существительное мужского рода называют дочерью.
Да и пофиг. Удобно.
Аноним 16/04/21 Птн 13:57:49 1997981358
>>1997897
Дочерний менструальный цикл тебя бы не смутил
Аноним 16/04/21 Птн 14:11:36 1997992359
>>1997981
Не, он имеет ввиду что процесс - дочь просесса. Как сын - дочь отца выходит
В твоём примере - Дочерний цикл = цикл у дочери
Аноним 16/04/21 Птн 14:22:18 1998007360
>>1997992
Перекатился в гейропку в IT
@
Постоянно слышишь, как о программисте в общем контексте говорят she
@
Проверяешь не отвалился ли у тебя член
Аноним 16/04/21 Птн 14:54:26 1998024361
Аноним 16/04/21 Птн 15:09:50 1998053362
>>1997625
cat скорее всего будет ждать закрытия write конца, поэтому она будет заблокирована в системном вызове, ведь eof никогда не придёт
Судя по коду я не вижу возможным, что до execve(ls) дойдёт. Если посылалось cmd: [ls, pipe(1)], [cat, pipe(0)]: то будет, во-первых, race condition между родителем и потомком, во-вторых, fork с execve(cat) [child], и потом уже в зависимости, от результатов гонки waitpid, если выиграл родитель, то он заблочиться в waitpid, ежели нет будет возвращение из функции, и будет fork для ls, который тоже будет тупа либо зомбёй либо его рипнут через waitpid.
Добавлю, что ты ещё вообще не проверяешь результаты системных вызовов, плюсом надо бы проверить чё там по сигналам.
Короче хуёво написал, переделывай.
Аноним 16/04/21 Птн 15:32:46 1998067363
пишу свой красивый хуец на сисколлах, помогите с имплементацией тестикул.
Аноним 18/04/21 Вск 11:52:34 2000088364
onerror.png 193Кб, 1920x1080
1920x1080
onerror2.png 146Кб, 1920x1080
1920x1080
onhalt.png 86Кб, 1920x1080
1920x1080
147682784418507[...].jpg 27Кб, 400x238
400x238
Есть ли тут эмбед-господа с опытом дебага МК ARM Cortex-M4?

В своей махарайке использую cJSON либу: https://github.com/DaveGamble/cJSON
Спустя пару минут работы программного цикла ловлю hardfault, похоже, связанный именно с этой либой.

Логи регистров состояния: https://pastebin.com/b2Y23vBV

С такой фигнёй сталкиваюсь впервые, опыта - нуль.

Или сажите, на каком форуме смогут помочь.
Аноним 18/04/21 Вск 14:51:39 2000245365
как задать варнинг-левел для гсс из консоли?
Аноним 18/04/21 Вск 22:38:34 2000808366
Аноним 19/04/21 Пнд 05:16:20 2000941367
>>2000088
Каким-то хером output_size (скриншот 2) увеличилось до 13618.
Хотя размер строки не превышает 2000 символов.

Как отловить почему произошло увеличение?
Аноним 19/04/21 Пнд 16:33:50 2001545368
Подскажите почему EOF в виндовс если идет после других символов не читается, читается только с начала новой строки?
пример
123^Z
пробел^Z

не определяется как EOF.
Аноним 19/04/21 Пнд 16:52:39 2001595369
>>2001545
Это везде так, EOF только с начала строки.
Аноним 20/04/21 Втр 10:26:34 2002106370
Какая же сишечка няшная
Аноним 20/04/21 Втр 16:34:42 2002555371
Как написать вирус шоб коспрески не нашол
Аноним 20/04/21 Втр 17:42:41 2002614372
>>2002555
Спрячь его корзину с грязными трусами.
Аноним 21/04/21 Срд 15:06:23 2003468373
BKP.png 16Кб, 620x275
620x275
15943001843110.jpg 6Кб, 200x197
200x197
Всё кекаете по подворотням?

А я снова в окопы...
Аноним 21/04/21 Срд 18:01:05 2003660374
14891298274230.jpg 40Кб, 500x480
500x480
>>2003468
Подскажите, плез, мне нужен этот коммит: https://github.com/DaveGamble/cJSON/pull/494

Как его применить самостоятельно к текущему релизу бибилиотеки, если он не одобрен разработчиками?
Аноним 21/04/21 Срд 18:48:09 2003712375
>>2003660
Зачем есть говно, когда есть Jansson.
Аноним 21/04/21 Срд 19:11:18 2003733376
Подскажите логгер нормальный
Аноним 22/04/21 Чтв 03:24:16 2004044377
>>2003712
Затем, что Jansson - такое же говно и у cJSON больше упоминаний про embed. По крайней мере свежих.
Аноним 22/04/21 Чтв 15:42:06 2004501378
>>2003660
Самый простой способ это склонировать бранч того человека который сделал пул реквест и собрать библиотеку с этого бранча.
Аноним 22/04/21 Чтв 15:50:02 2004512379
Аноним 22/04/21 Чтв 15:59:18 2004524380
Как вставить элемент в конец линейного списка? (?), вроде так это называется, но не уверен. Ниже код, ебусь уже долго,поэтому в нём слегка бардак, ссаными тряпками не бейте




код
using namespace std;
struct towary
{
char nazva[15], manufacturer[100] ;
int price, zal;
long int mass;
struct towary next; // посилання на наступний вузол
};
struct towary
poperedtow, element, pershiy, novii, ostan;
void Stvorutu(void); // Функція створення списку
void Vuvestu(void); // Функція виведення елементів списку
void Novuy(void); // Функція створення нового елемента та внесення його на початоксписку

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

printf("Створюємо список який містить інформацію про товари (назва, ціна, вага, залишок,виробник). \n");
printf("Для закінчення введення списку ввести нулі у всі поля \n");
Stvorutu();
printf("Створений список \n");
//Vuvestu();
printf("Додаємо в кінець списку новий елемент \n");


Novuy();
element = ostan;
novii->next = element;
ostan = novii; // Додаємо новий елемент до початку списку
printf("Оновлений список: \n");
Vuvestu();
return 0;
}

void Stvorutu(void)
{
element = (struct towary)malloc(sizeof(struct towary)); // Виділення пам'яті під новий вузол
pershiy = element;
do
{
poperedtow = element; // Попередній вузол вказує на створюваний
printf("Введіть назву товару, ціну, вагу, залишок, виробника ");
scanf("%s %d %d %d %s", element->nazva, &element->price, &element->mass, &element->zal, &element->manufacturer); //Збереження полів даних для вузла, що додається

element->next = (struct towary
)malloc(sizeof(struct towary)); // Виділення пам'ятіпід наступний вузол

element = element->next; // Створений вузол вказує на наступний
} while (poperedtow->price != 0 || poperedtow->mass != 0);
ostan = poperedtow; // Фіксуємо останній елемент
poperedtow->next = NULL; // Це останній вузол однозв'язного лінійного списку
}
void Vuvestu(void)
{
element = pershiy;
while (element != NULL) // Переглядаємо список, починаючи з першого елемента,поки не дійдемо до кінця списку
{
printf("Назва %s ціна %d вага %d залишок %d виробник %s\n", element->nazva,
element->price, element->mass, element->zal, element->manufacturer);

poperedtow = element;
element = element->next; // Перехід до наступного вузла
}
}
void Novuy(void)
{
//element = (struct towary)malloc(sizeof(struct towary)); // Виділення пам'яті під новий вузол
element=poperedtow;
//ostan = element;

do {
//element = poperedtow;
//poperedtow = element;
//element = element->next;
novii = (struct towary
)malloc(sizeof(struct towary));
printf("Введіть назву товару, ціну, вагу, залишок, виробника ");
scanf("%s %d %d %d %s", element->nazva, &element->price, &element->mass, &element->zal, &element->manufacturer); //Збереження полів даних для вузла, що додається

element->next = (struct towary*)malloc(sizeof(struct towary)); // Виділення пам'ятіпід наступний вузол

element = element->next;
}
while (poperedtow->price != 0 || poperedtow->mass != 0 );
ostan = poperedtow; // Фіксуємо останній елемент
poperedtow->next = NULL;
}
Аноним 22/04/21 Чтв 16:00:32 2004527381
>>2004524
Блядь, проебался, код не должен был быть под спойлером

using namespace std;
struct towary
{
char nazva[15], manufacturer[100] ;
int price, zal;
long int mass;
struct towary next; // посилання на наступний вузол
};
struct towary
poperedtow, element, pershiy, novii, ostan;
void Stvorutu(void); // Функція створення списку
void Vuvestu(void); // Функція виведення елементів списку
void Novuy(void); // Функція створення нового елемента та внесення його на початоксписку

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

printf("Створюємо список який містить інформацію про товари (назва, ціна, вага, залишок,виробник). \n");
printf("Для закінчення введення списку ввести нулі у всі поля \n");
Stvorutu();
printf("Створений список \n");
//Vuvestu();
printf("Додаємо в кінець списку новий елемент \n");


Novuy();
element = ostan;
novii->next = element;
ostan = novii; // Додаємо новий елемент до початку списку
printf("Оновлений список: \n");
Vuvestu();
return 0;
}

void Stvorutu(void)
{
element = (struct towary)malloc(sizeof(struct towary)); // Виділення пам'яті під новий вузол
pershiy = element;
do
{
poperedtow = element; // Попередній вузол вказує на створюваний
printf("Введіть назву товару, ціну, вагу, залишок, виробника ");
scanf("%s %d %d %d %s", element->nazva, &element->price, &element->mass, &element->zal, &element->manufacturer); //Збереження полів даних для вузла, що додається

element->next = (struct towary
)malloc(sizeof(struct towary)); // Виділення пам'ятіпід наступний вузол

element = element->next; // Створений вузол вказує на наступний
} while (poperedtow->price != 0 || poperedtow->mass != 0);
ostan = poperedtow; // Фіксуємо останній елемент
poperedtow->next = NULL; // Це останній вузол однозв'язного лінійного списку
}
void Vuvestu(void)
{
element = pershiy;
while (element != NULL) // Переглядаємо список, починаючи з першого елемента,поки не дійдемо до кінця списку
{
printf("Назва %s ціна %d вага %d залишок %d виробник %s\n", element->nazva,
element->price, element->mass, element->zal, element->manufacturer);

poperedtow = element;
element = element->next; // Перехід до наступного вузла
}
}
void Novuy(void)
{
//element = (struct towary)malloc(sizeof(struct towary)); // Виділення пам'яті під новий вузол
element=poperedtow;
//ostan = element;

do {
//element = poperedtow;
//poperedtow = element;
//element = element->next;
novii = (struct towary
)malloc(sizeof(struct towary));
printf("Введіть назву товару, ціну, вагу, залишок, виробника ");
scanf("%s %d %d %d %s", element->nazva, &element->price, &element->mass, &element->zal, &element->manufacturer); //Збереження полів даних для вузла, що додається

element->next = (struct towary*)malloc(sizeof(struct towary)); // Виділення пам'ятіпід наступний вузол

element = element->next;
}
while (poperedtow->price != 0 || poperedtow->mass != 0 );
ostan = poperedtow; // Фіксуємо останній елемент
poperedtow->next = NULL;
}
Аноним 22/04/21 Чтв 16:14:12 2004542382
Аноним 22/04/21 Чтв 16:17:07 2004546383
>>2004501
Да-а, уже подсказали.
Аноним 22/04/21 Чтв 16:18:27 2004548384
>>2004542
Ты чё, сука, расист?
Аноним 22/04/21 Чтв 16:43:27 2004584385
Аноним 22/04/21 Чтв 19:18:34 2004786386
>>2004527
Якщо ти не знаєш про pastebin та вчишся на програміста - краще забирай документи з внз та іди працювати на завод.
Аноним 22/04/21 Чтв 20:20:31 2004871387
>>2004786
Байто-слесарем на байто-завод?
Аноним 23/04/21 Птн 02:42:22 2005133388
изображение.png 142Кб, 373x339
373x339
В чем космический эффект подобных переопределений? Я могу понять "typedef signed char byte", это как-то описывает суть переменной, но зачем добавлять флоты с префиксом.
Если я придумаю свою охуительную библиотечку MyFuckingLibrary, должен ли я описывать переопределить каждый базовый тип а-ля "typedef double MFLdouble"?
Аноним 23/04/21 Птн 08:05:39 2005207389
>>2005133
Чтобы резко внезапно менять тип во всем коде.
Аноним 23/04/21 Птн 10:16:52 2005242390
>>2005133
ГЛинт должен быть 2's complement и минимум 32 бита по спецификации. И так далее. В твом компиляторе си это совершенно случайно = int.
Аноним 23/04/21 Птн 10:52:44 2005284391
>>2005242
Во всех современных компиляторах есть int_least32_t. А для не 2 complement надо свою виртуальную машину писать и свой компилятор.
мимо
Аноним 23/04/21 Птн 10:57:44 2005292392
>>2005284
Расскажи это ребятам из SGI 90-х.
Аноним 23/04/21 Птн 17:49:56 2005958393
>>2004786
Я знаю про pastebin, но не могу понять конкретно эту тему, даже после выкуривания всей инфы, до какой смог дотянуться.
Аноним 23/04/21 Птн 21:29:59 2006204394
>>2005958
У дейтелов смотрел?
24/04/21 Суб 02:05:38 2006396395
>>2005958
Что там не понимать? Если lst->next == NULL, создаешь
lst->next = malloc(sizeof(list)), задаешь lst->next->next = NULL, lst->next->value = нужное тебе значение.
Если lst->next не NULL, делаешь lst = lst->next.
Только голову запомни, иначе весь список проебешь
Аноним 24/04/21 Суб 15:56:01 2006949396
Аноним 24/04/21 Суб 18:56:34 2007249397
Купил Прату на 1000 страниц, преисполняюсь в сознании
Аноним 24/04/21 Суб 22:40:32 2007492398
>>2007249
Есть смысл покупать справочник по сям в виде книги? Недавно купил несколько книг в твёрдой обложке, доволен как слон.
Аноним 25/04/21 Вск 18:06:07 2008224399
>>1958625 (OP)
В си нормальные регулярки есть?
Аноним 25/04/21 Вск 18:11:57 2008228400
Аноним 26/04/21 Пнд 01:03:11 2008729401
>>2008302
>FPGA своей архитектуры
Ето как?
Аноним 26/04/21 Пнд 11:19:23 2008953402
>>2008729
>Ето как?

через верилоги какие-нить

>>2008302
какая страсть к категоризации
Аноним 26/04/21 Пнд 12:06:47 2009022403
>>2008953
называется дохуя свободного времени
Аноним 27/04/21 Втр 11:14:17 2009945404
изображение.png 6Кб, 578x108
578x108
Время изобретать велосипеды.
Аноним 28/04/21 Срд 18:50:00 2011808405
test.png 5Кб, 240x222
240x222
19cl2x.jpg 13Кб, 353x352
353x352
Как называется подобная конструкция? Может почитаю и сам дойду.
Можно ли как-то передать в функцию, принимающую структурную переменную (foo_t), только одно поле структуры bar (ptr.str[0])?

Компилятор ругается на несовместимы тип указателя, когда пытаюсь подсунуть &ptr.str[0].
Аноним 28/04/21 Срд 20:44:34 2011945406
>>2009945
Блин, пока нету времени. Потом.
28/04/21 Срд 21:04:14 2011958407
>>2011808
Вангую, что функция принимает аргумент по значению void func(foo_t value), и тогда тебе не нужен &. Либо ты облажался где-то еще (например, ты хотел bar(ptr->str)).
Аноним 29/04/21 Чтв 04:13:23 2012280408
>>2011958
Нет, функция принимает именно указатель.

https://ideone.com/82O2Sw
Странно, но эмулятор не ругается.

Я же получаю то, что на пике. Забить на варнинг?
Аноним 29/04/21 Чтв 04:44:24 2012283409
еуые2.png 3Кб, 1244x21
1244x21
Аноним 29/04/21 Чтв 08:55:23 2012378410
>>2006396
А как грамотно выделить память под первый элемент? Что если у меня список из 1 элемента, и голова указывает на NULL?
Аноним 29/04/21 Чтв 09:11:18 2012386411
29/04/21 Чтв 10:57:03 2012497412
>>2012280
Вроде все ок. А на код именно в таком виде, как ты запостил на ideone, у тебя на машине ругается? Может быть, у тебя там дефайны какие-то локально или типы на самом деле чем-то отличаются.
Аноним 29/04/21 Чтв 16:23:10 2012848413
>>2012497
>А на код именно в таком виде, как ты запостил на ideone, у тебя на машине ругается?
Нет, не ругается.
Аноним 29/04/21 Чтв 16:40:07 2012869414
>>2012497
Короче, оставил оригинальную структуру, содержащую необходимые поля.
Свою копию структуры удалил, хотя какая хрен разница - поля совпадали с оригинальной структурой, только что она была по-другому названа.

typedef struct bar {
original_struct_t str[2]; // original_struct_t - имя оригинальной структуры
} bar_t;

original_struct_t oneFieldOnly;

Так ошибки нет. По идее, и оригинальная структура не будет затронута и у меня свои копии будут.

Ещё бы знать, в чём я объебался.
Аноним 29/04/21 Чтв 17:05:25 2012884415
>>2012869
>что она была по-другому названа
вот здесь
Аноним 29/04/21 Чтв 19:15:42 2013053416
Как работает pthread_join?

Из описания опенгруп: The pthread_join() function shall suspend execution of the calling thread until the target thread terminates

Что это вообще значит? Одновременно работают несколько потоков, зачем один должен ожидать другой? Ожидать где? Какой ещё вызывающий и целевой поток?
Аноним 29/04/21 Чтв 19:34:17 2013071417
>>2013053
Это значит что происходит системный вызов и вся магия происходит в ос.
Аноним 29/04/21 Чтв 19:37:18 2013076418
>>2013071
Ну должен же быть в этом какой-то смысл раз не только pthread_exit используют.
Аноним 29/04/21 Чтв 19:50:32 2013086419
>>2013076
Главный тред передал задачу в дочерний, и ждёт пока он ее исполнит после того как сам что то ещё поделал, что не понятно? Тредами управляет ос, главный только делает к ней запросы.
Аноним 29/04/21 Чтв 20:05:21 2013105420
>>2013086
Есть к примеру такие куски кода:

pthread_join(T1, NULL);
pthread_join(T2, NULL);
pthread_join(T3, NULL);
pthread_join(T4, NULL);

Все четыре треда дочерние по отношению к основному (созданному при запуске программы)? Если так то основной ожидает все 4 разом или они выполняются произвольно? Зачем ждёт?
Аноним 30/04/21 Птн 03:39:34 2013503421
>>2013105
Ответ четко написан в процитированной тобой документации.
Если ты до сих пор не понимаешь, возможны варианты:
1. Ты - дебил, иди работать дворником.
2. Ты не знаешь английского, иди учи английский сначала.
3. Ты пришел из говна вроде жабаскрипта, в котором отсутствует понятие порядка выполнения, ибо это говно основано на ивентах. Т.е. ты не представляешь как работает компьютер, как он выполняет код, т.е. как работают программы в принципе, но уже лезешь в треды. Просто сотри себе память о своем жабоговне и иди "в первый класс" начинать с элементарных обучающих языков учиться понимать сто такое "програм флоу" или как там это называется, короче последовательность, ветвления, переходы и т.п.. А ты лезешь в ядерную физику не понимая даже арифметики. Просто вали нахуй, учись с азов.
Аноним 30/04/21 Птн 10:50:13 2013656422
Аноним 30/04/21 Птн 20:21:57 2014325423
>>2013656
Чукча - не читатель, чукча - прошитых деревьев писатель.
Аноним 30/04/21 Птн 21:24:51 2014400424
Аноним 01/05/21 Суб 12:44:35 2014913425
>>2013656
> я прошитое дерево написал

ахахах, то есть мяу
02/05/21 Вск 16:36:29 2016482426
>>2013105
> Если так то основной ожидает все 4 разом или они выполняются произвольно? Зачем ждёт?
Ждет оно, чтобы удостовериться, что работа завершена, точно так же надо ждать потомка, если у тебя процессы, а не потоки. Потоки выполняются параллельно. Джойн ждет один поток, т.е., все твои вызовы выполняются последовательно - пока T1 не завершится, ждать T2 ты не будешь, и даже если T2 давно сдох, ты об этом не узнаешь, пока не закончишь ждать T1. Воркфлоу такой: ты сигналишь потоку, что ему пора на покой (используя другие примитивы синхронизации), потом ждешь, пока он приберется за собой и успешно умрет.

Твое недоумение понятно, в никсах апи по обыкновению кривой. Белые люди в винде сделали нормально: можно WaitForMultipleObjects, либо получая уведомления либо по мере завершения потоков (при чем не по порядку, а кто раньше помер - про того и скажут), либо ждать всех сразу до победы.
Аноним 02/05/21 Вск 16:46:59 2016502427
А в си есть популярные сторонние библиотеки с сложными структурами данных и алгоритмами?
Аноним 03/05/21 Пнд 21:25:07 2018004428
тест
Аноним 03/05/21 Пнд 21:50:36 2018033429
>>2016502
Ага, Линукс называется.
Аноним 03/05/21 Пнд 22:33:47 2018115430
>>2018033
>Ага, Линукс называется.
ебать остряк в чяти.
>>2016502
ну ващ куча. есть STB например (хэштаблицы, вектора, работа с картиночками и проч, ориентировано на геймдев), есть Glib (не путать с glibc). а так - гугли тупо под конкретный запрос.есть на все вкусы: с абстрактными типами данных на войд-звёздочка, типобезопасные с макромагией.
Аноним 03/05/21 Пнд 23:45:37 2018228431
>>2018115
Спасибо. Почему то, когда гуглил показалось, что на си принято руками велосипедить структуры. Это хоть отчасти так или просто верхние страницы Гугла забиты ответами преподов говновузов?
Аноним 04/05/21 Втр 01:18:50 2018315432
>>2018228

ну в половине случаев это ответы брейндед с++ прогеров, у которых абстрактные типы данных невозможны в чистом си, так как там нет шаблонов. в половине- микроконтроллерных байтоёбов, которые и впрямь часто велосипедят, но с умыслом: для лучшего ручного контроля за укладыванием всего в памяти. писатели прикладных прог на чистом Си - вымирающий вид.
Аноним 04/05/21 Втр 09:07:35 2018580433
>>2018228
Удобной для большинства таблицы или дерева не получается даже на уровне интерфейса. Например, в openbsd был достаточно универсальный хэш oah, но в нем нельзя было сделать проход по таблице с удалением, пришлось отфоркать и переделать.
Аноним 04/05/21 Втр 16:32:05 2019156434
>>1975426
Я сразу с регистров-дефайненых-в-cmsis начинал. Все равно придётся дрочить референс мануал. Да и там как раз названия этих всех регистров.

Нету желания дрочить рм/даташиты/аппноты/ерраты/другие пдф талмуды - не стоит связываться с МК.
Аноним 04/05/21 Втр 16:34:38 2019157435
>>2019156
> Нету желания дрочить рм/даташиты/аппноты/ерраты/другие пдф талмуды - не стоит связываться с МК.
Золотые слова.

связался с МК и пригорел от обилия даташитов
Аноним 05/05/21 Срд 10:28:26 2019967436
Обязательно ли кастить малок в нужный тип? Или так и присваивать?

Тут один пидорас говорил что нулевые указатели нужно кастить.
Аноним 05/05/21 Срд 10:29:24 2019970437
>>2018315
>у которых абстрактные типы данных невозможны в чистом си
ОРУ СУКА ОНИ ТАМ БЫЛИ ПРИДУМАНЫ
Аноним 05/05/21 Срд 10:30:46 2019975438
>>2018115
>Ага, Линукс называется.
>ебать остряк в чяти.
Он прав.
Аноним 05/05/21 Срд 10:33:24 2019980439
Посоветуйте тулзы для личинуса который только начал осваивать ADT?
Вот список который я собрал для себя: gdb, valgrind, cmake... Еще что изучать?
Аноним 05/05/21 Срд 11:11:44 2020071440
https://ideone.com/jpn6JG

Почему цикл срабатывает и выводит еще один пустой элемент, когда значение current == NULL? Какого хуя?
Аноним 05/05/21 Срд 11:56:49 2020112441
>>2020071
а нельзя if на switch переписать?
а потом current = head;
Аноним 05/05/21 Срд 12:29:56 2020165442
>>2020112
Тебе въебать может?
Аноним 05/05/21 Срд 12:45:57 2020194443
>>2020112
Ты про проверку sgets? Я не нашел способа получше условия проверять, я тупой. switch не сработает там.
Аноним 05/05/21 Срд 12:47:03 2020196444
>>2020071
> Почему цикл срабатывает и выводит еще один пустой элемент, когда значение current == NULL? Какого хуя?
Потому что вот здесь
> current = malloc(sizeof *current);
malloc() выдаёт какой-то указатель,
> prev->next = current;
этот указатель копируется в prev->next
> current = NULL;
А вот это затирает только в current, но при этом prev->next остаётся тем же самым, что тебе вернул malloc().

Вдобавок,
> free(current);
> current = current->next;
Тут неопределённое поведение, после free значение current->next не определено.
Аноним 05/05/21 Срд 13:02:47 2020220445
>>2020196
БЛЯ СПАСИБО!
> free(current);
> current = current->next;
>Тут неопределённое поведение, после free значение current->next не определено.
а разве current не получает память в статике и просто значение current каждый раз переписывается новым? Сам указатель же статический верно?
Почему это работает блять!?
Аноним 05/05/21 Срд 14:04:08 2020277446
>>2020220
Не за что

> а разве current не получает память в статике и просто значение current каждый раз переписывается новым? Сам указатель же статический верно?
current - да, действительно статический.
А вот current->next уже смотрит в кучу.

> Почему это работает блять!?
А работает это потому, что после того, как блок памяти удалён, операционная система может не перезаписать его нулями или каким-то мусором, а оставить таким, как есть, в первую очередь для увеличения быстродействия. Соответственно, при обращении current->next данные там до сих пор, вероятно, лежат. А могут и не лежать.
Почитай про так называемые висячие указатели - это про это.

Правильно должно быть что-то вроде этого:
> void \* to_free = current;
> current = current->next;
> free(to_free);
Аноним 05/05/21 Срд 14:13:07 2020292447
>>2020277
ДА ДА ТОЧНО СПАСИБО!

Я пропустил этот пункт у Праты.
Аноним 05/05/21 Срд 21:32:18 2020838448
>>2019967
Не нужно (нет предупреждения).
Кастить NULL нужно ТОЛЬКО при передаче в фции вида printf %p, бо там ждут void@, а не что попало.
Аноним 05/05/21 Срд 21:46:37 2020854449
>>2020165
но эти ифы не читабельны.
Аноним 06/05/21 Чтв 01:14:54 2021053450
>>2019967
> Обязательно ли кастить малок в нужный тип? Или так и присваивать?
Нет, не обязательно. Но лично я всегда делаю явный каст, потому что если вдруг тип изменится, если вдруг я где-то ошибусь или произойдёт ещё чего-нибудь волшебное, компилятор без явного каста проглотит всё без проблем, а с кастом уже выдаст предупреждение о несовместимых типах. Отлаживать подобные ошибки - одно "удовольствие".

А насчёт того, что тебе кто-то говорил, что нужно, дело вот в чём. В Си не нужно, а вот в плюсах таки нужно. Если собирать сишный код плюсовым компилятором, то предупреждения всё-таки полетят.
Аноним 06/05/21 Чтв 08:14:37 2021123451
>>2019975
бля, ну давай, расскажи, где в системной библиотеке линукса абстрактные деревья, хэштаблицы и прочие структуры данных для произвольных типов данных
Аноним 06/05/21 Чтв 08:20:43 2021125452
>>2021053

но ведь если тупо написать
loh = malloc (sizeof ж loh);
то ошибки не будет ни при каком изменении типа
Аноним 06/05/21 Чтв 09:21:45 2021149453
1523550276932.jpg 45Кб, 595x597
595x597
>>2021053
> Если собирать сишный код плюсовым компилятором
Зачем.
Аноним 06/05/21 Чтв 10:30:58 2021211454
>>2021149
А зачем сишный компилятор, убогий и без библиотек.
"Си" это не язык и не компилятор, а способ программировать на плюсах со стороны Си, а не плюсов.
>Си-тред = С++
>С++-тред = С++
Вот так, а софт с названием "Си" это бесполезный мусор, устаревший еще 30 лет назад.
Аноним 06/05/21 Чтв 11:28:41 2021278455
Аноним 06/05/21 Чтв 14:29:18 2021536456
>>2021125
> но ведь если тупо написать
> loh = malloc (sizeof ж loh);
Верно. Многие так и делают, насколько мне известно. Но лично я предпочитаю, чтобы у меня на всякий случай было как можно больше раз упомянут тип, чтобы я всегда имел перед глазами то, с чем я работаю. Да, это многословнее, но всё-таки.
> double ж t = (double ж) malloc(10 ж sizeof(double));
Таким образом я ловлю опечатки в духе
> double жж t = (double ж) malloc(10 ж sizeof(double));
В остальном же это больше вопрос стиля и привычки. Кто-то вообще оборачивает всё это в #define NEW(), в этом тоже есть свой смысл.

>>2021149
Понятия не имею, если честно.
Я просто рассказал, почему, возможно, кто-то говорил, что каст нужен: нужен, но только в плюсах.
Ну и да, всякие библиотеки могут быть написаны так, чтобы компилироваться и под Си, и под С++, вместо того, чтобы иметь отдельную версию под Си и под плюсы.
Аноним 06/05/21 Чтв 17:54:55 2021866457
>>2021536
> Ну и да, всякие библиотеки могут быть написаны так, чтобы компилироваться и под Си, и под С++, вместо того, чтобы иметь отдельную версию под Си и под плюсы.
Так не делают (попробуй написать нехелловорд и поймёшь). Просто вставляют extern "C" в заголовок.
Аноним 06/05/21 Чтв 18:05:47 2021888458
>>2021866
Соглашусь.
Юзал rocksdb. Их сишный апи - это функции которые дёргают внутри С++ классы и их методы. Но я в принципе и не против.
Аноним 06/05/21 Чтв 20:37:38 2022111459
>>2021866
> Так не делают (попробуй написать нехелловорд и поймёшь). Просто вставляют extern "C" в заголовок.
Ну, возможно, тут уж точно спорить не буду
Аноним 06/05/21 Чтв 20:48:44 2022116460
Подскажите, пожалуйста, есть структура типа в некой модульной программе:

struct mystruct_B
{
unsigned char DateStr[8];
unsigned char TimeStr[8];
unsigned short Lambda;
int X_sample;
int Y_sample;
int Z_sample;
}structb_t;

Должен ли я использовать extern int при условии что все переменные из данной структуры объявлены в другом модуле? И вообще что можно прочитать чтоб лучше понимать как работают указатели/ссылки в проектах с более чем одним .с файлом?
Аноним 06/05/21 Чтв 21:13:34 2022131461
>>2020071
>current == NULL
Нахуй так писать, кста? И вообще где и какой мудень советует использовать NULL?
Аноним 06/05/21 Чтв 22:22:36 2022205462
>>2022116
Что ты несешь? Поля структуры доступны только для переменных типа structb. В заголовке будет этот структ и extern structb s1, s2
Аноним 07/05/21 Птн 10:50:05 2022611463
>>2022131
Слушай я долбоеб что ты от меня хочешь? Я даже не знаю как проверить переменную, инициализирована ли она или нет, вот и на нул проверяю. Если объяснишь одной строчкой по ебалу то я буду благодарен. Но я и так прочитаю по поводу этой хуйни. Нужно будет почитать какие значения ставит Си при объявлений.
Аноним 07/05/21 Птн 16:47:54 2023115464
>>2022205
Переменные из структуры уже объявленны в заголовочном файле data.h, в моем заголовочном файле эти же переменные идут как extern, в связи с этим вопрос - должна ли структура состоять из extern int X_samole, или я слишком хитрожопый когда хочу запихнуть уже имеющиеся переменные и их значения в структуру?
Аноним 07/05/21 Птн 17:09:34 2023168465
Хочу дёргать свою программу разными способами через repl, есть guile, а можно делать это всё через питухон и чтобы также красиво? Чёт просто не хочу становиться лиспоёбом.
Аноним 07/05/21 Птн 17:16:06 2023175466
>>2022611
>инициализирована ли она или нет
Братиш, ты чё ёпта, если ты не инициализировал её, то она не инициализирована, тем более локальная переменная, не обязательно будет иметь значение равное 0.
Аноним 07/05/21 Птн 21:04:37 2023418467
>>2023115
> слишком хитрожопый когда хочу запихнуть уже имеющиеся переменные и их значения в структуру
Это.
Аноним 07/05/21 Птн 23:21:28 2023538468
>>2023418
А как мне быть тогда если я хочу собрать значения из нескольких переменных и записать их в один буфер?
07/05/21 Птн 23:23:38 2023542469
>>2023538
Используй оператор присваивания.
Аноним 08/05/21 Суб 01:13:46 2023646470
>>2023538
Чё за проблема, анон? Сформулируй нормально.
Аноним 08/05/21 Суб 01:26:49 2023658471
>>2023646
Есть модуль в заголовочном файле которого заданы переменные int X_sample, int Y_sample, int Z_sample, есть другой модуль в заголовке которого есть две переменные unsigned char. Во время выполнения программы в эти переменные пишутся данные, я хочу собрать эти данные в одну структуру и записать в 32-байтный буфер. Вопрос в том могу ли я объединить все вышеперечисленные переменные в одну структуру и они сразу же будут хранить актуальные значения или же мне нужно сначала определить структуру, в которой будет все что угодно кроме актуальных данных а потом передавать значения переменных?
Аноним 08/05/21 Суб 01:32:32 2023663472
>>2023658
Что такое модуль в заголовочном файле? Напоминаю, что ты в c-треде.
Аноним 08/05/21 Суб 01:40:23 2023668473
>>2023663
Программа состоит из нескольких .с файлов(хз как назвать модулем или подпрограммой) , у каждого из них свои заголовочные файлы .h вот я хочу получить данные из модулей или подпрограмм и записать их.
Аноним 08/05/21 Суб 01:51:02 2023673474
o1.jpeg 6Кб, 300x168
300x168
>>2023663
>Программа состоит из нескольких .с файлов
Linkage unit (вроде)
Зачем ты хочешь собрать их в одну структуру? Может тебе оно не надо?
Ты тип для записи в одно место хочешь прочитать из разных мест, а потом писануть их разок в другое место, затем ты их собрался куда-то в третье место записывать, но уже методом по-проще, как я понял. Зачем всё это? Звучит как хуйня.
Аноним 08/05/21 Суб 02:01:30 2023676475
>>2023673
> Зачем ты хочешь собрать их в одну структуру? Может тебе оно не надо?
Мне надо их записать на флэш память физическую, поэтому я хотел их собрать в один буфер, а из буфера в физическую память.
08/05/21 Суб 02:27:54 2023684476
>>2023668
> я хочу получить данные из модулей или подпрограмм и записать их
Так получи и запиши блять, зачем ты изобретаешь какую-то хуйню?

> Мне надо их записать на флэш память физическую, поэтому я хотел их собрать в один буфер
struct mystuct data = { .foo = some_var, .bar = some_other_var, .baz = some_getter(); }; // C11 initialization

struct mystuct data = { some_var, some_other_var, some_getter() }; // C89 initialization

struct mystuct data;
data.foo = some_var;
data.bar = some_other_var;
data.baz = some_getter(); // fine too

my_write(&data, sizeof(data));
Не надо никаких extern для структуры писать. Тебе эта структура нужна только чтобы записать, так сделай ее локальной переменной, и пусть она канет в небытие после записи.
Аноним 08/05/21 Суб 14:00:35 2024048477
Доброго времени суток, господа. Такой вопрос. А можно в Си сделать строковую константу из содержимого внешнего файла? Что-то вроде
char openglShaderSource[] = "
#include "shaderSourceFileName"
";
но конечно же не буквально так. А то неудобно шопиздец. Можно инлайнить и каждую строчку оборачивать в "...\n", а чтоб закрывающиеся кавычки шли под линеечку, приходится рекордить сложнейший макрос в виме. Можно в рантайме делать все это fopen, fseek, ftell, rewind, malloc, fread, fclose. Эскобар какой-то.
Аноним 08/05/21 Суб 14:02:34 2024052478
Аноним 08/05/21 Суб 15:12:55 2024134479
>>2024048
Шелловый скриптец, который генерит хедер, и мэйкфайл, который это дело запускает, когда небходимо.
>>2024052
Скатертью по жопе.
Аноним 08/05/21 Суб 16:21:56 2024244480
>>2024048
Попробуй вот так
> #define HEREDOC(...) #__VA_ARGS__

Ну и в коде
> const char text[] = HEREDOC(
> text "text";
> text text text;
> );

Это не то чтобы идеальный способ, но для твоих целей может подойти.
Аноним 08/05/21 Суб 21:31:19 2024721481
>>2024048
Напиши утилиту преобразования в сишный файл - так деды делали.
08/05/21 Суб 22:42:15 2024780482
>>2024721
Деды умеют собирать ресурсы в объектный файл через ld в линуксах и использовать штатную возможность (ресурсы, windres/rc) в винде. Нет никакого смысла преобразовывать внешний файл в текст с эскейпами и всей хуйней, чтобы потом сишный компилятор преобразовал его обратно в изначальный вид.
Аноним 08/05/21 Суб 22:52:22 2024807483
Спасибо, аноны. Я уже на плюсы перекатился. Там есть raw string literal.
Аноним 08/05/21 Суб 23:21:38 2024857484
Аноним 09/05/21 Вск 01:16:49 2024990485
Аноним 09/05/21 Вск 13:23:48 2025519486
Аноним 09/05/21 Вск 16:40:15 2025820487
Нужна помощь по С не за бесплатно
тг @hepacika
Аноним 09/05/21 Вск 22:26:41 2026156488
>>2025519
Ну, не чмо, а долбоёб. Ради какой-то мелкой хуйни, которую можно пережить, свалил в кресты, у тебя раньше была одна проблемлка, теперь есть проблемы, которые добавят кресты. Если это не долбоебизм, я тогда не знаю даже. Суть донёс, чмо.
09/05/21 Вск 22:42:41 2026174489
Аноним 09/05/21 Вск 22:49:16 2026177490
>>2026156
да для OpenGL кресты лучше
09/05/21 Вск 22:52:14 2026186491
>>2026177
чем? необходимостью постоянно писать :: перед функциями?
Аноним 09/05/21 Вск 22:54:42 2026190492
chmo.mp4 262Кб, 1280x720, 00:00:01
1280x720
>>2026156
Там ещё цимес в том, что если ему нужно вставить в код именно шейдер, т.е. он пишет, скорее всего, какую-то игрушку или чего-то в этом духе, ему всё равно почти наверняка придётся писать с нуля процедуру загрузки файла с диска целиком во время исполнения. Для подгрузки текстурок там каких-нибудь или ещё чего-нибудь в этом духе.
Аноним 09/05/21 Вск 23:32:19 2026214493
>>2026174
>std::embed("/etc/passwd")
Что мешает сделать #include "/etc/passwd"?
Аноним 10/05/21 Пнд 00:04:22 2026226494
>>2026190
Ладно, убедил нахуй. Возвращаюсь на Си.
Аноним 10/05/21 Пнд 00:05:09 2026228495
>>2026190
заодно можно будет играться с шейдерами без перевыполнения билда
10/05/21 Пнд 00:44:53 2026241496
>>2026214
Возможно, синтаксис /etc/passwd?
Аноним 10/05/21 Пнд 01:26:38 2026269497
Какого-то малодушного молодого пидораса наблюдаем в этом itt треде. Таким тут не место.
Аноним 10/05/21 Пнд 01:31:41 2026275498
>>2026156
>Ради какой-то мелкой хуйни, которую можно пережить
>ненужно
Ненужноиды - как плесень или черви, главный признак, что пациент скорее мертв, чем жив.
Аноним 11/05/21 Втр 12:36:28 2027455499
Вопрос.
Аноны, как думаете, вот такое вот писать допустимо?
> int a[] = { 1, a[0] + 1 };
gcc вроде как кушает это без проблем, правильно вычисляя a[1], но я спрашиваю больше с точки зрения соответствия стандарту и портируемости.
Аноним 11/05/21 Втр 13:26:30 2027490500
Аноним 11/05/21 Втр 14:17:21 2027538501
>>2
Аноним 11/05/21 Втр 14:59:42 2027575502
2w4zxr8jm5h51.jpg 24Кб, 640x360
640x360
>>2027490
О, большое спасибо, анончик, сотни нефти тебе.
Доставил быстро и решительно, всегда бы так.

и как я сам этот вопрос не нашёл
ПЕРЕКАТ Аноним 11/05/21 Втр 22:02:30 2027899503
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов