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

Ответить в тред Ответить в тред
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
Котаны, объясните, почему иногда функции пишут в хедерах?
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов