Этого треда уже нет.
Это копия, сохраненная 22 июня 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
C Propaganda.jpg1,9 Мб, 2000x2610
C Programming Language #68 /clang/ # OP 1958625 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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)
2 1958724
>>1958625 (OP)
Первыйнах
3 1958727
4 1958764
>>1958727
Segmentation fault (core dumped)
5 1958777
>>1958764
signal(SIGSEGV, sosatб_handler)
sage 6 1959597
Тред умер.
14524227295540.jpg15 Кб, 300x300
7 1959736
Подскажите по такому вопросу: мне надо вывести первые N символов из указателя на строку.

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

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

Что за херня? У меня уже крыша едет.
8 1959888
>>1959736
принтфэ("%.3s", истр);
диржи)))
9 1960227
>>1959888
Хуй во рту у себя подержи, чепуш.
10 1960250
>>1959736
Ты забыл двойной кавычкой закрыть, странно, что она у тебя в вебе скомпилировалась, скорее всего бракованный компилятор под компотом, попробуй накатить Linux, там вроде годные компиляторы под компотом
11 1960274
>>1960227
я трипл три мотрешки)), я нт чипушь)))
>>1960250
прыщики в место моего тонково хода >>1959888. да ты хорош))
12 1960296
>>1960274
Агент шишки-ёлочные-игрушки передаёт, что все в порядке, отставьте преждевременную мобилизацию эскадр

)))
13 1960360
>>1959888

>переменная N


прасти братиш, я обосрался. вот тебе как нужна порометризировать форматированый аутпут:

снпринтфэ(пук, "%%.%us", N);
принфэ(пук, истр);
snoop-dogg-facepalm.jpg165 Кб, 1000x667
14 1960369
Ок, я перекачусь с выкладкой в эмуляторе.
А то тут какая-то клоунада.
15 1960407
>>1960360
братиш, у меня с тваего пука сек фолт выпал, чё дилать а

сиг фолт (кор дампед)
16 1960456
>>1960407
ну ставь сайз вторым аргументом я ебу ващь, ты такой конч чо не можешь загуглить в консоле "ман снпринтфэ"?.
17 1964337
>>1960456
я гашиш не курю если чо
sage 18 1964606
Тред умер.
Все ушли в плюсач.
16133244495910.png507 Кб, 1230x813
19 1964998
Чики, программач, дублирую из ньюфаг-треда, может хоть тут ответят

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

Гуглить умею, не тупой, просто хочется послушать мнения и советов анонов, которые уже разрабатывают под железки
20 1965327
>>1964998
Нет
image.png19 Кб, 536x182
21 1965604
сап, это идентичная обработка сигнала?
sage 22 1965694
>>1964606
Нет не умер, просто на дваче мало кто уже сидит, а еще тут есть пидор который всех банит
23 1965844
>>1965604
Нет, в твоем случае будет вызвана функция hide_signal, даже если она будет состоять из одной инструкции выхода из процедуры. SIG_IGN это определенный константный адрес (например, 1), вызвав функцию signal с таким аргументом ось пометит сигнал как игнорируемый (если возможно) и не будет передавать управление никакому коду из пространства пользователя.
24 1965862
>>1965694
А куда все съебали?
25 1965875
>>1965862
Мелкоборды, конфочки.
26 1965894
как вам книга Стивена Праты "Язык программирования C. Лекции и упражнения"?
Планирую вкатится в си, до этого дел с программированием не имел....
Если Прата окажется говном - посоветуйте чтива по пуре си пожалуйста...
И еще, что можно будет прочитать после Праты?
27 1965899
>>1965894

>до этого дел с программированием не имел


Тогда лучше начни с видеуроков на тему c/c++/c# на ютубе, с полного нуля в прату не вкатишься.
28 1965922
>>1965899
бля, бля.
знакомый программист посоветовал именно Прату новичку..
Я уже прочитал первую и вторую главу и сделал упражнения(по второй, в первой там хуйня а не упражнение) меня пронесло чтоли? я теперь Довакин в мире программистов?
29 1965923
>>1965922
Ну, если доходит, то ок.
30 1965925
>>1965922
Хотя начиная с 9-10 главы уже будет посложнее.
31 1965929
>>1965925
только трусы не играют в хоккей, ёпта.
32 1965973
>>1965922
Дак и читай прату, единственный нормальный учебник, прочитаешь будешь хоть ориентироваться уверенно. А как Прату прочитаешь, советую не переходить к более углубленным учебникам, а хорошо попрактиковаться, сделай какую нибудь игры на файлов 10-15 с применением различных либ. И поверь, практика даёт такой ахуенеший буст скиллу, который никакие книги тебе не дадут, но про них тоже забывать не стоит.
33 1965975
>>1965929
ТрусЫ)))))))))
34 1966002
>>1965922
>>1965973
хуйню не несите
новичку лучше всего по Си читать справочник шилдта чтобы вкатится
а уже после него более сложные учебники если надо
35 1966013
>>1966002
Я бы этот справочник нихуя не понял на вкате. Да и упражнений там нет.
36 1966015
>>1965975
ыа трусы ыаааа )))))0)
37 1966018
>>1965973
понял, бля... практика звучит сейчас страшно(учитывая то что я прочитал всего 2 главы) в том плане что это будет трудно, но отступать не хочу и буду пробовать пока пальцы не отпадут

спасибо, анон
38 1966236
Мне в VS нужно поработать с отладчиком в дочернем процессе, который что-то принимает от родительского. Возможно ли это? Как? Научи меня.
39 1966335
>>1966236
Цепляешься отладчиком к нужному процессу. Профит. По крайней мере в gdb так можно, думаю и VS так должна уметь.
40 1966434
А вы знаете, что name mangling в вашем костыльном языке был бы не нужен, если бы компоновщики могли искать символ по имени и типу? Но поддержку типа в компоновщики никто не заложил, всем было наплевать на ваш смешной препроцессор к С. Только С нативно поддерживается в бинарных и объектных файлах (не считая префиксов _ в некоторых ущербных ABI). Вы понимаете, что это значит? Ваш язык не фундаментален, это нашлепка.
41 1966508
>>1966434
Чего? Хоть Си и ущербен, но придумывать какой-то костыльный нейм манглинг, учитывая типы это было бы суперплохо для такого приближённого к машинам языка как Си. В том-то и дело, что написал функцию на Си и можешь вызвать её из ассемблера и наоборот.
k44a01jnifge.jpg89 Кб, 720x628
42 1966512
>>1966508
Это паста про кресты.
43 1966573
>>1958625 (OP)
У меня вопрос - нужна ли математика для программирования на СИ?
И просьба - посоветуйте курсы на ютубе на русском желательно.
44 1966594
>>1966573
Да, нужна, матан, функан, линейная алгебра и дискретка - это минимум для условного джуна, дальше идёт теория типов и гомология, без них любой хардварщик и яйца выеденного не стоит. По курсам и по книгам ты этого никогда не осилишь, по первым потому что слишком мало инфы, по вторым не хватит усидчивости и практики. Так что для этого нужно идти в вуз на 5 лет, иначе дальше хелоу ворлд не продвинешься.
45 1966785
>>1966594
У меня есть учебник по гомоморфофобии, подойдёт? Я смогу по нему вкатиться в разработку на Си?
46 1966847
>>1966594

>иначе дальше хелоу ворлд не продвинешься


Толсто.
47 1966868
>>1966785
Надо проконсультироваться у гомоморфофобоведов.
48 1966939
>>1966335
А кнопочки то какие жать, чтобы "цепляться"?
49 1967051
Если ReadFile может читать только charы, то как считать intы?
50 1967167
>>1967051
чар это инт 1байт
51 1967390
>>1967051
(char @)&i
52 1967420
>>1966573
Тимофея Хирьянова на ютубе канал посмотри у него есть по си лекции.
53 1967561
>>1967167
А то и два.
image.png5 Кб, 750x80
54 1968133
Мне нужно вывести измененную строку если длинна больше 10. Правильно ли сделан вывод при условии если все остальное подсчитано верно. Нужно ли выводить \0 для формальности окончания строки?
55 1968134
>>1968133
Если что вывести нужно первый и последний элемет, а также длинну оставшихся элементов между ними.
56 1968161
>>1968133
Да, все правильно.
>>1966594
Чуть не подавился, благо что сразу понял, что ты имеешь ввиду.
>>1966512
Общение с пастой иногда полезно, помогает выявить неочевидные вещи в очевидных.
>>1966018
Не просто читай главы, записывай, стенография и т.д Там дается хороший бэкграунд по компьютерной науке, хоть и немного. В основном всё нужное покрывается по мере надобности. Я щас на 16 главе, сегодня 4 часа её читал. Уже пишу игрули и прочее, смотрю на другие языки как на игрушки.
Еще заметил, что на Си приятней писать, чем на любом другом языке, не понимаю почему, ведь этот язык сложнее.
57 1968172
>>1967390
Чего?
1612981013007.jpg33 Кб, 403x335
58 1968392
>>1968161

> пишу игрули и прочее

59 1968494
>>1966939
Какие-то. Берешь и цепляешься. Быстро и четко. Твердо и осторожно.
60 1968520
Подскажите нубу.

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

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

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

LCD_print("%d", 10);

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

Или можно как то вообще по другому реализовать мою задачу хуй знает.
61 1968534
>>1968520
void LCD_print(char *, ...)
62 1968548
>>1968534
Получится так что ле?:

void LCD_print(char , ...)
{
char buff[100];
sprintf(buff, char
, ...);
LCD_send(buff);
}
63 1968562
>>1968548
Не, сам вижу что хуйню какую то написал.
Анон выручай. Вижу что там указатель, но хуй знает как определить на что он указывает. С троеточиями вообще в первый раз сталкиваюсь.
64 1968616
>>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 и как он работает. Насколько я понимаю это возможность впихивать разные параметры вместо определения одного. Но хуй знает. Буду читать дальше.
В любом случае спасибо анон что намекнул где искать. Гугл на закрос "троеточие СИ" начал выдавать что то осмысленное из того что меня интересовало.
изображение.png12 Кб, 801x217
65 1968719
Поясните WTF is going on here.
Вроде я всё более менее понимаю в самом С, но когда дело доходит до указателей на функции и прочего пиздеца, или указателей на указатель (зачем это вообще существует), у меня немного не хватает знаний кажесят.
66 1968738
>>1968719
А еще какие-нибудь есть книги желательно на русском. Хоть я английски и знаю но читать на нём тяжко по Си программированию более продвинутому, именно стиль и приёмы, хорошие практики того как пилякать код на нём?
67 1968832
>>1968616

>Гугл на закрос "троеточие СИ"


Гугли Variadic functions

>vsprintf(buff, format, args);



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

А также, если на ARM пишешь, то можешь использовать _vsnprintf() когда тебе не нужно выводить вещественные числа. Сэкономишь дохуя места в памяти.
68 1968958
>>1968738
Ты Кернигана проходил в школе?
69 1968959
>>1968832

>vsprintf()


>gvsprintf()


>abcdefgsprintf()

70 1968962
>>1968392
Че ты смехуечки кидаешь, уебище?
71 1968966
>>1967051
Сам понял что спросил?
73 1968975
>>1966573

>нужна ли математика для программирования на СИ?


Обязательно.
74 1969384
>>1968958
Нет не прохожу.
Более менее в финтаксисе разобрался но одну вещь не понял.
Когдау нас есть указатель на данные это ещё более менее понятно, но когда у нас есть указательно на ФУНКЦИЮ я немного не понимаю, как и где в указателе на функцию указывается какие данные функция принимает и что возвращает, а также чем технически является тип void* и его свойства. Это в его книге есть?
75 1969385
Анон, помоги разобраться с анонимными каналами в винде, только ты сейчас можешь мне помочь.
В дочернем процессе scanf как будто падает в какой-то бесконечный цикл и на нём всё зависает, однако с ReadFile всё нормально, но ReadFile может считать только чары, а мне инты нужны. Если попытаться в scanf принять не число, то поведение как при обычном консольном вводе.
parent http://cpp.sh/2usoa
child http://cpp.sh/5calw
Помогите, я в отчаянии. Нужно сделать такое именно под виндо, линуксоиды идут лесом.
76 1969386
>>1968719
Указатель на функцию объявляется так же, как функция, только слева от имени указателя звезда и все это в скобках:
int main(int, char@@);
int (@ptr)(int, char@@) = main;
77 1969390
>>1969386
Да, это я уже понял. по сути такая функция может использоватьтся как переопределяемый интерфейс. просто не понятно КАК это работает и какие у этого метода свойства
78 1969405
>>1969390

> как


Просто ячейка памяти, где лежит адрес функции. Содержимое можно менять - получается как бы функция с произвольной реализацией.
79 1969414
>>1969405
Ну хорошо, а какие возможности у C с танцеванием вокруг этого, функции будут работать ТОЛЬКО если их сигнатуры (принимаемые параметры и возвращаемое значение) одинаковы или тут есть некоторая свобода?
80 1969440
>>1969414
Можешь засунуть туда адрес функции другого типа. Так иногда делают. Что будет происходить - смотри ассемблер. Например, указатель типа void (@)(), a ты засунул туда struct bigstruct f(). Она упадёт при вызове, т.к. большие структуры возвращаются через скрытый аргумент, но в нем будет мусор .
81 1969513
>>1968161

>Не просто читай главы, записывай, стенография и т.д Там дается хороший бэкграунд по компьютерной науке, хоть и немного. В основном всё нужное покрывается по мере надобности. Я щас на 16 главе, сегодня 4 часа её читал. Уже пишу игрули и прочее, смотрю на другие языки как на игрушки.


Еще заметил, что на Си приятней писать, чем на любом другом языке, не понимаю почему, ведь этот язык сложнее.
Не, ну я это делаю. Трудные темы(понятия) я конспектирую и гляжу на досуге
82 1969516
>>1969440
Хорошо пояснил, я всё понял, благодарствую
83 1969665
>>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/
84 1969667
>>1969665
Забыл про разметку, понятнооо
85 1969685
>>1969665
ОО кайф, я обожаю когда прямо так подробно хуячат текст, моментально в голове всё по полочкам раскладывается прямо ух бля. Прату почитаю раз ты говоришь что расписано детально. Еще раз благодарю за такое мощное пояснение
sage 86 1969725
Хорошо, что в нормальных языках у функций есть свой тип.
87 1969805
>>1969384
Ну ей богу.
Ты должен знать, что программа на C компилируется в машинный код, и исполняется именно в этом виде в реалиях архитектуры компьютера.
Т.е. в этих реалиях есть процессор(ы) со своей системой команд, регистрами. Есть память, есть другие внешние устройства с портами ввода-вывода.

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

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

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

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

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


Ты, сука, бред не говори, и не путай человека, коли не знаешь.
Указатели void
, это именно то, что я написал выше, и никак иначе. Он нихуя не указывает на какой угодно тип, а просто указывает неизвестно на что.
И как их использовать - решать тебе. Выделять там память динамически, хуически, или ещё как. Как хочешь, так и поступай.
Можешь взять void* у глобальной переменной, если хочется.
87 1969805
>>1969384
Ну ей богу.
Ты должен знать, что программа на C компилируется в машинный код, и исполняется именно в этом виде в реалиях архитектуры компьютера.
Т.е. в этих реалиях есть процессор(ы) со своей системой команд, регистрами. Есть память, есть другие внешние устройства с портами ввода-вывода.

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

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

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

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

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


Ты, сука, бред не говори, и не путай человека, коли не знаешь.
Указатели void
, это именно то, что я написал выше, и никак иначе. Он нихуя не указывает на какой угодно тип, а просто указывает неизвестно на что.
И как их использовать - решать тебе. Выделять там память динамически, хуически, или ещё как. Как хочешь, так и поступай.
Можешь взять void* у глобальной переменной, если хочется.
88 1969816
>>1969805
Ох сука, как же эта разметка заебала. Всё поехало из-за звёздочек.
89 1969819
>>1969805
Заебись пояснил, пасибо

>Можешь взять void* у глобальной переменной, если хочется.


А это что значит?
90 1969858
>>1969819
То и значит. Взяв указатель на void от глобальной переменной, ты, очевидно, получаешь в указателе адрес, где эта переменная лежит в памяти.
91 1969992
>>1969805

>Можешь взять void× у глобальной переменной, если хочется.


А можно создать указатель типа воид? Или имел ввиду взять адрес и привести к типу void×?
92 1970010
>>1969992
Это что, троллинг тупостью? Попробуй разобраться в этом вопросе самостоятельно.
93 1970104
>>1969805
Хуйню несёшь.
94 1970108
>>1970010
Да это ты по ходу флексишь тупостью, много воды спизданул и доволен.
95 1970112
>>1969805
Никогда не видел такого сложного пояснения простого концепта, еще и запутал ненужной информацией. Мда.
image.png192 Кб, 320x300
96 1970139
97 1970166
>>1969805

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


>Он нихуя не указывает на какой угодно тип, а просто указывает неизвестно на что.


Ну я не говорил такого. Читай внимательней, а еще я ссылки приложил для подробных пояснений, там это первым пунктом говорят.
98 1970168
>>1969805
А еще соглашусь с анонами выше, ты много лишнего написал.
sage 99 1970175
Чую траля.
image.png114 Кб, 340x340
sage 100 1970184
101 1970234
>>1970010

>пук


Маня, если тебе везде мерещаться тролли - мне тебя жаль. Складывается впечатление что ты реально контуженный , обиженный жизнью имбицил. Могу тебе и в глаза сказать, готов приехать послушать?)) Вся та хуйня тобою написанное это простое пиздабольство, рембо ты комнатный)) от того что ты много написал, жизнь твоя лучше не станет)) пиздеть не мешки ворочить, много вас таких по весне оттаяло)) Про таких как ты говорят: Мама не хотела, папа не старался) Вникай в моё послание тебе постарайся проанализировать и сделать выводы для себя)
102 1970320
Какую либу посоветуете для UI на линукс? GTK? Хочу написать какую нибудь прогу, стаж - нуб.
103 1970335
>>1969805
Это опять я.
Я не случайно заикнулся про гарвардскую архитектуру.
Сейчас вот порылся, навёл справки. У меня в закоулках памяти действительно что-то такое было.
Дело в том, что стандартом ISO C запрещено присвоение указателя на функцию указателю на void.
Это как раз связано с этой архитектурой.

Вот смотрите
https://stackoverflow.com/questions/36645660/why-cant-i-cast-a-function-pointer-to-void
104 1970336
>>1970108
О да! Сначала мне говорят "заебись пояснил", а теперь "много воды спизданул".
Коль читаешь по слогам, и ничего не понимаешь - нехуй на других проецировать.
105 1970358
>>1970336
Хуя у тебя проблемы с эго, ебачок.
106 1970359
>>1970335

>Это опять я.


Мы уже соскучились.
107 1970364
>>1970335
В вопросе чувак кастит указатель на функцию на простой нулевой указатель. Кому это надо бля? Причем тут архитектуры, мозгоеб?
108 1970373
>>1970336
тут несколько человек общаются с тобой, тот кто говорил что заебись пояяснил уже ушел
109 1970471
>>1969805
>>1969665
Два студента-долбоёба не могут найти консенсус в споре об элементарных вещах, в силу неутолимой потребности в самоутверждении
110 1970510
>>1970364
Уж точно не тебе. Тебе кроме бояры ничего не надо.
111 1970517
>>1970373
Неужели я это не понимаю? Мы тут сейчас просто выясняем кто кого перетроллит :)
112 1971913
>>1970471
Эээ я ни с кем не спорил просто помог чуваку понять эти элементарные вещи. Я хз что там за шизойд на меня напал.
113 1971915
Да и тем более тред умер раз уж таким шизикам тут дают ротан раскрывать для наливания мочи.
114 1972015
>>1970510
Иди выебываться в своём дворе шавка шизойдная
115 1972029
>>1971915
Налил тебе мочи на ротан, проеряй.
собеседование 116 1972085
Назовите все способы узнать длину файла в Posix.
sage 117 1972161
>>1972085
Звонишь в POSIX, спрашиваешь.
118 1972230
>>1972029
Маняпроекции ммм
119 1972476
>>1972085
Что за POSIX? Это компания по продаже магнитофонов?
120 1972564
>>1972085

>Назовите все способы узнать длину файла в Posix.


Это такие вопросы на собеседованиях дают?

Если б меня такое спросили про Windows, я бы сказал что в WinAPI есть различные системные вызовы. Среди них должен быть и тот, позволяющий узнать длину файла. Когда мне это понадобится в коде, я просто открываю документацию и выясняю этот вопрос.
Я posix не знаю и как там узнать длину файла в душе не ебу.
Может, команда ls позволяет вывести название файла и его размер. Однако она все равно должна вызывать какие-то соответствующие системные вызовы, к которым всё сводится.
Вообще, нахуй на зубок знать этот posix, эти API? Берёшь доки и читаешь.
817166.jpg44 Кб, 800x800
121 1972577
>>1972476
По продаже файлов, очевидно. Но вообще они стандартные, самые распространенные - под А4, т.е. размер 21 на 27 см.
122 1972629
>>1972015
Это ты про себя, да?
123 1972710
>>1972085
Ну, stat и open+lseek. Наверняка, ещё есть, нормальных больше не знаю.
124 1973163
Скопирую с asm треда, так как там пусто.

>Не знаю, туда ли я обращаюсь, но попробуем. Недавно увидел вебмку с демкой на спектруме и задался вопросом. Если ли тут аноны, которые пишут/писали демки? Можете гайдов подкинуть или других материалов. Просто для меня это темный лес.

125 1973167
Хочу попробовать посмотреть С. Перед этим хотелось бы узнать, актуален ли он в 2021? Для чего он сейчас используется? Легко ли будет найти, с подобными навыками, работу?
126 1973333
если мы объявляем переменную, то мы в стеке под неё тут же аллоцируем память?
127 1973334
Срочно нид хелп с пасалем. Сам фротендер подзалупный, другу срочно нужно 1 задание с табулированием фукции и средним арефмитическим. Его уже разок ебанули за копипаст, второй раз не прокатит скатать. Есть уже рабочий правильно код, его нужно переписать чтобы препод не доебался
БРАТЬЯ СЛОВЯНЕ ПОМОГИТЕ
128 1973349
>>1973333
Да, если она в функции и не статическая.
129 1973357
>>1973349
а если она extern? Кто нибудь пользуется этой хуйнёй?
130 1973412
>>1973357
Значит она глобальная и в другой единице трансляции.
131 1973551
Ананасы, никогдаине интересовался программированием для встраиваемых систем. С чего стоит начать? Никаких желкзок, правда, не исею
132 1973633
>>1973551
Стоит начать с тырпрайза, потом идти байтослесарем.
133 1973868
>>1973167

>работу


Нахуя? Пиши читы или ботов для игр.
134 1975013
>>1973163
Ищи на сайте олдгеймс, ещё в игромании вроде была статья лет 10 назад или раньше, и на хабре тоже.
135 1975014
>>1973163
Гугли демосцены. не демки.
136 1975426
>>1973551
Arduino? Arduino. Поиграться со светодиодиками, датчиками, придумать себе какой-нибудь проектик по управлению чем-то. Учиться только на практике, никаких блять книг на 1000 страниц. Там С++ хибару запилили над обычным AVR контроллером. Инфы в инете полно. Но держи в уме что это игрушка. Когда станет тесно, переходить к STM32 на бибилотеке HAL. Отладочные платы nucleo или bluepill. Там уже можно "Инсайдерское руководство по STM" почитывать, что бы понимать как работает ядро и не писать как пхпшник. Так же советую статьи istarik.
Ну а там уже можно и регистрами немного преисполниться, если оно тебе нафиг надо, на низкоуровневых либах типа LL (SPL скоро фсё, но деды на проде еще 100500 лет будут юзать).
137 1975430
Ну и ещё есть ESP что-то вроде SoC для различного сетевого кочегара данных на сервер и потом выводить это в браузере/приложении.
138 1975694
В чём принципиальная и функциональная разница между char и CHAR[/b при использовании windows.h?
139 1975696
>>1975694
char и CHAR
Самоисправил.
140 1975714
>>1975696
А зайти в исходник и посмотреть не судьба?

typedef char CHAR;

Никакой разницы
141 1975729
>>1975714

>зайти в исходник и посмотреть


Зачем, если я могу заставить это сделать тебя?
142 1975789
>>1973868
Двачую!
>>1973167
Он будет актуален еще как минимум вечность! (Есть RUST еще, на счёт него не в курсе, читал про возможности, интересно но не прикасался)
>>1975426
Ничего себе ты расписал, схороню хоть и мимокрок.
>>1975729
Лол
143 1975791
Как в этом треде относятся к макросам?
144 1975835
>>1969805

>Тип void же - это просто указатель (т.е. адрес в памяти), про который неизвестно на что же именно он указывает.


Тип void это не указатель и не адрес в памяти долбоеб. Это тип который не имеет памяти, или информации.

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


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

>Существуют архитектуры компьютеров


Они нахуй никому не нужны.

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


Можно не выделять.

>Он нихуя не указывает на какой угодно тип, а просто указывает неизвестно на что.


Приебался к терминологий хотя априори они не нужны для других целей. В общем долбоеб садись, тройка.
145 1976023
>>1975835
Хуета питушки, можно присваивать чо угодно в ваших маня-байтах, дебичи. Только вот прогрмма работает с данными, а не байтами, и по этому переводят всякие s_int u_int суммированием половины регистра
146 1976027
>>1975835
>>1976023
Два дебила - это сила.
147 1976032
>>1976027
ну короче было 129 битов записано(+1 бит = 1), тут мы поменяли указатель и потекла подлива ведь нужно мне теперь отгрузить не 129 дылдаков коней, а уже ?? хз короче
148 1976035
>>1976032

>129 битов


Таблетки, шиз.
149 1976039
>>1976035
пидерашка, опять путаешь нумерацию с позиционной записью?
150 1976041
>>1976035
Давай еще раскажи что нумерация(порядок) массивов у тебя с ноля начинается, а нет не начинается, индекс может, а вот нумерация врядли, может даже не быть нумерации, плак-плак. Вообщем обтекай, лох-пидр.
haloperidol-tab.jpg45 Кб, 500x333
151 1976059
>>1976039
>>1976041
Шиз, таблетки.
152 1976105
>>1976023

>прогрмма работает с данными, а не байтами

153 1976108
>>1976059
Боевые картиночки. Мда.
154 1976110
>>1976108
А таблетки все же прими, шизик, у тебя весеннее обострение.
155 1976112
>>1976105
Прикинь, 0xFF0011 вообще нехуя не значит вне контекста и то что ты ответишь на 2+2=Залупа никому не нужно
156 1976114
>>1976023
Ну как это противоречит моему утверждению про присваивание любого типа нулевому указателю?
(И вообще много хуйни с плюсов пришло, но это не значит что свойства энных такие же и в Си)
>>1976112
Ну для твоего контекста эта хуйня что-то будет значить 100% иначе нахуй тебе эта рандомная цифра? Байтоебля есть, вкурсах?
>>1976110
Ну извини что я тебя обидел словом шизик, шизик, хватит это проецировать на меня. Лечиться тебе надо, а не мне.
157 1976121
>>1976114
Пиздец ты тупой, шизик.
158 1976391
>>1976121
Иди нахуй малявка
159 1976405
>>1976391
Не пойду к тебе, сам там сиди.
160 1976420
>>1976405
На парад пойдем
161 1976826
Что происходит до начала работы препроцессора и как называется этот процесс? Какие этапы проходит программа в это время и что происходит в каждом их них?
sage 162 1976885
>>1976826
Нахуй путешествуй, чмоня, тут тебе не ответы мейл.сру
163 1977010
>>1976826
Ничего. Препроцессор первый. Он потому и PREпроцессор.
Но возможны нюансы с прекомпилированными хидерами, которую поддерживают некоторые компиляторы.

Где ты такой вопрос нашёл? Тащи препода сюда - сейчас мы ему объясним где он не прав.
164 1977908
Анонче, изучаю С, но идей для пет проектов, кроме как реализации криптографических алгоритмов нет вообще. Мб у кого-то будут какие-то идеи для зеленых? Или кто-то вспомнит, что он делал, когда он сам изучал этот язык? Благодарю заранее.
165 1977990
>>1977908
самое интересное для начала это сокеты и IPC
166 1977992
>>1977908
Попробуй BMP файл создать из кода.
Содержимое для начала рандомом, затем градиентом.
Задача простая, но наглядная. Заодно и кросспалтферменная - там хватит только open, write, close и чистый Си. Будет работать абсолютно на любой системе.
167 1978050
Подскажите, где-то стандартом описано, можно ли сразу уничтожать семафор после поста?

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

<thread2>
sem_post(&sem);
sem_destroy(&sem);
...
168 1978089
>>1978050
Подумай сам, что будет если семафор не в ожидании был, в thread, которому ты сигналишь, во время sem_post был занят какими-то делами. Потом он попадает на освобождённый семафор и в лучшем случае вернёт ошибку, а в худешем упадёт.
169 1978597
>>1977908
Когда я изучал этот язык, я ничего не делал. Если хочешь чего-то поделать, можешь, например, написать кодирование uint64_t, int64_t (со знаком) по протобаферовской схемке (https://developers.google.com/protocol-buffers/docs/encoding) в переменное число байтов, выше советуют сокеты, можешь написать клиент для dns по udp. Советую не лезть во всякие ipc, треды там всякие, когда чуть обрастёшь щетиной, отправляйся изучать, как работает комплюктер/ос.
170 1978969
Анон, если я пишу ПО для микроконтроллеров, но по факту работаю на заводе, я ИТ специалист или заводчанин?
171 1978973
>>1978969
Байтослесарь.
172 1978976
>>1978973
Ор, взял на вооружение :D
173 1979238
>>1977908
Хэш-таблицу и бинарный хип. Это нужно всегда.
174 1980461
>>1978597
Cделай программу которая будет принимать файлик как ввод и брать из него слова и заносить в другой файлик как отдельные в структуру из которой можно будет их брать. И при этом в файлик будет заноситься всё больше и больше структур с разных файлов.
В процессе пиши заголовочный файл и добавляй туда разные функции которые можно будет использовать в будущем для вывода данных с файлов. Постарайся использовать макросы для этого и функции и typedef декларации.
175 1980466
>>1977908
Cделай программу которая будет принимать файлик как ввод и брать из него слова и заносить в другой файлик как отдельные в структуру из которой можно будет их брать. И при этом в файлик будет заноситься всё больше и больше структур с разных файлов.
В процессе пиши заголовочный файл и добавляй туда разные функции которые можно будет использовать в будущем для вывода данных с файлов. Постарайся использовать макросы для этого и функции и typedef декларации.
176 1980530
>>1977010
Программа проходит 3 этапа перед предобработкой. Компилятор сначала берет заменяет все комментарии на пробел, а так же все \ и символы новой строки, а так-же приводит всё в порядок согласно кодировке. Позже начинается уже сама предобработка.
177 1980539
>>1976885
Это же форум мейл.сру с ответами
178 1980985
>>1980530
Какой компилятор? КТо тебе это рассказал?
179 1981048
Мне понадобилоь около 23 лет, чтобы понять чем отличается XImage от Pixmap в протоколе X11.
Точнее, 23 года между подходами.
А получилось так - грузил картинку из файла на стек и скармливал её в XCreateImage. А по выводу на экран видел странные артефакты в виде цветных точек внизу картинки. Тогда вставил между загрузкой картинки и выводом её на экран функцию, в которой создал локальный массив на несколько килобайт, и забил его 0x77. И при выводе картинки появилась серая полоса. Затем поэксперементировал с XCreatePixmap и, о чудо, артефакт не было.
И я весь счастливый и обрадованный завалился спать и всю ночь видел бредовые, но красочные сны.

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

Вот, хочу побаловаться с X11 на предмет "надрать задницу" gtk, Qt и иже с ними. Насчёт gtk особых проблем не вижу, она изначально кривая, а Qt может соснуть за счёт кроссплатформенности у кода, который на 101% заточен под X11. Не то, чтобы мне было очень интересно или какие-то перспективы, просто работа так заёбует, что неторопливо покопаться во внутренностях X11 сойдёт за отдых.
180 1981059
>>1980985
Иди погугли блять
181 1981086
>>1981048
Первый раз услышал эти слова, замер в благоговейном ужасе.
2021-03-30094820.jpg180 Кб, 816x663
182 1981088
>>1981059
ПОгуглил
183 1981163
>>1981086

https://tronche.com/gui/x/xlib/
Но это так, примитивный справочник для вкатывания.

Библия X11, например, вот тут - https://www.x.org/docs/X11/xlib.pdf
184 1982380
Работаю с бинарными файлами, написал функцию открытия файла с ловлей ошибок и функцию удаления структуры. Функция удаления структуры в процессе работы вызывает функцию открытия файла, в которой вводится имя файла. Собсна пытаюсь передать это имя файла массивом char как минимум в функцию удаления, ну или в main. но нихрена не выходит, это вообще возможно? Создавал массив в main передавал через аргумент в функцию удаления, а оттуда в функцию открытия, там изменял, но судя по всему адрес не доходит. Так же создавал массив в функции удаления и передавал в функцию открытия, та же херня. Напишите пример как это правильно сделать, а то уже башка кипит от этих указателей. Спасибо
185 1982398
>>1982380
Код покажи.
186 1982399
>>1982380
https://pastebin.com/Q6sLX8Gj
что-то вроде этого?
187 1982422
>>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 убрал, хотя вроде это ничего поменять не должно было, короче, не ебу, оно работает и я рад, хлть и не понимаю как
188 1982426
>>1982422
Господи, что ты делаешь?
Ты понимаешь что передавать массив в функцию это худшее, что можно придумать?
Срочно меняй

void func2(char Array[32])

на

void func2(char * Array)
189 1982751
>>1982426

>Ты понимаешь что передавать массив в функцию это худшее,



Почему? Энивей передается указатель.
challenge.png1,6 Мб, 3840x2160
190 1982759
сяч, почему бутлодер помечен фиолетовым цветом? ведь он же по сути

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

неужели это напорядок сложнее какого-нибудь сишного компилятора, или я что-то пропустил?
асло насколько заебисто будет пилить такое для нюфага?
есть ли вообще смысл это делать, когда гугл уже на нулевой спойлерит гайдами по сабжу? мб лучше будет просто откопать и почитать сурцы какого-нибудь граба или лило?
191 1982760
>>1982751
Такие вот у нас погромисты нынче.
192 1982764
>>1982760
>>1982760

>вот у нас погромисты нынче.



Я как то недавно с подобным сталкивался. Ради интереса даже смотрел асм-листинги, вроде там адрес передавался, а не копия в стэк. Но могу ошибаться, либо неправильный гцц.
193 1982789
>>1982764
Дико извиняюсь, был не прав, сейчас тоже листинги посмотрел, там при передаче массива в качестве аргумента, он на указатель распадается. Неплохая каша у меня в голове, тогда где массивы полностью копируются?
194 1982816
>>1982789

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


Опять же могу ошибаться, но структуры копируются со всеми полями.
195 1982819
>>1982816

>но структуры копируются со всеми полями.


Разумеется, если их передать явно, то есть f(struct s);
image.png79 Кб, 320x180
196 1982993
197 1983058
Очередные шавки делают то что должен делать компилятор, в прочем ничего нового
198 1983451
>>1982759
Сложно всё, где ты зависишь от спецификаций и того как кто-то другой что-то запилил.
Когда пилишь компилятор - весь код твой, тебе не нужно ебаться чтобы понять почему такая структура AST, или репрезентация данных.
А вот с бутлоадером надо. Плюсом ещё надо делать драйвера для фс. Уметь общаться с Ефи/биосом(это отдельный Легаси ад). На каком-то riscv/arm может и попроще, но там зачастую вообще целая цепочка из бутлоадеров используется для созданий нужной среды исполнения ядра ОС.
199 1983728
>>1983451

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



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

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



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

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



бтв портабельность может стать проблемой. изначально хотел писать под x86_64, а сейчас даже не знаю. алсо думаю отладить на старом иде-диске, вместо ВМ.
200 1983758
>>1983728

>


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



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


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

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



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


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

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



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


Однозначно.
Алсо, есть ещё несколько способов читать накопители, так что мужайся.

Пока не начнёшь писать - не поймёшь почему это задача выделенная фиолетовым.
201 1983821
>>1982759

>мб лучше будет просто откопать и почитать сурцы какого-нибудь граба или лило?


Можно, но зачем, если всё можно прочитать на osdev вики.
>>1983451

>бутлоадером


>драйвера для фс


>Уметь общаться с биосом


Запиздючился в первые 512 байтов, прочитал сектора через бивосо int13h:02, и не надо делать никакую fs.

Для ньюфага проще не ебатсо с загрузчиком, если это не сама цеаль, а ебануть мульбутовое ядро.
202 1983826
>>1983821

>мульбутовое


multiboot поправился.
203 1983827
Bamp
204 1983870
>>1983821
lilo или grub
205 1984381
Возможно ли имея указатель на функцию в структуре получать доступ к функции только исключительно через структуру?

Наглядно:

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 (где и происходит маллок на структуру), очевидно, не срабатывает.
206 1984386
>>1984381
Стерлись астериски.
207 1984412
>>1984381
Это не плюсовый тред, бро, ты jmp по не установленому адресу делаешь.
image.png18 Кб, 352x252
208 1984437
209 1984486
аноны, помогите, я щас с ума сойду. при отладке возникает ошибка Run-Time Check Failure #2 - Stack around the variable 'cv' was corrupted.https://pastebin.com/L52X6sbD
210 1984490
>>1984486
оно как я понимаю бывают при выходе за пределы массива, однако у меня вроде все норм с этим
211 1984499
>>1984486
Если это реальный отрывок кода, то в malloc пропущен struct.
image.png297 Кб, 1920x1080
212 1984502
>>1984499
по сути да. в каком смысле пропущен struct?
213 1984505
>>1984490
Там везде struct пропущен, ну тип надо проверять, чё там fread пишед. Это плюсовая параша похоже.
214 1984507
>>1984502
Везде где sizeof должно быть sizeof(struct vuz).
215 1984519
>>1984507
ничего не изменилось(
в файл все верно записано кста
216 1984552
>>1984486

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

И один маленький нюанс - заверни структуру в
#pragma pack(1)
хотя бы для теста.
Я допускаю что массив структур может занимать место, не равно sizeof множенное на количество.
217 1984553
>>1984519
Бля, а ты не внимательный.
ты в fread передаешь указатель на указатель. Нафига?
Всё, ошибка найдена. Исправляй первый параметр. Убирай & у первого параметра.
218 1984576
>>1958625 (OP)
Вот как живут программисты в России для контраста
https://2ch.hk/po/res/42674731.html (М)
sage 219 1984579
>>1984552

> Я допускаю что массив структур может занимать место, не равно sizeof множенное на количество.


Нет.
220 1984637
Поясните, как устроены userspace аллокаторы памяти. Какой смысл в сисколлах типа brk, если можно автоматически выделять страницу памяти в момент первой записи? Как аллокаторы борятся с фрагментацией? Можно ли вызвать много раз alloc так, чтобы максимально фрагментировать память? Какая структура данных применяется для отслеживания освободившегося места?
221 1984738
>>1984637

>Какой смысл в сисколлах типа brk, если можно автоматически выделять страницу памяти в момент первой записи?


1. можно освобождать память с конца хипа.
2. отлавливание обращений не туда.
3. brk задает нижнюю границу для автоматического роста стека.

>Как аллокаторы борятся с фрагментацией?


Если размер маленький, округляют его вверх (32,48,64...) и делят страницы на кусочки одного размера. При выделении кусков в несколько страниц никак не борются, только делают эффективную структуру для поиска свободного места.

>Можно ли вызвать много раз alloc так, чтобы максимально фрагментировать память?


Да. если потом вызвать free для каждого второго блока.

> Какая структура данных применяется для отслеживания освободившегося места?


Списки или битовые карты для кусочков внутри страниц, списки/деревья/хеши для свободных кусков в страницу и более.
222 1984758
>>1984738
А как треды живут каждый со своим стеком? По другому адресу выделяют новый стек или всё-таки переключают страницы?
223 1984781
>>1984758
Сейчас память под стеки мапится. Гугли MAP_GROWSDOWN, например. И хип также мапится, а brk считается устаревшим интерфейсом.
224 1984815
>>1984519

>lab3.exe

225 1984896
Похоже раст и питон используют стандартные аллокаторы из libc. И на этом по сути живёт FFI. Ну разве что питон запрещает PyObject выделять через сишные аллокаторы, а вот просто кусок памяти — пожалуйста.
image.png33 Кб, 1066x508
226 1985022
Буффер вывода на винде и линуксе разный? Я просто еще не смешарик. На винде без флаша выводит исполняемый файл текст "hello there", на линухе - нет.
227 1985033
>>1985022
Вероятно зависит от реализации терминала ещё. Линукс таки да, без явного флаша не выводит пока не наберётся целая строка.
228 1985065
>>1985033
Спасибо
229 1985073
>>1985022

>Буффер вывода на винде и линуксе разный?



man setvbuf

или

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setvbuf?view=msvc-160

Попробуй использовать - будет одинаковый.
230 1985362
>>1966002

>новичку лучше всего по Си читать справочник шилдта



http://www.iso-9899.info/wiki/Books

>Stuff that should be avoided


>Books written by Herb Schildt.

231 1985364
>>1969665

>Как у любой другой переменной, имя функции это её адрес



у тебя интовая переменная тоже равна своему указателю?
такое поведение ровно в двух случаях есть: функции мутируют в указатель на себя, массивы мутируют в указатели на первый элемент.
232 1985365
>>1969805

>И можно например указатель float перекастовать в int.



чё ты несёшь, вот чё ты несёшь. это UB
sage 233 1985370
>>1985365
Не, это ИД. И очень полезно ьывало.
234 1985418
>>1985370

лень искать ссылку на стандарт. но это нарушение strict aliasing. К байтам объекта можно обращаться только по эффективному типу либо по типу char/unsigned char. То есть кастовать (floatж) в (charж) можно, и читать потом, в (intж) - нельзя.
235 1985428
>>1985418
А если написать (int@)(char@)flt?
236 1985668
>>1985418
А что там по union'ам?
237 1986251
>>1985428

даа что хочешь можешь писать, пока там сидит флоат, нельзя к этим байтикам обращать по интовому указателю. если там был юнион - можешь записать. второй вариант - memcpy и memmove - они копируют вместе с бантиками эффективный тип, это в стандарте написано.
238 1986264
>>1986251
-fno-strict-aliasing
239 1986403
>>1985418

>нарушение strict aliasing


Проиграл. Вместо того, чтобы починить компилятор, который своими говняными оптимизациями ломаент код, они просто придумали запрещающее маня-правило. Чисто русский подход.
240 1986849
>>1986403
Брайан В. Керниган, Деннис М. Ритчи кто из этих достойных джентльменов русский?
изображение.png24 Кб, 713x445
241 1987008
>>1985418
ваще похую
242 1987023
>>1984738
Да где вы блять эту инфу берёте нахуй?
243 1987153
>>1987023
Исходники нескольких маллоков и т.п. Вот посмотри phk malloc.
244 1987412
>>1986849
Твоя мамка
245 1987581
>>1987153
Посмотреть то можно, а вот понять.
246 1987621
>>1987008

>ваще похую



ну ты тут показал, что тебе конкретная версия конкретного компилятора с конкретными флагами на конкретном сорце не провела по губам, имея такую возможность. писатели компиляторов стараются без особой нужды не проучивать васянов, но зачем создавать в коде место для потенциального рандомного бага?
sage 247 1988837
Тред умер. Я 10 лет пилю йоба легаси на этом самострельном языке. Сейчас вкатываться в Це (да и в ++Ц) даже как-то глупо.
248 1988866
Пока макаки вкатываются в жабу и душат питона, нормальные мужики пишут на Си и работают за 100к на заводиках
249 1988888
>>1988837

>Я 10 лет пилю йоба легаси на этом самострельном языке.


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

А когда ты пытаешься вытянуть компактность исполняемого кода в С++, то он внезапно сразу становится похож на Си - без библиотек шаблонов и с отключенными опциями компилятора исключениями.
Иначе исполняемый код растёт как на дрожжах.
250 1988902
>>1988888
От моего легаси требуется не компактность, а производительность и возможность навешивать плюшки до бесконечности. И вот тут бы с самого начала писать с шаблонами и даже классами. Хз как с производительностью, но мне почему-то кажется, это могло бы уменьшить попоболь и вносимые ошибки.
251 1988906
>>1988888
В смысле нет конкурентов? А zig? А rust без стдлибы?
252 1988916
>>1988906

>А zig? А rust


Какие страшные слова. Ну зачем мне эти языки, если я пишу на Си и Си с плюсами? И на них я могу сделать всё. Почти всё.

>>1988902

> а производительность и возможность навешивать плюшки до бесконечности.


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

Например, я обожаю ассоциативный массивы, просто оргазмирую от этой структуры данных, при этом даже на плюсах иногда отказываюсь от использования std::map и фигачу свою специализированную реализацию хеш-таблиц, заточенных под конкретную задачу.
253 1988919
>>1988916
Удивительно как сишники/плюсовики в упор не понимают проблем своего языка. Конечно, это дорого переучиваться, и зачастую незачем, но в такое отрицалово реальности уходить можно разве что из-за непомерного количества времени которое ушло на изучение плюсов. Типа никому не признаюсь что купил говно, уж очень оно дорогое было.
254 1988926
>>1988919

>в упор не понимают проблем своего языка


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

А некоторые приёмы вообще рассказывать не хочется, потому как в чистом виде know how, что позволяет иметь конкурентное преимущество.
255 1988935
>>1988926
При этом zig и rust для тебя страшные слова. Удивительно.
256 1988941
>>1988935
Это из анекдота, зумерок.
sage 257 1989013
>>1988941
Токсичный дед. Ну понятно.
258 1989029
>>1988906
Есть еще божественная Дишечка с ее BetterC.
259 1989169
бамп
260 1989546
Кто-нибудь пробовал для прикола программировать на B lang? ИТТ ведь много энтузиастов, вряд ли у вас всех голвый Си на работе.
261 1989551
>>1975729
согласен
262 1989665
Как же надоело проверять возвращаемые значения...
1442768901168233999.webm619 Кб, webm,
314x176, 0:05
263 1989704
Чому не работает?
https://onlinegdb.com/rkHtHEnrd
264 1989714
>>1989665
setjmp/longjmp
265 1989716
>>1989704
Вот тут говно какое-то.

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

Перепиши.
14280770828420.png67 Кб, 308x300
266 1989731
>>1989716
Нет там никакого говна.
Попытался сделать выбор массива, куда надо писать, путём добавления ещё одного аргумента в макрос и функцию.
И, видимо, где-то обосрался.

Когда убираю аргумент и делаю массив фиксированным - всё работает как надо.
267 1989735
>>1989731
Я тебе сказал что делать. Выбор за тобой - ебись дальше или перепиши нормально.
268 1989767
>>1989735
Ну рас ты скозал...
Хоть объясни что не так. Что там, блядь, криминального?
269 1989770
trr
270 1989804
>>1989731
Прочитай выражение которое написал. Оно реально не самое очевидное. От такого в коде лучше избавляться.
271 1989806
>>1989804
Понятно.
1491591316197654544.jpg25 Кб, 480x293
272 1989816
>>1989804
И как бы мне это помогло, просто интересно?
Ну вот переписал я. Но в целом это не поможет...

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

https://onlinegdb.com/SkvVhB2Hd
273 1989836
>>1989704

>countof(buf)


>(sizeof(array) / sizeof(array[0]))


Ты в функцию передал уже не массив, а только указатель.
274 1989839
>>1989816
Это намек что ты пишешь трудночитаемое говно. Если левый созерцатель не смог понять что у тебя происходит - вряд ли и ты понимаешь что пишешь. Один это выразил негодованием и требованием переписать строчку, второй предупредил что строка мутная. Оба просто не захотели в нечитаемом говне колупаться.
Но вообще у тебя ошибка из-за использования макроса так то, а остальной код - ну его можно просто заменить на 2 строчки - вызов vsnprintf и прибавление к nb количества символов.
275 1989844
>>1989767
multiple unsequenced modifications
276 1989850
>>1989836 >>1989816
Если захардкодить, то работает, но тебе надо менять логику, правильно выше пишут. Первым звоночком должно было стать, что у тебя 2 раза одно и то же условие проверяется.
14514848092970.jpg60 Кб, 900x900
277 1989859
>>1989839

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


Я, блядь, голову на отсечение даю - ты ещё трудночитаемого говна не видел!
И к кому мне, бладжад, бежать, если мне что-то не нравится?

>>1989850
>>1989836

>в функцию передал уже не массив, а только указатель


Это как-то можно пофиксить?
Подсчёт кол-ва чимволов просто и в других местах использую.
Пока засунул в епременную внутри функции...
278 1989866
>>1989859

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


> Я, блядь, голову на отсечение даю - ты ещё трудночитаемого говна не видел!


Вообще видел, ты его сюда притащил.

> И к кому мне, бладжад, бежать, если мне что-то не нравится?


fork & pull request
279 1989868
>>1989859

>И к кому мне, бладжад, бежать, если мне что-то не нравится?


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

>Это как-то можно пофиксить?


Захардкодить в дефайне или глобалке и везде использовать; передавать размер ещё одним аргументом; передавать структуру с массивом внутри, тогда весь массив будет копироваться; переходить на другой язык, где это делается автомагически; поменять логику программы.
280 1989879
>>1989859

>Это как-то можно пофиксить?


Ты студент? Отвечай! А? М?
281 1989893
>>1989866

>Вообще видел, ты его сюда притащил.


Смешно. Линус, залогинься. Тоже мне, единственный и неоспоримый нашёлся.
>>1989868

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


Ещё один. Шиза.

>>1989879
Вот только не надо. Ещё название ВУЗа попроси, чтобы на кафедру отписать.
Нет, не студент.
282 1989904
>>1989893

>Вы все шизики! Один я д'Артаньян стою красивый в белом пальто и знаю, как правильно! (только ошибку за меня найдите, а то мне тяжело)

283 1989920
Возможно я зря огрызаюсь, но не нападали бы - не пришлось бы писать подобную дичь.

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

>Смешно. Линус, залогинься. Тоже мне, единственный и неоспоримый нашёлся.


Знаешь, качественный код отбирают тонны глаз. А ты проверки парой глаз не прошел.

>Ещё один. Шиза.


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

>Вот только не надо. Ещё название ВУЗа попроси, чтобы на кафедру отписать.


Ну это многое бы объясняло. В основном студенты так оправдывают свое говно.
>>1989904
Выглядит реально так, лол.
>>1989920

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


Дураком себя выставил на самом деле. На критику и негатив реагировать не умеешь. За умного ты больше не сойдешь здесь.
285 1989974
>>1989964

>А ты проверки парой глаз не прошел.


>За умного ты больше не сойдешь здесь.


Какой ужас. Как же теперь дальше жить. Пожалуй, выйду покурить в окно.

Иди на хуй просто, лол.
286 1990003
>>1989974
Кого ты посылаешь, маня, посылалка не выросла, ты даже код писать не умеешь, лол.
289 1990396
>>1988919
Конечно, есть проблемы. Есть свои проблемы у всего. Но так ли они суперкритичны, чтобы уходить на что-то другое? И будут ли какие-то суперпреимущества, которые нивелируют новые проблемы? То-то же.
290 1990399
>>1989731
А ты голубой?
291 1990417
>>1990381
Круто как
292 1990428
>>1990396
Да я не призываю уходить. Преимущества есть, всё не на ровном месте выросло. Хотя бы в курсе дел быть стоит. А то получаются такие личности, которые искренне верят что существует только один язык, это на котором я пишу, и конкурентов у него нет, тоже только потому что я на нём пишу.
sshot-2021-04-08-20-22-44.png22 Кб, 541x508
293 1990483
>>1990381
Чуть переделал, спасибо.
294 1990848
>>1990483
Код говно, да и сам ты лох и чмо :)
295 1991112

>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 лет нельзя было запилить?
кун-с-бутлодером
297 1991332
>>1991112
Большинство стандартных вещей поддерживалось всеми более-менее одинаково. Уж на бутлоадер-то точно хватало. А сейчас UEFI уже, вообще не о чем думать.
298 1991338
>>1991116
yvDz8u7pIOru5CE=
299 1991344
>>1991338

>yvDz8u7pIOru5CE=


Я не уверен, но по-идее можно в таблицу ебануть нули на позицию '=', и тогда всё будет чики-пуки.
300 1991345
>>1991112
Зачем тебе бутлоадер?
301 1992062
>>1991116
Ly8gyu7k6PDu4uDt6OUgYmFzZTY0DQppbnQgYmFzZTY0X2VuYyhjaGFyICpvdXRwdXQsIGNoYXIgKmlucHV0LCBpbnQgc2l6ZV9pbnB1dCwgaW50ICp0ZW1wLCBpbnQgc3RyX2xlbikNCnsNCgljaGFyICpiNjQgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7DQoJY2hhciAqZmxhZyA9IChjaGFyICopIHRlbXA7DQoJY2hhciAqdCA9IChjaGFyICopIHRlbXAgKyAxOw0KCWNoYXIgKmRhdGEgPSAoY2hhciAqKSB0ZW1wICsgMjsNCgljaGFyICpkbGVuID0gKGNoYXIgKikgdGVtcCArIDM7DQoJaW50IG4gPSAwOw0KCQ0KCXN0cl9sZW4gPSBzdHJfbGVuIC8gNCAqIDQ7DQoJDQoJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplX2lucHV0OyBpKyspDQoJew0KCQlzd2l0Y2ggKCp0KQ0KCQl7DQoJCQljYXNlIDA6DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbaW5wdXRbaV0gPj4gMiAmIDYzXTsNCgkJCQkqZGF0YSA9IGlucHV0W2ldOw0KCQkJCSgqdCkrKzsNCgkJCQlpZiAoKmZsYWcgJiYgaSA9PSBzaXplX2lucHV0IC0gMSkNCgkJCQl7DQoJCQkJCW91dHB1dFtuKytdID0gYjY0WypkYXRhIDw8IDQgJiA0OF07DQoJCQkJCW91dHB1dFtuKytdID0gJz0nOw0KCQkJCQlvdXRwdXRbbisrXSA9ICc9JzsNCgkJCQkJb3V0cHV0W24rK10gPSAweDBEOw0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEE7DQoJCQkJCSp0ID0gMDsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDE6DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbKmRhdGEgPDwgNCAmIDQ4IHwgaW5wdXRbaV0gPj4gNCAmIDE1XTsNCgkJCQkqZGF0YSA9IGlucHV0W2ldOw0KCQkJCSgqdCkrKzsNCgkJCQlpZiAoKmZsYWcgJiYgaSA9PSBzaXplX2lucHV0IC0gMSkNCgkJCQl7DQoJCQkJCW91dHB1dFtuKytdID0gYjY0WypkYXRhIDw8IDIgJiA2MF07DQoJCQkJCW91dHB1dFtuKytdID0gJz0nOw0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEQ7DQoJCQkJCW91dHB1dFtuKytdID0gMHgwQTsNCgkJCQkJKnQgPSAwOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQlvdXRwdXRbbisrXSA9IGI2NFsqZGF0YSA8PCAyICYgNjAgfCBpbnB1dFtpXSA+PiA2ICYgM107DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbaW5wdXRbaV0gJiA2M107DQoJCQkJKnQgPSAwOw0KCQkJCWlmIChzdHJfbGVuICYmIChuICsgKmRsZW4pICUgKHN0cl9sZW4gKyAyKSA9PSBzdHJfbGVuIHx8ICpmbGFnICYmIGkgPT0gc2l6ZV9pbnB1dCAtIDEpDQoJCQkJew0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEQ7DQoJCQkJCW91dHB1dFtuKytdID0gMHgwQTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQoJDQoJaWYgKCpmbGFnKQ0KCQkqZGxlbiA9IDA7DQoJZWxzZQ0KCQkqZGxlbiA9IChuICsgKmRsZW4pICUgKHN0cl9sZW4gKyAyKTsNCgkNCglyZXR1cm4gbjsNCn0NCg0KLy8gxOXq7uTo8O7i4O3o5SBiYXNlNjQNCmludCBiYXNlNjRfZGVjKGNoYXIgKm91dHB1dCwgY2hhciAqaW5wdXQsIGludCBzaXplX2lucHV0LCBpbnQgKnRlbXApDQp7DQoJY2hhciAqdCA9IChjaGFyICopIHRlbXAgKyAxOw0KCWNoYXIgKmRhdGEgPSAoY2hhciAqKSB0ZW1wICsgMjsNCgljaGFyIGluZGV4Ow0KCWludCBuID0gMDsNCgkNCglmb3IgKGludCBpID0gMDsgaSA8IHNpemVfaW5wdXQ7IGkrKykNCgl7DQoJCWluZGV4ID0gaW5wdXRbaV07DQoJCWlmIChpbmRleCA+PSA2NSAmJiBpbmRleCA8PSA5MCkgLy8gQS1aDQoJCQlpbmRleCAtPSA2NTsNCgkJZWxzZSBpZiAoaW5kZXggPj0gOTcgJiYgaW5kZXggPD0gMTIyKSAvLyBhLXoNCgkJCWluZGV4IC09IDcxOw0KCQllbHNlIGlmIChpbmRleCA+PSA0OCAmJiBpbmRleCA8PSA1NykgLy8gMC05DQoJCQlpbmRleCArPSA0Ow0KCQllbHNlIGlmIChpbmRleCA9PSA0MykgLy8gKw0KCQkJaW5kZXggPSA2MjsNCgkJZWxzZSBpZiAoaW5kZXggPT0gNDcpIC8vIC8NCgkJCWluZGV4ID0gNjM7DQoJCWVsc2UgDQoJCQlpbmRleCA9IC0xOw0KCQkNCgkJaWYgKGluZGV4ID49IDApDQoJCXsNCgkJCXN3aXRjaCAoKnQpDQoJCQl7DQoJCQkJY2FzZSAwOg0KCQkJCQkqZGF0YSA9IGluZGV4IDw8IDI7DQoJCQkJCSgqdCkrKzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAxOg0KCQkJCQlvdXRwdXRbbisrXSA9ICpkYXRhIHwgaW5kZXggPj4gNDsNCgkJCQkJKmRhdGEgPSBpbmRleCA8PCA0Ow0KCQkJCQkoKnQpKys7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjoNCgkJCQkJb3V0cHV0W24rK10gPSAqZGF0YSB8IGluZGV4ID4+IDI7DQoJCQkJCSpkYXRhID0gaW5kZXggPDwgNjsNCgkJCQkJKCp0KSsrOw0KCQkJCQlicmVhazsNCgkJCQljYXNlIDM6DQoJCQkJCW91dHB1dFtuKytdID0gKmRhdGEgfCBpbmRleDsNCgkJCQkJKnQgPSAwOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkNCglyZXR1cm4gbjsNCn0=
301 1992062
>>1991116
Ly8gyu7k6PDu4uDt6OUgYmFzZTY0DQppbnQgYmFzZTY0X2VuYyhjaGFyICpvdXRwdXQsIGNoYXIgKmlucHV0LCBpbnQgc2l6ZV9pbnB1dCwgaW50ICp0ZW1wLCBpbnQgc3RyX2xlbikNCnsNCgljaGFyICpiNjQgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7DQoJY2hhciAqZmxhZyA9IChjaGFyICopIHRlbXA7DQoJY2hhciAqdCA9IChjaGFyICopIHRlbXAgKyAxOw0KCWNoYXIgKmRhdGEgPSAoY2hhciAqKSB0ZW1wICsgMjsNCgljaGFyICpkbGVuID0gKGNoYXIgKikgdGVtcCArIDM7DQoJaW50IG4gPSAwOw0KCQ0KCXN0cl9sZW4gPSBzdHJfbGVuIC8gNCAqIDQ7DQoJDQoJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplX2lucHV0OyBpKyspDQoJew0KCQlzd2l0Y2ggKCp0KQ0KCQl7DQoJCQljYXNlIDA6DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbaW5wdXRbaV0gPj4gMiAmIDYzXTsNCgkJCQkqZGF0YSA9IGlucHV0W2ldOw0KCQkJCSgqdCkrKzsNCgkJCQlpZiAoKmZsYWcgJiYgaSA9PSBzaXplX2lucHV0IC0gMSkNCgkJCQl7DQoJCQkJCW91dHB1dFtuKytdID0gYjY0WypkYXRhIDw8IDQgJiA0OF07DQoJCQkJCW91dHB1dFtuKytdID0gJz0nOw0KCQkJCQlvdXRwdXRbbisrXSA9ICc9JzsNCgkJCQkJb3V0cHV0W24rK10gPSAweDBEOw0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEE7DQoJCQkJCSp0ID0gMDsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDE6DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbKmRhdGEgPDwgNCAmIDQ4IHwgaW5wdXRbaV0gPj4gNCAmIDE1XTsNCgkJCQkqZGF0YSA9IGlucHV0W2ldOw0KCQkJCSgqdCkrKzsNCgkJCQlpZiAoKmZsYWcgJiYgaSA9PSBzaXplX2lucHV0IC0gMSkNCgkJCQl7DQoJCQkJCW91dHB1dFtuKytdID0gYjY0WypkYXRhIDw8IDIgJiA2MF07DQoJCQkJCW91dHB1dFtuKytdID0gJz0nOw0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEQ7DQoJCQkJCW91dHB1dFtuKytdID0gMHgwQTsNCgkJCQkJKnQgPSAwOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQlvdXRwdXRbbisrXSA9IGI2NFsqZGF0YSA8PCAyICYgNjAgfCBpbnB1dFtpXSA+PiA2ICYgM107DQoJCQkJb3V0cHV0W24rK10gPSBiNjRbaW5wdXRbaV0gJiA2M107DQoJCQkJKnQgPSAwOw0KCQkJCWlmIChzdHJfbGVuICYmIChuICsgKmRsZW4pICUgKHN0cl9sZW4gKyAyKSA9PSBzdHJfbGVuIHx8ICpmbGFnICYmIGkgPT0gc2l6ZV9pbnB1dCAtIDEpDQoJCQkJew0KCQkJCQlvdXRwdXRbbisrXSA9IDB4MEQ7DQoJCQkJCW91dHB1dFtuKytdID0gMHgwQTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQoJDQoJaWYgKCpmbGFnKQ0KCQkqZGxlbiA9IDA7DQoJZWxzZQ0KCQkqZGxlbiA9IChuICsgKmRsZW4pICUgKHN0cl9sZW4gKyAyKTsNCgkNCglyZXR1cm4gbjsNCn0NCg0KLy8gxOXq7uTo8O7i4O3o5SBiYXNlNjQNCmludCBiYXNlNjRfZGVjKGNoYXIgKm91dHB1dCwgY2hhciAqaW5wdXQsIGludCBzaXplX2lucHV0LCBpbnQgKnRlbXApDQp7DQoJY2hhciAqdCA9IChjaGFyICopIHRlbXAgKyAxOw0KCWNoYXIgKmRhdGEgPSAoY2hhciAqKSB0ZW1wICsgMjsNCgljaGFyIGluZGV4Ow0KCWludCBuID0gMDsNCgkNCglmb3IgKGludCBpID0gMDsgaSA8IHNpemVfaW5wdXQ7IGkrKykNCgl7DQoJCWluZGV4ID0gaW5wdXRbaV07DQoJCWlmIChpbmRleCA+PSA2NSAmJiBpbmRleCA8PSA5MCkgLy8gQS1aDQoJCQlpbmRleCAtPSA2NTsNCgkJZWxzZSBpZiAoaW5kZXggPj0gOTcgJiYgaW5kZXggPD0gMTIyKSAvLyBhLXoNCgkJCWluZGV4IC09IDcxOw0KCQllbHNlIGlmIChpbmRleCA+PSA0OCAmJiBpbmRleCA8PSA1NykgLy8gMC05DQoJCQlpbmRleCArPSA0Ow0KCQllbHNlIGlmIChpbmRleCA9PSA0MykgLy8gKw0KCQkJaW5kZXggPSA2MjsNCgkJZWxzZSBpZiAoaW5kZXggPT0gNDcpIC8vIC8NCgkJCWluZGV4ID0gNjM7DQoJCWVsc2UgDQoJCQlpbmRleCA9IC0xOw0KCQkNCgkJaWYgKGluZGV4ID49IDApDQoJCXsNCgkJCXN3aXRjaCAoKnQpDQoJCQl7DQoJCQkJY2FzZSAwOg0KCQkJCQkqZGF0YSA9IGluZGV4IDw8IDI7DQoJCQkJCSgqdCkrKzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAxOg0KCQkJCQlvdXRwdXRbbisrXSA9ICpkYXRhIHwgaW5kZXggPj4gNDsNCgkJCQkJKmRhdGEgPSBpbmRleCA8PCA0Ow0KCQkJCQkoKnQpKys7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjoNCgkJCQkJb3V0cHV0W24rK10gPSAqZGF0YSB8IGluZGV4ID4+IDI7DQoJCQkJCSpkYXRhID0gaW5kZXggPDwgNjsNCgkJCQkJKCp0KSsrOw0KCQkJCQlicmVhazsNCgkJCQljYXNlIDM6DQoJCQkJCW91dHB1dFtuKytdID0gKmRhdGEgfCBpbmRleDsNCgkJCQkJKnQgPSAwOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkNCglyZXR1cm4gbjsNCn0=
302 1992170
>>1992062
Ты суть-то понял, зачем используется таблица, и почему подобный метод быстрее на современном железе?
303 1992234
>>1992170
Да - ты сразу получаешь нужный base64-индекс.
304 1992247
>>1992234
На поверхности. Cмысл в том, что ты экономишь на командах, и на современном железе за такой небольшой таблицей ты в память не ходишь.
305 1992329
>>1992247
То есть она вся располагается во внутренней памяти процессора?
306 1992340
>>1992329
Не дальше второго уровня.
307 1992442
>>1992329

256 байт - это 6 кэшлайнов в худшем случае, в плотном цикле они ваще не будут выходить из кэша первого уровня.
308 1992964
Есть ли смысл в постоянных деалокациях?
309 1993410
>>1992964
Если освобождаешь горячую память(в кэше). Или памяти мало(ембед).
310 1993799
>>1964998
Ты зарплаты сначала посмотри. Охуеешь.
311 1994148
>>1982789

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


В Си массивы никогда неявно не копируются.
Более того, объявления void f(int arr[32]), void f(int arr[]) и void f(int * arr) вообще абсолютно эквивалентны друг другу.

> Неплохая каша у меня в голове, тогда где массивы полностью копируются?


Целиком копируются лишь структуры со всеми их полями (но не массивы структур, тут правила те же).
А ещё std::vector<> и иже с ними из плюсов, а также классы со специальными конструкторами копирования оттуда же, но это уже не Си, понятное дело.
Скорее всего, именно с плюсовыми шаблонами из STL всё и перепуталось.
312 1994159
>>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() может быть полезным, но об него очень просто обрезаться. Настолько просто, что я бы не рекомендовал использовать его практически нигде, кроме тех случаев, когда работаешь с массивом, который только что локально объявил на стеке.
А без знания этих тонкостей языка его лучше вообще не трогать, как по мне.
313 1994161
>>1994159
*забыл обработать звёздочки как надо, ну да ладно, суть всё равно должна быть понятна
изображение.png29 Кб, 1315x403
314 1994296
Котаны, объясните, почему иногда функции пишут в хедерах?
315 1994309
>>1994159
Забей. Этому долбоебу не стоит помогать. Он на помощь огрызается.
316 1994310
>>1994296
Можно написать в хэдэре функцию, чтобы ее определение было в файлах, в которые ты подключил заголовочник. Плюсом к этому получаешь библиотеку, которая не имеет своих модулей компиляции. Сплошь удобство? Минусы есть - могут быть дубликаты функций в разных файлах, куда ты свой заголовочник подключал. Особенно если делал функции как static.
Причины можно придумывать дальше, да и недостатки подхода тоже. Как и во всем Си - надо знать что делаешь, и с какой целью, и тогда это оправдано.
317 1994312
>>1994296

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

с типобезопасностью понятно. в плане оптимальности, если рассматривать пример библиотеки векторных вычислений, компилятор сможет заинлайнить векторные функции, в то время как при стандартном подходе (заголовок + реализация в отдельном компилируемом модуле) компилятору придётся строго придерживаться ABI (по-простому - протокола передачи аргументов при вызове функции). компилятору придётся лишний раз копировать данные (частенько); так как функция теперь - чёрный ящик, он не сможет оптимизировать, используя о ней знание.
318 1994331
>>1994309
Спасибо, но я просто задал размер массива в дефайне, а затем объявляю массив с задефаненным размером. Пока всё нормально.

>>1994309

>Этому долбоебу не стоит помогать. Он на помощь огрызается.


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

Спасибо, ЧСВ-шное чмо, за твою "помощь". Ебал я таких помощников.
319 1994340
есть тут, кто llvm собирал с clang под windows? как долго происходил make-процесс? это пиздец, llvm собирался 4 часа, clang быстрее, но все равно долго (2ч где-то). что за хуйня? почему так нахуй, обэма? при чем cmake сам там все флаги оптимизации поставил -O3 на этапе конфигурации мейкфайла. на *unix так же долго все?
320 1994343

>тест


>тест
321 1994417
>>1994340
Кода много, железо слабое, собираешь в 1 поток. Причин достаточно
322 1994471
>>1994340
Плюсы
@
Несколько гигов исходников
@
Хуле так долга собирается

Пару лет назад нужно было собрать, ждал 8 часов.
pills-lemon.jpg31 Кб, 552x710
323 1994506
>>1994417

>C++


>кода много

324 1994539
>>1994506
Че то не нраветься?
325 1994571
единственный способ копирать из файла в файл только через буфер? и зачем нужен setbuf() и друзья?
326 1994578
>>1994571
Наверняка есть какой-нибудь системный вызов для копирования файлов, ну и обёртка над ним в стдлибе.

>man setbuf


>stream buffering operations


Фаел != стрим, чувак.
327 1994587
>>1994340
Помню, как пытался собрать эту залупу. Раз 5 где-то пересобирал. Самый лютый пиздец в том, что пока ты не соберешь успешно до условных 60-80%, ты не узнаешь какая хуйня решит наебнуться/отвалиться. В основном это из-за кривой конфигурации cmake, а официальная документация llvm-project оставляет желать лучшего. Короче, собирал где-то 3 дня все это. Правда не помню уже зачем и нахуя.
328 1995082
>>1994578

>Наверняка есть какой-нибудь системный вызов для копирования файлов,



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

>>man setbuf


>>stream buffering operations


>Фаел != стрим, чувак.



так отличие только в сикабельности, все стандартные потоки в прыщах есть char devices, т.е. тe же файлы.
329 1995212
>>1994331
Ну, так тоже сработает, конечно.
Мой вариант пригодится в случае, если код разрастётся и если вдруг когда-нибудь придётся использовать более чем один буфер с разными размерами.
Просто поосторожнее с countof() и sizeof(): они в этом аспекте очень опасны.
Вот.
snake.zip.png10 Кб, 408x430
330 1995602
Написал змейку на winapi. Пипец, первый раз пишу что-то сложнее хеловорда на винапи, это было трудновато, но интересно. Архив с программой в картинке.

Раскритикуйте говнокод пожалуйста:
https://pastebin.com/zWmKy6AY
331 1995666
>>1995602
1- нет комментариев
2- нет разделения между логикой игры и винтухлятиной
3- направление проще представлять в виде двух дельт, тогда уйдут свитчи
332 1995727
>>1995666

>разделения между логикой игры и винтухлятиной


Это как делается?
333 1995781
>>1995727
Тип короче ты всякие штуки, которые относятся чисто к сущности snake мутишь в wndproc, хотя их бы вынести в отдельные функции (возможно, даже в отдельный compile unit, если бы >>1995666 анон этого затребовал), думай об этом так, что если бы тебя попросили написать змейку для терминала (80×24), неплохо было бы использовать уже написанное. Неплохо бы написать комменты, описалово к функциям, ну и вообще.

Выше ньюфаг декодер для base64 делал, пиздуй декодер для utf8 писать, скидывай результат в тред, обсудим
334 1995783
Почему конпилятор ругается на (a > b) ? b = a : a = b, но не на аналогичную конструкцию с if/else? причём именно на второе присвоение, пишет что *а это не lvalue
2021-04-14 173227-Media viewer.jpg22 Кб, 1044x108
335 1995789
>>1995783
бля забыл что между звёздочками курсив, не сижу на ваших двачах просто
короче пикрил смотрите
336 1995800
>>1995789
Однажды Эрнест Хемингуэй поспорил что сможет написать строку, способную растрогать любого

Выражения дополнительно в скобки оберни.
337 1995832
>>1995800
Какова же разница между expression и conditional expression?
338 1996188
>>1995789
Приоритет тернарного ниже присвоения.
339 1996379
>>1959736
Тебе надо добавить перевод строки чтобы буфер сбрасывался
340 1996482
>>1995781

>декодер для utf8 писать


Нахуя, какой в этом толк?
341 1997297
>>1996188
То есть выше, но все всё поняли.
342 1997450
>>1958625 (OP)
Зачем нужен С, когда есть Rust?
343 1997458
>>1997450

>Rust


Не нужен
344 1997465
>>1997458
Заржавел?
345 1997471
>>1997465
Заголубел
346 1997601
Помогите с дочерними процессами.
Пишу свой обрезанный шелл. Проблема при вызове любой комманды с пайпом - к примеру ls | cat -e.
Поставленно все так, что для каждой отдельной команды определяется откуда и куда вводить\выводить вызывается fork в котором выполняется execve. Таким образом выходят паралельные дочерние процессы, в случае примера первая дочь будет execve(ls) а вторая execve(cat).
Проблема в том, что хоть как-то умирает после execve только первый процесс (уходит в зомби), все что после него продолжает жить, даже после вывода. То есть пример выведет все как надо, но вторая дочь (cat) будет продолжать работать. Что происходит и как это исправить?
347 1997608
>>1995082

> >Наверняка есть какой-нибудь системный вызов для копирования файлов,


> наврятли.


sendfile на Linux, fcopyfile на bsd/mac os
На винде думаю свое апи тоже есть
348 1997625
>>1997601
Код который ответственнен за обработку всего этого:
https://pastebin.com/Z1pf8uqn
sage 349 1997782
>>1997601

>дочерними процессами


Сажи безграмотному.
350 1997833
>>1997782

>Сажи безграмотному.


Чем тебе не нравитсч "дочерний"? Сыновний или детский звучит вырвиглазно.

Можно конечно использовать "порождённый" или "потомок", но такой термин точно не передаёт суть.
351 1997897
>>1997833

> Чем тебе не нравитсч "дочерний"?


Потому что процесс.

> Сыновний звучит вырвиглазно.


Кек.
352 1997898
>>1997782
Даже в мане говорится про дочерний, но давай, приведи свой охуенный вариант
man.png17 Кб, 785x152
353 1997902
>>1997898

>в мане


Кек

>свой


Сыновний (ТАДАМ!)
354 1997932
>>1997902

>открыл man на английском


Мы про английскую версию говорим что-ли?
https://www.opennet.ru/man.shtml?topic=fork&category=2

>Сыновний


Сычевний
355 1997939
>>1997897
Тебя не смущает что "седьмой час", это нифига не семь часов и сколько-то там минут.
Тебя не смущает что XX век это 1901-2000?
Тебя не смущает что при этом "девяностые" это 1990-1999?
Иди лучше там повоюй.
356 1997954
>>1997932

> Сссылается на перевод каких-то


> Alexey Mahotkin <atwblexmANUShLw3sysPUNCTUMmsdaekPUNCTUMr!uLu> 2000


> Виктор Вислобоков <corochVYEooneANUSperCq8mPUNCTUMr"tnu> 2003



>>1997939
Меня смущает ровно то, что существительное мужского рода называют дочерью.
357 1997968
>>1997954

>Alexey Mahotkin <alex8;@mANUShsy;GcsPUNCTUMm4U6skPUNCTUMrpaZu>


Я это имя ещё в FidoNet слышал. Яркий персонаж. Глыба. Старая школа.

>>1997954

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


Да и пофиг. Удобно.
358 1997981
>>1997897
Дочерний менструальный цикл тебя бы не смутил
359 1997992
>>1997981
Не, он имеет ввиду что процесс - дочь просесса. Как сын - дочь отца выходит
В твоём примере - Дочерний цикл = цикл у дочери
360 1998007
>>1997992
Перекатился в гейропку в IT
@
Постоянно слышишь, как о программисте в общем контексте говорят she
@
Проверяешь не отвалился ли у тебя член
361 1998024
>>1998007

>she


shemale же.
362 1998053
>>1997625
cat скорее всего будет ждать закрытия write конца, поэтому она будет заблокирована в системном вызове, ведь eof никогда не придёт
Судя по коду я не вижу возможным, что до execve(ls) дойдёт. Если посылалось cmd: [ls, pipe(1)], [cat, pipe(0)]: то будет, во-первых, race condition между родителем и потомком, во-вторых, fork с execve(cat) [child], и потом уже в зависимости, от результатов гонки waitpid, если выиграл родитель, то он заблочиться в waitpid, ежели нет будет возвращение из функции, и будет fork для ls, который тоже будет тупа либо зомбёй либо его рипнут через waitpid.
Добавлю, что ты ещё вообще не проверяешь результаты системных вызовов, плюсом надо бы проверить чё там по сигналам.
Короче хуёво написал, переделывай.
363 1998067
пишу свой красивый хуец на сисколлах, помогите с имплементацией тестикул.
364 2000088
Есть ли тут эмбед-господа с опытом дебага МК ARM Cortex-M4?

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

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

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

Или сажите, на каком форуме смогут помочь.
365 2000245
как задать варнинг-левел для гсс из консоли?
366 2000808
>>2000245
man gcc
367 2000941
>>2000088
Каким-то хером output_size (скриншот 2) увеличилось до 13618.
Хотя размер строки не превышает 2000 символов.

Как отловить почему произошло увеличение?
368 2001545
Подскажите почему EOF в виндовс если идет после других символов не читается, читается только с начала новой строки?
пример
123^Z
пробел^Z

не определяется как EOF.
369 2001595
>>2001545
Это везде так, EOF только с начала строки.
370 2002106
Какая же сишечка няшная
371 2002555
Как написать вирус шоб коспрески не нашол
372 2002614
>>2002555
Спрячь его корзину с грязными трусами.
373 2003468
Всё кекаете по подворотням?

А я снова в окопы...
14891298274230.jpg40 Кб, 500x480
374 2003660
>>2003468
Подскажите, плез, мне нужен этот коммит: https://github.com/DaveGamble/cJSON/pull/494

Как его применить самостоятельно к текущему релизу бибилиотеки, если он не одобрен разработчиками?
375 2003712
>>2003660
Зачем есть говно, когда есть Jansson.
376 2003733
Подскажите логгер нормальный
377 2004044
>>2003712
Затем, что Jansson - такое же говно и у cJSON больше упоминаний про embed. По крайней мере свежих.
378 2004501
>>2003660
Самый простой способ это склонировать бранч того человека который сделал пул реквест и собрать библиотеку с этого бранча.
379 2004512
>>2003733
man 3 syslog
380 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;
}
380 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;
}
381 2004527
>>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;
}
381 2004527
>>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;
}
382 2004542
>>2004527
Йди в iнший трiд.
383 2004546
>>2004501
Да-а, уже подсказали.
384 2004548
>>2004542
Ты чё, сука, расист?
385 2004584
>>2004542
Бля, ну не стукай
386 2004786
>>2004527
Якщо ти не знаєш про pastebin та вчишся на програміста - краще забирай документи з внз та іди працювати на завод.
387 2004871
>>2004786
Байто-слесарем на байто-завод?
изображение.png142 Кб, 373x339
388 2005133
В чем космический эффект подобных переопределений? Я могу понять "typedef signed char byte", это как-то описывает суть переменной, но зачем добавлять флоты с префиксом.
Если я придумаю свою охуительную библиотечку MyFuckingLibrary, должен ли я описывать переопределить каждый базовый тип а-ля "typedef double MFLdouble"?
389 2005207
>>2005133
Чтобы резко внезапно менять тип во всем коде.
390 2005242
>>2005133
ГЛинт должен быть 2's complement и минимум 32 бита по спецификации. И так далее. В твом компиляторе си это совершенно случайно = int.
391 2005284
>>2005242
Во всех современных компиляторах есть int_least32_t. А для не 2 complement надо свою виртуальную машину писать и свой компилятор.
мимо
392 2005292
>>2005284
Расскажи это ребятам из SGI 90-х.
393 2005958
>>2004786
Я знаю про pastebin, но не могу понять конкретно эту тему, даже после выкуривания всей инфы, до какой смог дотянуться.
394 2006204
>>2005958
У дейтелов смотрел?
sage 395 2006396
>>2005958
Что там не понимать? Если lst->next == NULL, создаешь
lst->next = malloc(sizeof(list)), задаешь lst->next->next = NULL, lst->next->value = нужное тебе значение.
Если lst->next не NULL, делаешь lst = lst->next.
Только голову запомни, иначе весь список проебешь
396 2006949
Введение в язык C кому интересно...
https://www.youtube.com/watch?v=7OXYO8Ncjm4&list=PLvb7ivodu7oQkuxXHqv_LjUWupqSkfQKM
397 2007249
Купил Прату на 1000 страниц, преисполняюсь в сознании
398 2007492
>>2007249
Есть смысл покупать справочник по сям в виде книги? Недавно купил несколько книг в твёрдой обложке, доволен как слон.
399 2008224
>>1958625 (OP)
В си нормальные регулярки есть?
400 2008228
>>2008224
Нашел
401 2008729
>>2008302

>FPGA своей архитектуры


Ето как?
402 2008953
>>2008729

>Ето как?



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

>>2008302
какая страсть к категоризации
403 2009022
>>2008953
называется дохуя свободного времени
изображение.png6 Кб, 578x108
404 2009945
Время изобретать велосипеды.
405 2011808
Как называется подобная конструкция? Может почитаю и сам дойду.
Можно ли как-то передать в функцию, принимающую структурную переменную (foo_t), только одно поле структуры bar (ptr.str[0])?

Компилятор ругается на несовместимы тип указателя, когда пытаюсь подсунуть &ptr.str[0].
406 2011945
>>2009945
Блин, пока нету времени. Потом.
sage 407 2011958
>>2011808
Вангую, что функция принимает аргумент по значению void func(foo_t value), и тогда тебе не нужен &. Либо ты облажался где-то еще (например, ты хотел bar(ptr->str)).
408 2012280
>>2011958
Нет, функция принимает именно указатель.

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

Я же получаю то, что на пике. Забить на варнинг?
еуые2.png3 Кб, 1244x21
409 2012283
410 2012378
>>2006396
А как грамотно выделить память под первый элемент? Что если у меня список из 1 элемента, и голова указывает на NULL?
411 2012386
>>2006949
https://youtube.com/playlist?list=PLRDzFCPr95fLjzcv6nNdjMu_9RcZgIM9U

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

у этого чела канал в целом годный, всем советую
sage 412 2012497
>>2012280
Вроде все ок. А на код именно в таком виде, как ты запостил на ideone, у тебя на машине ругается? Может быть, у тебя там дефайны какие-то локально или типы на самом деле чем-то отличаются.
413 2012848
>>2012497

>А на код именно в таком виде, как ты запостил на ideone, у тебя на машине ругается?


Нет, не ругается.
414 2012869
>>2012497
Короче, оставил оригинальную структуру, содержащую необходимые поля.
Свою копию структуры удалил, хотя какая хрен разница - поля совпадали с оригинальной структурой, только что она была по-другому названа.

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

original_struct_t oneFieldOnly;

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

Ещё бы знать, в чём я объебался.
415 2012884
>>2012869

>что она была по-другому названа


вот здесь
416 2013053
Как работает pthread_join?

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

Что это вообще значит? Одновременно работают несколько потоков, зачем один должен ожидать другой? Ожидать где? Какой ещё вызывающий и целевой поток?
417 2013071
>>2013053
Это значит что происходит системный вызов и вся магия происходит в ос.
418 2013076
>>2013071
Ну должен же быть в этом какой-то смысл раз не только pthread_exit используют.
419 2013086
>>2013076
Главный тред передал задачу в дочерний, и ждёт пока он ее исполнит после того как сам что то ещё поделал, что не понятно? Тредами управляет ос, главный только делает к ней запросы.
420 2013105
>>2013086
Есть к примеру такие куски кода:

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

Все четыре треда дочерние по отношению к основному (созданному при запуске программы)? Если так то основной ожидает все 4 разом или они выполняются произвольно? Зачем ждёт?
421 2013503
>>2013105
Ответ четко написан в процитированной тобой документации.
Если ты до сих пор не понимаешь, возможны варианты:
1. Ты - дебил, иди работать дворником.
2. Ты не знаешь английского, иди учи английский сначала.
3. Ты пришел из говна вроде жабаскрипта, в котором отсутствует понятие порядка выполнения, ибо это говно основано на ивентах. Т.е. ты не представляешь как работает компьютер, как он выполняет код, т.е. как работают программы в принципе, но уже лезешь в треды. Просто сотри себе память о своем жабоговне и иди "в первый класс" начинать с элементарных обучающих языков учиться понимать сто такое "програм флоу" или как там это называется, короче последовательность, ветвления, переходы и т.п.. А ты лезешь в ядерную физику не понимая даже арифметики. Просто вали нахуй, учись с азов.
422 2013656
>>2013503
Кусок дерьма, я прошитое дерево написал. А вот что тебе пожалуй неизвестно: https://ru.wikipedia.org/wiki/Проклятие_знания
423 2014325
>>2013656
Чукча - не читатель, чукча - прошитых деревьев писатель.
424 2014400
425 2014913
>>2013656

> я прошитое дерево написал



ахахах, то есть мяу
sage 426 2016482
>>2013105

> Если так то основной ожидает все 4 разом или они выполняются произвольно? Зачем ждёт?


Ждет оно, чтобы удостовериться, что работа завершена, точно так же надо ждать потомка, если у тебя процессы, а не потоки. Потоки выполняются параллельно. Джойн ждет один поток, т.е., все твои вызовы выполняются последовательно - пока T1 не завершится, ждать T2 ты не будешь, и даже если T2 давно сдох, ты об этом не узнаешь, пока не закончишь ждать T1. Воркфлоу такой: ты сигналишь потоку, что ему пора на покой (используя другие примитивы синхронизации), потом ждешь, пока он приберется за собой и успешно умрет.

Твое недоумение понятно, в никсах апи по обыкновению кривой. Белые люди в винде сделали нормально: можно WaitForMultipleObjects, либо получая уведомления либо по мере завершения потоков (при чем не по порядку, а кто раньше помер - про того и скажут), либо ждать всех сразу до победы.
427 2016502
А в си есть популярные сторонние библиотеки с сложными структурами данных и алгоритмами?
428 2018004
тест
429 2018033
>>2016502
Ага, Линукс называется.
430 2018115
>>2018033

>Ага, Линукс называется.


ебать остряк в чяти.
>>2016502
ну ващ куча. есть STB например (хэштаблицы, вектора, работа с картиночками и проч, ориентировано на геймдев), есть Glib (не путать с glibc). а так - гугли тупо под конкретный запрос.есть на все вкусы: с абстрактными типами данных на войд-звёздочка, типобезопасные с макромагией.
431 2018228
>>2018115
Спасибо. Почему то, когда гуглил показалось, что на си принято руками велосипедить структуры. Это хоть отчасти так или просто верхние страницы Гугла забиты ответами преподов говновузов?
432 2018315
>>2018228

ну в половине случаев это ответы брейндед с++ прогеров, у которых абстрактные типы данных невозможны в чистом си, так как там нет шаблонов. в половине- микроконтроллерных байтоёбов, которые и впрямь часто велосипедят, но с умыслом: для лучшего ручного контроля за укладыванием всего в памяти. писатели прикладных прог на чистом Си - вымирающий вид.
433 2018580
>>2018228
Удобной для большинства таблицы или дерева не получается даже на уровне интерфейса. Например, в openbsd был достаточно универсальный хэш oah, но в нем нельзя было сделать проход по таблице с удалением, пришлось отфоркать и переделать.
434 2019156
>>1975426
Я сразу с регистров-дефайненых-в-cmsis начинал. Все равно придётся дрочить референс мануал. Да и там как раз названия этих всех регистров.

Нету желания дрочить рм/даташиты/аппноты/ерраты/другие пдф талмуды - не стоит связываться с МК.
435 2019157
>>2019156

> Нету желания дрочить рм/даташиты/аппноты/ерраты/другие пдф талмуды - не стоит связываться с МК.


Золотые слова.

связался с МК и пригорел от обилия даташитов
436 2019967
Обязательно ли кастить малок в нужный тип? Или так и присваивать?

Тут один пидорас говорил что нулевые указатели нужно кастить.
437 2019970
>>2018315

>у которых абстрактные типы данных невозможны в чистом си


ОРУ СУКА ОНИ ТАМ БЫЛИ ПРИДУМАНЫ
438 2019975
>>2018115

>Ага, Линукс называется.


>ебать остряк в чяти.


Он прав.
439 2019980
Посоветуйте тулзы для личинуса который только начал осваивать ADT?
Вот список который я собрал для себя: gdb, valgrind, cmake... Еще что изучать?
440 2020071
https://ideone.com/jpn6JG

Почему цикл срабатывает и выводит еще один пустой элемент, когда значение current == NULL? Какого хуя?
441 2020112
>>2020071
а нельзя if на switch переписать?
а потом current = head;
442 2020165
>>2020112
Тебе въебать может?
443 2020194
>>2020112
Ты про проверку sgets? Я не нашел способа получше условия проверять, я тупой. switch не сработает там.
444 2020196
>>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 не определено.
445 2020220
>>2020196
БЛЯ СПАСИБО!

> free(current);


> current = current->next;


>Тут неопределённое поведение, после free значение current->next не определено.


а разве current не получает память в статике и просто значение current каждый раз переписывается новым? Сам указатель же статический верно?
Почему это работает блять!?
446 2020277
>>2020220
Не за что

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


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

> Почему это работает блять!?


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

Правильно должно быть что-то вроде этого:

> void \* to_free = current;


> current = current->next;


> free(to_free);

447 2020292
>>2020277
ДА ДА ТОЧНО СПАСИБО!

Я пропустил этот пункт у Праты.
448 2020838
>>2019967
Не нужно (нет предупреждения).
Кастить NULL нужно ТОЛЬКО при передаче в фции вида printf %p, бо там ждут void@, а не что попало.
449 2020854
>>2020165
но эти ифы не читабельны.
450 2021053
>>2019967

> Обязательно ли кастить малок в нужный тип? Или так и присваивать?


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

А насчёт того, что тебе кто-то говорил, что нужно, дело вот в чём. В Си не нужно, а вот в плюсах таки нужно. Если собирать сишный код плюсовым компилятором, то предупреждения всё-таки полетят.
451 2021123
>>2019975
бля, ну давай, расскажи, где в системной библиотеке линукса абстрактные деревья, хэштаблицы и прочие структуры данных для произвольных типов данных
452 2021125
>>2021053

но ведь если тупо написать
loh = malloc (sizeof ж loh);
то ошибки не будет ни при каком изменении типа
1523550276932.jpg45 Кб, 595x597
453 2021149
>>2021053

> Если собирать сишный код плюсовым компилятором


Зачем.
454 2021211
>>2021149
А зачем сишный компилятор, убогий и без библиотек.
"Си" это не язык и не компилятор, а способ программировать на плюсах со стороны Си, а не плюсов.

>Си-тред = С++


>С++-тред = С++


Вот так, а софт с названием "Си" это бесполезный мусор, устаревший еще 30 лет назад.
455 2021278
>>2021211

слишком жирно
456 2021536
>>2021125

> но ведь если тупо написать


> loh = malloc (sizeof ж loh);


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

> double ж t = (double ж) malloc(10 ж sizeof(double));


Таким образом я ловлю опечатки в духе

> double жж t = (double ж) malloc(10 ж sizeof(double));


В остальном же это больше вопрос стиля и привычки. Кто-то вообще оборачивает всё это в #define NEW(), в этом тоже есть свой смысл.

>>2021149
Понятия не имею, если честно.
Я просто рассказал, почему, возможно, кто-то говорил, что каст нужен: нужен, но только в плюсах.
Ну и да, всякие библиотеки могут быть написаны так, чтобы компилироваться и под Си, и под С++, вместо того, чтобы иметь отдельную версию под Си и под плюсы.
457 2021866
>>2021536

> Ну и да, всякие библиотеки могут быть написаны так, чтобы компилироваться и под Си, и под С++, вместо того, чтобы иметь отдельную версию под Си и под плюсы.


Так не делают (попробуй написать нехелловорд и поймёшь). Просто вставляют extern "C" в заголовок.
458 2021888
>>2021866
Соглашусь.
Юзал rocksdb. Их сишный апи - это функции которые дёргают внутри С++ классы и их методы. Но я в принципе и не против.
459 2022111
>>2021866

> Так не делают (попробуй написать нехелловорд и поймёшь). Просто вставляют extern "C" в заголовок.


Ну, возможно, тут уж точно спорить не буду
460 2022116
Подскажите, пожалуйста, есть структура типа в некой модульной программе:

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 при условии что все переменные из данной структуры объявлены в другом модуле? И вообще что можно прочитать чтоб лучше понимать как работают указатели/ссылки в проектах с более чем одним .с файлом?
461 2022131
>>2020071

>current == NULL


Нахуй так писать, кста? И вообще где и какой мудень советует использовать NULL?
462 2022205
>>2022116
Что ты несешь? Поля структуры доступны только для переменных типа structb. В заголовке будет этот структ и extern structb s1, s2
463 2022611
>>2022131
Слушай я долбоеб что ты от меня хочешь? Я даже не знаю как проверить переменную, инициализирована ли она или нет, вот и на нул проверяю. Если объяснишь одной строчкой по ебалу то я буду благодарен. Но я и так прочитаю по поводу этой хуйни. Нужно будет почитать какие значения ставит Си при объявлений.
464 2023115
>>2022205
Переменные из структуры уже объявленны в заголовочном файле data.h, в моем заголовочном файле эти же переменные идут как extern, в связи с этим вопрос - должна ли структура состоять из extern int X_samole, или я слишком хитрожопый когда хочу запихнуть уже имеющиеся переменные и их значения в структуру?
465 2023168
Хочу дёргать свою программу разными способами через repl, есть guile, а можно делать это всё через питухон и чтобы также красиво? Чёт просто не хочу становиться лиспоёбом.
466 2023175
>>2022611

>инициализирована ли она или нет


Братиш, ты чё ёпта, если ты не инициализировал её, то она не инициализирована, тем более локальная переменная, не обязательно будет иметь значение равное 0.
467 2023418
>>2023115

> слишком хитрожопый когда хочу запихнуть уже имеющиеся переменные и их значения в структуру


Это.
468 2023538
>>2023418
А как мне быть тогда если я хочу собрать значения из нескольких переменных и записать их в один буфер?
sage 469 2023542
>>2023538
Используй оператор присваивания.
470 2023646
>>2023538
Чё за проблема, анон? Сформулируй нормально.
471 2023658
>>2023646
Есть модуль в заголовочном файле которого заданы переменные int X_sample, int Y_sample, int Z_sample, есть другой модуль в заголовке которого есть две переменные unsigned char. Во время выполнения программы в эти переменные пишутся данные, я хочу собрать эти данные в одну структуру и записать в 32-байтный буфер. Вопрос в том могу ли я объединить все вышеперечисленные переменные в одну структуру и они сразу же будут хранить актуальные значения или же мне нужно сначала определить структуру, в которой будет все что угодно кроме актуальных данных а потом передавать значения переменных?
472 2023663
>>2023658
Что такое модуль в заголовочном файле? Напоминаю, что ты в c-треде.
473 2023668
>>2023663
Программа состоит из нескольких .с файлов(хз как назвать модулем или подпрограммой) , у каждого из них свои заголовочные файлы .h вот я хочу получить данные из модулей или подпрограмм и записать их.
o1.jpeg6 Кб, 300x168
474 2023673
>>2023663

>Программа состоит из нескольких .с файлов


Linkage unit (вроде)
Зачем ты хочешь собрать их в одну структуру? Может тебе оно не надо?
Ты тип для записи в одно место хочешь прочитать из разных мест, а потом писануть их разок в другое место, затем ты их собрался куда-то в третье место записывать, но уже методом по-проще, как я понял. Зачем всё это? Звучит как хуйня.
475 2023676
>>2023673

> Зачем ты хочешь собрать их в одну структуру? Может тебе оно не надо?


Мне надо их записать на флэш память физическую, поэтому я хотел их собрать в один буфер, а из буфера в физическую память.
sage 476 2023684
>>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 для структуры писать. Тебе эта структура нужна только чтобы записать, так сделай ее локальной переменной, и пусть она канет в небытие после записи.
477 2024048
Доброго времени суток, господа. Такой вопрос. А можно в Си сделать строковую константу из содержимого внешнего файла? Что-то вроде
char openglShaderSource[] = "
#include "shaderSourceFileName"
";
но конечно же не буквально так. А то неудобно шопиздец. Можно инлайнить и каждую строчку оборачивать в "...\n", а чтоб закрывающиеся кавычки шли под линеечку, приходится рекордить сложнейший макрос в виме. Можно в рантайме делать все это fopen, fseek, ftell, rewind, malloc, fread, fclose. Эскобар какой-то.
478 2024052
>>2024048
Пиздец, аноны, так не хочется в кресты перекатываться
https://stackoverflow.com/questions/410980/include-a-text-file-in-a-c-program-as-a-char
479 2024134
>>2024048
Шелловый скриптец, который генерит хедер, и мэйкфайл, который это дело запускает, когда небходимо.
>>2024052
Скатертью по жопе.
480 2024244
>>2024048
Попробуй вот так

> #define HEREDOC(...) #__VA_ARGS__



Ну и в коде

> const char text[] = HEREDOC(


> text "text";


> text text text;


> );



Это не то чтобы идеальный способ, но для твоих целей может подойти.
481 2024721
>>2024048
Напиши утилиту преобразования в сишный файл - так деды делали.
sage 482 2024780
>>2024721
Деды умеют собирать ресурсы в объектный файл через ld в линуксах и использовать штатную возможность (ресурсы, windres/rc) в винде. Нет никакого смысла преобразовывать внешний файл в текст с эскейпами и всей хуйней, чтобы потом сишный компилятор преобразовал его обратно в изначальный вид.
483 2024807
Спасибо, аноны. Я уже на плюсы перекатился. Там есть raw string literal.
484 2024857
>>2024807
Пиздец, чмо.
485 2024990
>>2024857
Почему так, нахуй?
486 2025519
>>2024990
>>2024807

Сломавси?
487 2025820
Нужна помощь по С не за бесплатно
тг @hepacika
488 2026156
>>2025519
Ну, не чмо, а долбоёб. Ради какой-то мелкой хуйни, которую можно пережить, свалил в кресты, у тебя раньше была одна проблемлка, теперь есть проблемы, которые добавят кресты. Если это не долбоебизм, я тогда не знаю даже. Суть донёс, чмо.
sage 489 2026174
>>2026156
зато в крестах можно (будет) сделать std::embed("/etc/passwd"). представляешь, как здорово? http://open-std.org/JTC1/SC22/WG21/docs/papers/2020/p1040r6.html
490 2026177
>>2026156
да для OpenGL кресты лучше
sage 491 2026186
>>2026177
чем? необходимостью постоянно писать :: перед функциями?
chmo.mp4262 Кб, mp4,
1280x720, 0:01
492 2026190
>>2026156
Там ещё цимес в том, что если ему нужно вставить в код именно шейдер, т.е. он пишет, скорее всего, какую-то игрушку или чего-то в этом духе, ему всё равно почти наверняка придётся писать с нуля процедуру загрузки файла с диска целиком во время исполнения. Для подгрузки текстурок там каких-нибудь или ещё чего-нибудь в этом духе.
493 2026214
>>2026174

>std::embed("/etc/passwd")


Что мешает сделать #include "/etc/passwd"?
494 2026226
>>2026190
Ладно, убедил нахуй. Возвращаюсь на Си.
495 2026228
>>2026190
заодно можно будет играться с шейдерами без перевыполнения билда
sage 496 2026241
>>2026214
Возможно, синтаксис /etc/passwd?
497 2026269
Какого-то малодушного молодого пидораса наблюдаем в этом itt треде. Таким тут не место.
498 2026275
>>2026156

>Ради какой-то мелкой хуйни, которую можно пережить


>ненужно


Ненужноиды - как плесень или черви, главный признак, что пациент скорее мертв, чем жив.
499 2027455
Вопрос.
Аноны, как думаете, вот такое вот писать допустимо?

> int a[] = { 1, a[0] + 1 };


gcc вроде как кушает это без проблем, правильно вычисляя a[1], но я спрашиваю больше с точки зрения соответствия стандарту и портируемости.
501 2027538

>>2

2w4zxr8jm5h51.jpg24 Кб, 640x360
502 2027575
>>2027490
О, большое спасибо, анончик, сотни нефти тебе.
Доставил быстро и решительно, всегда бы так.

и как я сам этот вопрос не нашёл
Тред утонул или удален.
Это копия, сохраненная 22 июня 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски