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

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

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

Пожалуйста, пользуйтесь 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, с диффами)

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

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

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

- №58: http://arhivach.ng/thread/573804/
- №59: http://arhivach.ng/thread/597021/
- №60: http://arhivach.ng/thread/610540/ >>1772290 (OP)
2 1787002
>>786992 (OP)
Ну и где там маньки, которые в 59 треде рассказывали, что главное "ко-ко-ко стандарт" и приоритет арифметических операций не нужно указывать скобками?
Сосите, вот правило MISRA C, доказывающее, что вы не правы.
3 1787010
>>787002
Ты опять выходишь на связь? Давай повторю еще раз для дебила: MISRA C - это такие рекомендации, как писать код для хуйни, которая может ебнуть. Или убить кого-то. Весь остальной код пишут, руководствуясь принципами здравого смысла, с которым, как мы уже выяснили, у тебя проблема.

Так вот в этом нормальном коде принято оборачивать в скобки только неоднозначные случаи (классическое & vs. << и прочие), условие в тернарном операторе, все переменные в макросах, ну и, конечно, те выражения, в которых нужно изменить приоритет операторов. Причем в первых двух случаях порядок вычисления все равно гарантируется стандартом, просто его мало кто помнит, да и читать удобнее.
4 1787021
>>787002
>>787010
Оборачиваю все мат. операции в скобки по логическим блокам чисто для удобочитаемости. Какие подводные?
5 1787025
>>787010

>MISRA C - это такие рекомендации, как писать код для хуйни, которая может ебнуть. Или убить кого-то.


Ага, а если пишешь, код не для медицинских приборов, промышленности, или автомобиля, то можешь говнокодить, как хочешь. Мы тебя поняли, маня.

>остальной код пишут, руководствуясь принципами здравого смысла


>в этом нормальном коде


Вот есть свод правил MISRA C, а где можно почитать "принципы здравого смысла" и критерии "нормального кода"? Нигде, потому что это только твои маняфантазии.

>Так вот в этом нормальном коде принято оборачивать в скобки только неоднозначные случаи (классическое & vs. << и прочие), условие в тернарном операторе, все переменные в макросах, ну и, конечно, те выражения, в которых нужно изменить приоритет операторов.


Это сугубо твоё личное, ничем не подкрепленное, мнение. В MISRA C сказано не использовать приоритет операторов. Я думаю, что те, кто разрабатывали правила MISRA C разбираются в программировании получше маньки с Двача.
6 1787028
>>787021
Бтв поясните за эти ваши стандарты, как вкатиться правильно и на каком этапе изучения, на какой(ие) отдать больший приоритет.
7 1787030
>>787021

>Какие подводные?


В том, что зумерки с этого итт треда, дрочащие на стандарт будут тебя хейтить, ведь надо наизусть знать стандарт, знать приоритеты операций и никогда не использовать скобки. По мнению зумерков (залетевших сюда с хабра) для хайпового и модного кода в коде вообще нигде не должно быть скобок, а иначе ты "не в теме", "не знаешь стандарт", "не сечешь фишку".
Ведь им важнее выебнуться знанием стандарта друг перед другом, чем писать понятный и надежный код.
8 1787034
>>787030
Ясно, хуета. Продолжу писать как и писал. Но инфы про стандарты вы мне всё таки доставьте бажожда.
image.png69 Кб, 950x217
9 1787037
>>787034
В шапке есть инфа. Собсно, 3 стандарта (С99, С11 и черновик с 202x), и Прата, которая объясняет стандарты и различия между ними.
10 1787042
>>787037

>Прата


О, норм. Его и читаю. А стандарты эти читать тупо от корки до корки и будет мне счастье? А что эта ваша MISRA? Её стоит навернуть?
11 1787054
>>787025

> можешь говнокодить, как хочешь


Я этого не говорил.

> где можно почитать "принципы здравого смысла" и критерии "нормального кода"


В стайлгайде софта, который ты пишешь. Внезапно, да?

> В MISRA C сказано не использовать приоритет операторов


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

>>787028

> как вкатиться правильно и на каком этапе изучения


Читать стандарт полностью не нужно, это для разработчиков компиляторов. А вот конкретные неясные моменты смотреть стоит сразу, если не написано в учебнике (у Праты, например, на большинство твоих вопросов уже будут ответы).
12 1787145
>>1786223 →
Там лисп вообще ни при чём
13 1787193
>>787042
Мизру не наворачивай. Это мем, который в индустрии не используют. К ней референсится полтора независимых аудитора во в трёх странах мира. И то только на очень специфических проектах. Отсутствие стандартизации в индустрии собственно и является причиной по которой она не взлетела.
14 1787263
>>787021
Если твои мат.операции выполняются с плавающей точкой, то группировать их желательно по соображениям точности или возможности параллельного вычисления, а не логически.
15 1787440
Кех недели две назад спрашивал, как (и надо ли) расставить скобки в битвайзах и логике, а тут уже разборы стандартов пошли. Люблю ваш тред за это.
Алсо если ебнет, то компиль виноват, что стандарт не поддерживает?

>>787021

>Оборачиваю все мат. операции в скобки по логическим блокам чисто для удобочитаемости.



А не лучше отделить пробелами или оттабулировать, чем засирать всё скобками?
16 1787480
Раз уж тут разговор за стандарты пошёл то расскажите нужны ли мне другие стандарты кроме актуального если язык я учу исключительно для того, чтобы самостоятельно пилить всякую лоу/хай левельную фигню без устройства на работу? Мб есть какие нюансы в работе мк что они требуют старых стандартов или ещё что?
17 1787483
Ищу IEEE 754-2019. Ни у кого не завалялся? Где искать?
18 1787620
>>786992 (OP)
А для чего нужен Си в 2к20(с целью получения работы и зарабатывания денег)? Только микроконтроллеры прогать и всё?
19 1787685
>>787620
Да, в целом в эмбедщине много С, ибо компиляторы С есть на все возможные платформы, даже самые экзотические. Ну и сам язык суперкомпактный и считай, что ты вообще чуть ли не на кроссплатформенном Ассемблере пишешь.

Почему ты это так говоришь, будто программирование мкк - это что-то плохое? Как по мне, куда интереснее, чем веб-макакерство.
20 1787708
>>787483

> IEEE 754-2019.


Тебе сам стандарт или реализацию.

Если что, я ищу просто реализацию IEEE 754 на Си. Желательно старую, времён Turbo C.
21 1787790
>>787193

> в индустрии не используют


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

>>787440

> если ебнет, то компиль виноват, что стандарт не поддерживает


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

>>787708

> Если что, я ищу просто реализацию IEEE 754 на Си


softfloat загугли, тысячи их. Эмуляторы времен доса тоже гуглятся, но они не на Си. В линуксе /arch/x86/math-emu еще.
22 1787847
Пчелы нужна помощь. Как написать виртуальное блочное устройство поверх существующего на базе device
mapper?
23 1788035
>>787685

>Почему ты это так говоришь, будто программирование мкк - это что-то плохое? Как по мне, куда интереснее, чем веб-макакерство.


Собсно, в этом и была суть моего поста: зачем в 2к20 учить Си? Только чтобы прогать микрики за еду, и всё?

Сам подумай, что лучше:
1) прогать мк в неотапливаемой (зимой) и некондиционируемой (летом) комнате за 30-40к всю жизнь без перспектив;
2) стать веб-макакой, прогать в комфортабельном офисе с кофемашиной и печеньками за 60к, при этом есть перспективы карьерного роста в мидла, синьора и потом трактора.

Если тебе так уж интересна электроника и мк, то будучи веб макакой это может быть твоим хобби. Но выбирать это профессией с целью зарабатывания денег - большая ошибка.
24 1788038
>>787483
>>787708
Объясните, а зачем нужен этот стандарт?
Просто в Си итак уже есть числа с плавающей запятой и компиляторы умеют в действия над ними.
25 1788055
>>788038
Он и ищет реализации стандарта в компиляторах (в библиотеке). У меня на первом 386 компе тоже не было аппаратных флоатов например.
26 1788067
>>788035
Ты просто живешь в другом измерении, к твоему сожалению. В парашке беда с лоу-лвльщиной, да. Забугром эмбедщина - элитная айти специальность, где и офисы заебись, и з.п. на уровне. Или ты хочешь сказать, что в конторах, которые производяя железо, типа Quallcom, Mellanox, Marvell, Nvidia, Xilinx, Tesla и т.п. и в которых больше половины софтвер инжиров являются хардкорными байтослесарями, душные и ободранные офисы?:) Хочешь работать в лоу-лвльщине и получать достойную зарплату - заводи трактор и учи ин.яз. В противном случае, жри говно js на веб-макакерской работе и живи в манямирке, типа ты ОЙТИ ИЛИТА(нет)
27 1788075
>>788035

>кофемашиной и печеньками за 60к, при этом есть перспективы карьерного роста в мидла, синьора.


Ты сначала этого уровня добейся будучи 1 из тысячной армии ежедневных вкатышей-индусов, потом уже о тракторе мечтай. Будешь как миленький сидеть и до конца жизни хуярить лендинги о мазях для увеличения члена.
28 1788171
>>788035

>потом трактора


Как эта болезнь называется? Школьники до сих пор верят в рай в европидарахии и омериге?
29 1788481
>>788171
Потеря веры в жизнь тут, даже у глупых школьников. Если это не настойчивый звоночек, то что тогда звоночек?
30 1788487
>>788075

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

В то время как для байтослесаря 60к - это уровень сеньера/ведущего программиста и для 60к нужно лет 5 кабанчиком горбатится, пока предыдущие диды-ведущие на пенсию не свалят.
31 1788531
>>788171
Я 5 лет проработал в embedded разработке заграницей.
В индустрии уже лет 25.
Рай для железячников это Юго-Восточная Азия. Если хорошо разбираешься, то чего сразу Европа или США - попорбуй Южную Корею. Отличная страна. Только субботы часто рабочие и рабочий день с 9:00 до 21:00. В остальном - рай.
32 1788546
>>788487
Ещё раз задам вопрос - нахуя кому-то брать тебя на 60к если индус сделает всё за 20? Что такого охуенного ты можешь предложить рынку чего не может предложить рспшка после курсов кокодемии? Может ты можешь выдавать 2 сайта в сутки? Или просто работать 24/7? И ты хочешь что-то доказать насчёт эмбедеда и лоулевела которые на западе испытывают острую потребность в грамотных кодерах коих нет. Причём настолько, что любой человек с опытом 3+ лет на этом самом эмбедеде может спокойно ехать в какую-нибудь Германию или Францию на 4-5к рейхсмарок ежемесячно, да тебя ещё и работодатель оближет помогая устроиться по началу и потом снимать/купить жильё.
33 1788547
>>788531
Не думая променял бы свою Канаду на Японию, но язык учить никак не решусь. Зона комфорта душит что пиздец.
34 1788549
>>787790

>softfloat загугли, тысячи их.



Спасибо!!!!
Первый же результат поиска показался мне примемлем - https://github.com/ucb-bar/berkeley-softfloat-3
Возможно где-то есть и поинтереснее, но это этот вполне норм. На досуге поиграюсь.
Ещё раз спасибо.

Забавно что на этот вопрос в теме про микроконтроллеры в разделе "Радиотехника" никто толком не ответил.
35 1788563
>>788531

>Я 5 лет проработал в embedded разработке


Пиздец... На хуй так жить?
36 1788565
>>788563
Это был самый лучший опыт в жизни. Самое интересное время. Это было интересно. Это была работа с железом, которое в продаже повилось только через несколько лет. Это был доступ к самой интересной закрытой документации и железа от ведущих производителей железа. Это была молодость и беззааботность.
37 1788576
>>788546

Реальность такова, что никакого индуса за 20 нет, ты его придумал.
38 1788581
>>788576

>Конкуренции нет


>js мощный язык


>Самая востребованная сфера


>ЗП от нуля и до бесконечности


>Вкачусь за 3 месяца


>Через 2 года стану синьором а на 3 укачу в Калифорнию

39 1788583
Вы не могли бы вопросы политики/зряплаты/бонусов обсуждать в других темах? Тут реально для гиков рай, а вы мусолите какую-то залупу.
40 1788584
>>788565

>работа с железом


В кузнеце тебе понравится.
41 1788589
>>788584
А что ты делаешь в этом теме? Может быть ещё и не одного ассемблера не знаешь?
42 1788607
Ору с мани из юнитфактори уже третий тред жирнейше засирающей. Внатуре шизик.
43 1788611
>>788589
Смотрю прс.
44 1788624
>>788581

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

В то время как в этом треде байтослесари оправдываются что не на заводе работают, нинада троллить, а в НИИ/НПО работают.
45 1788630
>>788546

>И ты хочешь что-то доказать насчёт эмбедеда и лоулевела которые на западе испытывают острую потребность в грамотных кодерах коих нет.



А вот их сейчас как раз целая ЮВА с Китаем и прочими корейскими гейшами.
46 1788653
А меня сейчас корёжит 64-бита.
Вот, заюзал gcc-8 на 64-битном Альт Линукс, в он не может в ключ -m32, пришлось портировать свою софтинку на 64-бита.
А тут засада - MSVC sizeof(long) = 4, gcc sizeof(long) = 8.
И привет #ifdefы

Не, я конечно заборю эту проблему, не в первый раз такое. Но забадывает поддержка нескольких платформ/компиляторов.
47 1788658
>>788653

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



<stdint.h >
<
s
t
d
i
n
t
.
h
>
48 1788673
>>788658
В моём случае это не выход. У меня слишком специфичная задача, где руками по памяти приходится лазить и моделировать некоторые структуры. Опять же руками. Именно что в рантайме моделировать. Отсюда и сложность переноса.
49 1788676
>>788673

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

Что значит не подходит?
50 1788681
>>788676

>Что значит не подходит?



Блин, я интерпретатор пишу. Мне аргументы для printf приходится ручкаим формировать.
А к разным sizeof ещё добавляется calling conversion. MSVC и gcc аргмуенты функций на 64-х битах по-разному передают.

И это одна из немногих засад при портировании с 32-х бит на 64-бит.
55289938-093e7500-53cd-11e9-9353-4640e2a9c3c6.png29 Кб, 701x354
51 1788780
Напоминаю байтослесарям, что Python - самый популярный сегодня язык для Embedded.
52 1788786
>>788780

>Python - самый популярный сегодня язык для Embedded.



>Путает embedded language и embedded systems

15809988630720.png126 Кб, 401x384
53 1788799
>>788786

>язык для Embedded


>Путает embedded language и embedded systems


А может, ты? Lua, кстати, тоже там весьма популярен.
54 1788804
>>788799

Нет ты. Точнее, стопудово ты, судя по упоминанию Lua, которая ни в один МК не влезет, кроме разве что топовых с распайкой внешней памяти.
55 1788806
А пайтон, который ты где-то подсмотрел, это, скорее всего micropython - который игрушечный язык для плат-ардуин на STM32.
56 1788812
>>788806

>micropython



Причем, что характерно - именно для конкретных плат-радиоконструкторов на STM32 с конкретной разводкой, на голом МК его не применить, произвольную плату не развести, новое устройство не сделать.
15881040502962.png485 Кб, 888x894
57 1788858
>>788806
>>788812
>>788804

>мк


Ты сука внатуре дебил, и не знаешь, что такое embedded language. Это язык, который можно встроить в свою систему, чтобы юзер мог дергать ее за сиськи на нем, а не хуитка для байтослесарей с двухкилобайтным сортиром вместо железа, лолка. А ембеддед в моем посте - это железячники во всех их проявлениях. Ваще разные две хуйни, я не ебу, к чему ты свои embedded languages приволок, аутист.

>не влезет


А openwrt влезет тогда? Или это не ембеддед-система, довн?
Акстися, на всяких роутерах, которые тоже ващет ембеддед, уже давно десятки мегабайт оперативы.
58 1788987
>>788858
Зачем нужны юзеры во встраиваемой системе?
15879151825500.png527 Кб, 900x900
59 1788993
>>788987
Это встраиваемая система нужна юзерам, очевидно.

А где я говорил про юзеров во встраиваемой системе, кстати?
60 1789021
>>788993

>А где я говорил про юзеров во встраиваемой системе, кстати?



Вот тут:

>>788858

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

61 1789033
Дочитываю значицца эту вашу Прату. Как теперь вкатиться на работу расскажите?
62 1789051
>>789033

> Как теперь вкатиться на работу расскажите?


Зависит от того, что хочешь делать. Но чтобы понимать, как выглядит мир за пределами стандартной либы, имеет смысл полистать какое-нибудь APUE, что-то нибудь вводное про сети (сокеты, libevent), про микроконтроллеры опять же.
63 1789066
>>789051
Хочу на универсалычах уметь всё: и мк накодить и по для марсианского ровера и высокропроизводительный ии захуярить.
64 1789083
>>789066
И ядрёну бонбу?
65 1789085
>>789083
Не, нахуй. Я творец а не разрушитель. К тому же там всё уже написано до меня, вряд ли лучше сделаешь лол.
15983086892200.jpg5 Кб, 170x170
66 1789137
>>789021
А ты не жопой читаешь, ты внатуре тупой.

Где там написано про ВСТРАИВАЕМУЮ систему? Там написано про просто систему, любую. А встраиваемый - язык.
67 1789341
>>786992 (OP)
Аноны, молю дайте мне ссылку на то как работают адреса в отличии от обычного обращения к переменной.

Ну я вот читал книгу по си там про адреса и там написано типа что адрес увеличивают скорость обращения к переменной или что-то такое, но конкретно не написано как это происходит и почему.

ОБЕЪЯСНИТЕ МОЛЮ ПОЧЕМУ ОБРАЩЕНИЕ ПО АДРЕСУ БЫСТРЕЕ ЧЕМ СТАНДАРТНОЕ ОБРАЩЕНИЕ К ПЕРЕМЕННОЙ
68 1789372
>>789341
Взятие адреса это о(1), вот и все
69 1789374
>>789372
не пoнял. как пoнять o(1)?
70 1789429
>>789341
Бред, косвенное обращение не может быть быстрее. Быстрее может быть передача параметра в функцию.
71 1789434
>>789429
указатели работают быстрее

то есть *p = 7 быстрее чем p = 7 и я хочу знать почему?
72 1789509
>>789434

> указатели работают быстрее


Тебе уже сказали, что бред.

> то есть ∗p = 7 быстрее чем p = 7 и я хочу знать почему?


∗p = 7 это mov регистр,[адрес p]; mov [регистр],7
p = 7 это mov [адрес p],7
Очевидно, что две инструкции, да еще с зависимостью по данным никак не могут быть быстрее одной.
73 1789556
>>789509
хoрoшo прoебался. а зачем тoгда указатели?
74 1789576
>>789341
Процитируй дословно, ты мог не так понять.
75 1789578
>>789576
я не так пoнял.
76 1789580
>>789341

>ОБЕЪЯСНИТЕ МОЛЮ ПОЧЕМУ ОБРАЩЕНИЕ ПО АДРЕСУ БЫСТРЕЕ ЧЕМ СТАНДАРТНОЕ ОБРАЩЕНИЕ К ПЕРЕМЕННОЙ



проспись
77 1789600
>>789374
Это временная алгоритмическая сложность. О(1) - константное время исполнения. Сразу видно вкатыша без высшего образования :-)
78 1789672
>>789600
Обращение к переменной, и по указателю, это тоже о(1), образованный ты наш.
gs9i8m5jcw011.jpg27 Кб, 499x499
79 1789682
>>789341

>и там написано типа что адрес увеличивают скорость обращения к переменной или что-то такое


Скорее всего, такой же грамотей, как ты, писал.
Не читайте советской макулатуры, уебки. И вообще на русском
80 1789700
>>789682
Джвачую, все читаю, толтко на эстонском.
81 1789703
>>789600

>Это временная алгоритмическая сложность


Говнокнута обчитался? Мохнатое О бля, думал уже это говно вышло из моды зумеров.
82 1789749
>>789341

Слушай, у ВСЕХ компиляторов есть ключ, позволяющий формировать ассемблерный листинг. Более того, все компиляторы переводят код Си програмы в ассемблер, а уже ассемблер делает из него объектный файл, который линкуется с другими объектниками и библиотеками в исполняемый файл.

К чему я тебе это рассказываю? Напиши оба варианта присвоения и посмотри чего нагенерировал компилятор. Поверь, лучше один раз увидеть своими глазами, чем 100 раз услышать.
83 1789777
>>789749

> все компиляторы переводят код Си програмы в ассемблер


Это, мягко говоря, не совсем правда. Далеко ходить не надо, у того же tcc парсер прямо по ходу разбора сразу генерирует машинный код, безо всяких промежуточных представлений. У шланга есть промежуточные представления, но он не обязательно пишет .s. У Visual C++ кодогенератор делает листинг только по запросу, а самому ему ассемблер в хуй не вперся. Плюс к этому всему добавляем сборку для LTO/LTCG, когда даже в объектники пишется промежуточное представление.

Поэтому правильнее сказать, что большинство компиляторов может сгенерировать тебе ассемблерный листинг, если попросишь.
84 1789785
>>789341
ускoряется время кoмплияции тoлькo. указтели в oснoвнoм нужны кoгда нужна динамическая память. например динамический массив.
85 1789896
>>789777
За всю свою многолетнюю практику ни разу не видел компилятор, у которого нет ключа для генерации ассемблера.

Тот же tcc... Хмм... А ведь вроде не умеет - https://man.cx/tcc(1)
В упор не вижу ключа -s и Гугл говорит:

>> 2. How to generate assembly program in tcc.


>You don't.


>The i386 and ARM targets use a function o() to write the opcodes as they appear in the binary. Use objdump -d if you need assembly output.



Ну да, выходит не все компиляторы умеют.
Ну тогда
objdump -S mycode.o | less
в помощь.
image.png85 Кб, 655x456
86 1790016
>>788171

>хрюю пук

87 1790112
>>789672
Он спросил что это означает, я ответил, причем здесь конкретно то, что ты высрал, ебанько?
88 1790195
>>790016

>>хрюю пук



смотрим на твою карту, валим все в Казахстан, лол, кек
89 1790198
>>790195
Да я уже понял, что обосрался.
Ну, с кем не бывает.
90 1790342
Чем этот ваш эмбеддед отличается от моей ежедневной ебли с плюсами? Что вы делаете, прокидываете слои абстракции на железо? Если я довольно прям ёпта нормально так подробно представляю, во что и как именно превращается мой плюсовый код, комфортно ли будет щупать ваши железки? сишечка тоже нравится, очень милая и простая, только иногда сильно не хватает приятного сахарка из плюсов... но я полагаю, если руки не из жопы, g++ тоже можно смело тащить в ембеддед
91 1790357
>>790342

>плюсами


ООП же, я например сознательно эту парадигму дропнул, хотя на Кюте пиши.
92 1790360
>>790357
Бля, плюсы != ООП, вот совсем. Я вообще редко классы какие-то прям в стиле java наматываю, в основном функции, структуры и легкие RAII оберточные классы.
93 1790371
>>790342
Не всегда. Иногда байтослесари получают совсем голую железку, тогда надо писать HAL. Чаще всего уже существующий HAL крайне хуевый с не менее хуевой документацией - хоть свой пиши с нуля. Чаще требуется накатить ядро Линукса через Yocto. Если надо работать с кастомной железкой - скорее всего надо писать драйвер на нее, благо подсистемы в ядре Линукса значительно сокращают гемор и не надо совсем уж там битами жонглировать хотя порой таки надо

Сишечка популярнее плюсов в эмбедщине по большей части потому, что компилятор на С существует под все, даже самые экзотические платформы. А если нет - написать компилятор С гораздо, ГОРАЗДО легче и быстрее, чем компилятор плюсов. Ну и порой есть resource constraints довольно чумовые, даже в 2к20 году, где даже плюсы достаточно жирные (можно офк писать С-лайк код, но тогда зачем изначально пикать плюсы?) и меньше подходят. Ну и если в железке крутится ядро Линукса, что происходит в 90% случаев, то писать кастомные драйвера на периферийные устройства надо на С, ибо API да и вообще все ядро Линукса написано на С. А еще С - это грубо говоря кроссплатформенный ассемблер, ни больше, ни меньше, засим этот ЯП бессмертен в определенных нишах.
94 1790383
>>790371
Вот насчёт компиляторов на разных платформах да, действительно. Худо-бедно рабочий компилятор с89 я и в одно рыло заделаю, но про плюсы даже не заикнусь просто пизда.
Плюсы ради шаблонов в основном хочется. Можно такой-то кавайный compile-time полиморфизм накидывать. Перегрузка аргументов в функциях, неймспейсы, nested struct/enum-ы, блямбды ёпту, да много мелочей, к которым привык и не хочешь терять. А на сишечке всё ручками делать. Хотя, когда железки теребишь, абстракции куда ближе к железкам, и таких потребностей, наверное, не возникает.
А ядро линупсовое лёгкое само по себе? Ну типа, сколько памяти занимает? Или его кастрировать при случае чего можно?
95 1790386
>>790360

>Бля, плюсы != ООП, вот совсем


Чигобля?

>Я вообще редко классы какие-то прям в стиле java наматываю


Ну так и задумайся, на хуй тебе кресты если ты против ее парадигмы
90952.gif218 Кб, 384x384
96 1790388
Анон, хочу гонять битики по байтику (или двум) влево-вправо. Это значит, что без инлайнов с рор/рол не обойтись?
Алсо переносимость может пострадать?
97 1790390
>>790386
Кресты мультипарадигменные, братишка. Как хочешь, так и делаешь. Нахуй тебе плюсы, если ты джавку там разводишь? Фабрики бля, хуябрики. Вот джаву и бери.
98 1790394
>>790390

>мультипарадигменные


Нет, это было нахлобучивание ООП над Си. Если ты там вместо cout пишешь printf ну или пишешь в процедурном стиле, то пора подумать. А Java это заебись.
99 1790396
>>790383
Голое ядро в рантайме занимает мало места само по себе + из-за того, что это попенсорц, можно играться с конфигами ядра и собрать кастомное ядро под самые разные нужды. На абсолютное большинство железок заходит на ура. Лично я собирал без особой анальной акробатики ядро, которое в рантайме занимало 5 мегабайт (без кэшированной памяти офк, хотя Линукс гибкий и позволяет играться со многими параметрами).
100 1790397
>>790388
Просто юзай логический сдвиг влево/вправо, в чем проблема?
101 1790401
>>790394
printf я не пишу, но в с++20 его завезли как std::format, поэтому ещё успею.
Ты там себе навыдумывал стилей, концепций, каких-то ебать их в рот парадигм, но всё это по отдельности друг от друга дрянь страшная. Код пишется под каждую задачу по-своему, так, как оказывается удобнее. Если ты от этой свободы отказываешься в пользу сомнительных заявлений о том, что надо кодить каким-то определённым образом, хули я могу сказать, земля тебе пухом.
Java заебись, ничего против её не имею. Просто она не подходит под мои задачи, и всё тут. И java-style тоже идёт в разрез с тем, что мне нужно.
102 1790403
>>790396
5 мегабайт это очень даже очень. Блин, надо будет заказать какую-нибудь простенькую железку и поднять там линупс. Спасибо за инфу, анон!
103 1790404
>>790388
Делай побитовыми операциями стандартными. Если нужен именно кроговой шифт то есть софтверная реализация.

https://en.wikipedia.org/wiki/Circular_shift
104 1790405
>>790397
Если ты про <<>>, то гцц у меня рожает арифметический сдвиг. Да и логический сдвиг не нужен так как

>хочу гонять битики по байтику (или двум) влево-вправо


и биты не должны проёбываться.
Вообще странно, что компиляторы не позволяют ротировать биты, сейчас гуглю и нигде внятного объяснения этому нет, потому ставлю на зависимость от архитектуры.
105 1790407
>>790405

>Вообще странно, что компиляторы не позволяют ротировать биты


Гугли "swap", шизик.
106 1790409
>>790401

>то надо кодить каким-то определённым образом


Да, если ты адепт ООП, то и пиши так

>std::format


Пиздец....
107 1790411
>>790405

>арифметический сдвиг


Подозреваю, что ты несешь хуйню.
Арифметическим бывает только сдвиг вправо (сдвиг влево не бывает арифметическим, так как нет такого ABI, где бы LSB биты при сдвиге влево заполнялись единицами, а не нулями).

Биты не должны проебываться при rol/ror, при логических сдвигах они еще как проебываются. В языке С (да и в других известных мне языках тоже) нет нативного API для rol/ror. Напиши свой, это очень просто.
108 1790413
>>790411
пардон, я чуток сказал неточность

На бумаги есть арифметический сдвиг влево, только вот между ним и обычным логическим сдвигом влево нет никакой разницы (как заполнялись LSB биты нулями, так и заполняются). А вот в случае со сдвигом вправо все по-другому. При арифметическом сдвиге вправо MSB бит 1, а не 0, как при обычном логическом сдвиге вправо.
109 1790415
>>790411
пардон, я чуток сказал неточность

На бумаге есть арифметический сдвиг влево, только вот между ним и обычным логическим сдвигом влево нет никакой разницы (как заполнялись LSB биты нулями, так и заполняются). Так что хз зачем есть отдельная команда (sal в х86), если разницы по сути, вроде как, нет.

А вот в случае со сдвигом вправо все по-другому. При арифметическом сдвиге вправо MSB бит 1, а не 0, как при обычном логическом сдвиге вправо.
110 1790503
>>790405

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


Внимательно смотри дизасм, ничего не напоминает? https://godbolt.org/z/Mn1sjf

>>790415

> Так что хз зачем есть отдельная команда (sal в х86)


> если разницы по сути, вроде как, нет


Нет ни разницы, ни инструкции. Опкод SAL тот же, что и у SHL.
image.png457 Кб, 500x400
111 1790513
>>790403

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

Это была предистория. А практика говорит что для встраиваемых устройств можно легко писать на С++. Но есть две засады.

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

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

> extern "C"



Тогда линкер их увидит. Иначе будет искать С++ функции, а у них хитрый манглинг.

Ну и ещё нюанс со статически обхявленными классами. Конструкторы для них вызывать некому в общем случае. Но это решается самописной crt.0

Линукс далеко не идеал, хоть он и везде. В половине железок так уж точно он.
112 1790750
>>790513
И небольшое уточнение - значительная часть встраваемых железок имеет Линукс на борту. В этом случае вышесказанное не совсем верно. В этом случе всё будет работать так же, как и на персональном копмьютере. Само. По умолчанию.

Исключения нужно отключать ключами компиляции если пишешь код не для user space или для на железки без ОС. Да, даже для такого железа и для таких конфигураций можно писать на С++. Проверено.
113 1790794
>>790513

> А практика говорит что для встраиваемых устройств можно легко писать на С++


На Си пишут не потому, что C++ не подходит. Нет, С++ подходит, но если ты видишь код на Си, ты точно уверен, что там не будет всех этих исключений, шаблонов, классов и пятистраничных сообщений компилятора. А когда ты видишь код на C++, ты внутренне сжимаешься, потому что там гарантированно окажется "моя охуенная зеро кост абстракция вокруг регистров железки, которая оптимизирует установку битов". Ну а чего, язык же позволяет, и похуй, что это нечитаемое и неподдерживаемое нагромождение шаблонов, которое способно посрамить даже перл.
114 1790835
>>790794
Насчёт шаблонов согласен. Они иногда раскрываются в такое, что отладить представляется сложным. Особенно когда дебажишь по UART или JTAG в терминале.

Но классы-то тебе чем не угодили? По сути это те же структуры, в в области видимости которых дополнительно определены функции (методы классов).

И в целом это обычные функции, но которым неявно передаётся один дополнительный параметр - указатель на структуру, в котором определена эта функция. А в коде функции он будет называться this.

Остаются конструктор и деструктор - те же самые правила, что и других функций-методов, но конструктор, если определён, вызывается автоматически при аллокации этой структуры (класса). А деструктор вызывается при удалении структуры или при потере облести видимости.

Нет там особых сложностей.
115 1790862
>>790835
Велик и могу русский язык.

> указатель на структуру, в котором определена


Правильно читать так:

"указатель на структуру, в котороЙ определена"
116 1790889
Скажу сразу - вопрос ни в коем случае не для холивара. Скажите мне не проебался ли я убив 3 недели на базовый СИ перед вкатом в плюсы? В каких вообще областях чистый СИ просто незаменим?
117 1790934
>>790750

>И небольшое уточнение - значительная часть встраваемых железок имеет Линукс на борту.



Значительная часть встраиваемых систем оперативки-то не имеет, строится на редких "индастриальных" МК вроде TriCore, или из вышедших из моды вышедших пичков, а из штатных средств вывода инфы - в лучшем случае или мигающие светодиоды статуса или невмирающие 8-сегментные газоразрядные цифры или, когда дораха-бохато, кастомный ЛСД с запеченным в ЛСД графикой аля "электроника". И хуй туда кто поставит оверхедную железяку ради удобства - себестоимость стиралки за 15к для бомжей тут же улетает за пределы рентабельности.

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

Это всё ширпотребские быдлодевайсы, клоторые потом идут в некие магазины и там или азия или котлетки в еще невмершем НПО.

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

Там где ответственность и реалтайм и всякие монтависты по требованиям уже идут нахуй и берется QNX.
118 1790935
>>790934

>вышедших пичков


и MSP
119 1790948
>>790934

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

Тот же байкал охуенен - чистый проц без ненужной анально огороженной периферии вроде видеокарт и кусков 3G-модемов, и с полной документацией.

Но нет эти мудаки его на десктоп потянули, с пнем 3 конкурировать, мля.
120 1790962
>>790948

>делать на них убийц симатиков от сименса и прочие томографы с рентгенами


Возьми и сделай или ты думаешь после либирашьего пануванья все так легко?
121 1790965
>>790889
Бамп вопросу
122 1790977
>>790934

>QNX.



Но на марсианском ровере крутится VxWorks.
Но и QNX и VxWorks в итоге соснут у L4 version X2. И это точно.
123 1790978
>>790889

> Скажите мне не проебался ли я убив 3 недели на базовый СИ перед вкатом в плюсы?



Мало. Рано тебе в плюсы.
124 1790981
>>790978
Так вот я и спрашиваю - нужно ли си перед плюсами вообще и где оно и только оно юзается? И когда будет уже "пора"? Какой ёба-проект нужно сделать чтобы стать готовым, а, Иллидан?
125 1790983
>>790962

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

Успей совок в свою культурную революцию и нарожай бы в 60х-70х достаточно населения что бы конкурировать хотя бы с клятыми пиндосами, и плавно вруби НЭП -может быть всё так печально бы и не закончилось.

А либерашьи лдиберахи - все совковая комса, так-то.

И да, это были лучшие представители интеллигенции из тех что смог совок к моменту развала.
126 1790985
>>790981
Какой у тебя бэкграунд? На писал четыре недели назад до "изучения Си"?
127 1790993
>>790985
Школьный питон уровня масивчики, сортировочка пузырьком и джейсончики. 4 недели назад бухал как чёрт а сейчас поступил на софтварную хуемразь(инженера) и решил вкатываться заранее чтобы доминировать над всеми на курсе.
128 1791005
>>790993
Тогда учи ассемблер x86. Не так, чтобы на нём писать, но хотя бы понимать. Иначе уйдёшь обратно на питон или ещё какую беду.
129 1791008
>>790983

>хай-тек продукция


На хуй никому не нужная. Хотя для малолетнего либирахена дибилятор верх развития цивилизации. А все великии достижения в России были при СССР и плановой экономике, копетолиздм только и может, что отсасывать, пендохи это показали не раз начиная с 30х.
130 1791018
>>791005
А на кой он нужен вообще? Где-то читал что Си - это просто удобная обёртка асма.
131 1791019
>>791008

>А все великии достижения в России были при СССР и плановой экономике



Космос и атом. Всё.

Всё остальное - лихорадочно то пиздили-, то догонялииперегоняли, то аналоговнетили.

И да, дибилятор верхушка айсберга, тело - это те самые упомянутые мной ПЛК, станки с ЧПУ, 3д печать, цифровое управление производственными процессами, вот это все.

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

И их коллег из армении, от которых кондеры приехали.
132 1791021
>>791019

>Космос и атом


Это и есть технологии, а твое обоссаное хайтек и ит на хуй человечеству не нужно. Это у фантастов кудахтеры ассоциируются с прогрессом, а на деле от всеобщей ит дибилизации только деградация и упадок.
133 1791026
>>791018

>Где-то читал что Си - это просто удобная обёртка асма.


Вот именно. Исходя из этого и надо учить ассемблер, чтобы понять для чего нужен Си. А зная Си уже не так трудно выучить С++.

Я не думаю что востребованы программисты на С++, которые не понимают что сгенерировал им компилятор. Возможно в каких-то редких предметных областях. Иначе тогда лучше сразу в C# вкатываться и не задумываться о многих вещах.
134 1791035
>>791026
Ну хз даже, у меня с 1 курса в расписании стоит С++. И сколько этот ассемблер х86 придётся учить чтобы понимать как всё работает?
135 1791044
>>791035

> у меня с 1 курса в расписании стоит С++


Тебя выучат синтаксису, расскажут про особенности, научат пользоваться STL (вероятно научат). Но это не значит что ты станешь С++ программистом. Не, ну этого достаточно чтоби писать helloworlds. Или если ты алгоритмист крутой, то тут уже пофиг на чём ты пишешь - алгоротмисты это уже другое. Ценность таких специалистов именно в создаваемых ими алгоритмах, а кодировать почти любой может.
136 1791052
>>791044
Я и понимаю, что универ мне многого не даст. Это ещё одна причина по которой решил вкатываться заранее и самостоятельно. А теперь вот говорят разворачивайся и хватай асмр. Думаю короче.
137 1791237
>>791035

>И сколько этот ассемблер х86 придётся учить чтобы понимать как всё работает?



Да там достаточно просто понять. А мнемоник не так много, чтобы их выучить. На x86 Компилятор использует чуть больше половины. А может быть даже и меньше. Вот их и надо понимать. А всё остальные инструкции можно в справочник посмотреть, если вдруг понадобятся.
138 1791500
Что скажете про эту книгу? https://nostarch.com/Effective_C
По аннотации и содержанию вроде весьма годная.
Си мне интересно подучить на уровне читать и понимать готовые исходники.
139 1791524
>>791500
тебе просто нужен гугл
140 1791526
>>791500
Содержание стандартное, выложенная на сайте глава выглядит неплохо, но зайдет ли - хуй знает, прочитай и расскажи нам. Лично я из описания указателей у автора не понял бы ровным счетом нихуя.
141 1791531
>>791526
А где понял?
Мне интересно плотненькое изложение основ.
142 1791542
>>791531
K&R чекай
143 1791544
>>791542
Разве сейчас так пишут как там? Мне не задачки решать, а читать современные исходники.
144 1791560
>>791544

>Мне интересно плотненькое изложение основ.


Исхожу из этого
145 1791841
почему при компиляции в VisStu на C отказано в доступе? для с++ все ок
146 1791843
>>791841
Дополняю проблему, антивирус блочит запуск с файлов, при отключении антивируса все ок (с++ ок и с антивирусом)
147 1791880
>>791841
Антивирус пытается интеллектуально оградить дебила от языка, который ему не по уму.
148 1792015
>>791880
Но ведь тогда наоборот не комплились бы кресты, а с сишкой все было бы нормально
149 1792068
Ананасы, чем заниматься после Праты? Сейчас начинаю последнюю главу а типо куда дальше? Стандарты читать? Архитектуру компа и ОСей учить? Или хотя бы глазами пробежаться по самым часто используемым либам? Или сразу можно начинать проекты делать постепенно усложняя задачу?
150 1792081
>>792068
Знать Сишечку недостаточно. Без знаний языка ассемблера (похуй какой архитектуры на первых порах, но так как ты прогаешь на ноуте/пека, то х86-64) знания Си наполовину обесцениваются. Также, в 2к20 году, высирая код на Си, у тебя должен быть полный security awareness, иначе ты будешь писать дырявый код а-ля gets(yaeblan_overflow_me), за что тебя вполне законно могут выебать в жопу. ОС интерналс тоже обязательно грызть, попробуй начать с Танненбаума.

На Си всегда байтоёбили, сам язык очень простой, но он требует знаний в смежных темах (асм и основы ОС как минимум) в виду областей его применения. Не забывай, анон, что на Си пишут прошивки, драйвера, ОСи, низкоуровневые библиотеки и йоба-числодробилки.
151 1792084
>>792081

>security awareness


Что читать для этого?
152 1792090
>>792084
hacking - the art of exploitation -- начни хотя бы с этого, другие книги по этой тематике тебе вынесут нахуй мозг и ты их вряд ли осилишь, по крайней мере на первых порах.
Быстрый парсинг http запросов на сях 153 1792091
Вечер добрый. Как можно сделать быстрый (желательно 100kRPS +) , http/1.1 conditionally compliant парсер, чтобы это было ещё и не больно, на чистых сях?
Как можно сделать конечный автомат, чтобы он работал быстро, но не выглядел убого в коде?
154 1792230
image.png113 Кб, 1253x664
155 1793248
Чего приуныли?
Я вот интерпретатор Си пилю >>1785454 →
Намедни научил его массивам. В первом приближении это выглядит как-то так. На github пока не выливал - не готово для публичного показа.
156 1793276
>>793248
молодец, иди поцелую, пупсик
изображение.png3 Мб, 1951x2560
157 1793360
>>792091

ЭТО КЛАССИКА, ЭТО, БЛЯДЬ, ЗНАТЬ НАДО
158 1793641
Ребят, можно ли пройтись по структуре, как по массиву? Или каким-либо ещё способом.

Ситуация такая: есть много разрозненных переменных разных типов и надо бы считать из них значения.

Хрен знает как выкрутиться.
159 1793648
>>793641
Нет. Каноничный способ: сделай хексдамп всего куска памяти.
160 1793652
>>793648

>сделай хексдамп всего куска памяти


Что это?

Хотя бы как правильно называется, чтобы нагуглить примеры?
161 1793680
>>793641
union {
mystruct s;
float[] arr};
Не?
162 1793682
>>793360
Он же просил неубого :)

>>793641
Поясни подробнее - подскажу. Способы однозначно есть.
Протокол парсишь?
163 1793705
>>793641
Делаешь массив/список/дерево структур, описывающих имена, типы переменных и их расположение в памяти. Делаешь функции получения и задания значений в зависимости от типа и свойств переменных (количество бит, есть ли знак и тп). При любой нетривиальной задаче дерево должно создаваться автоматом на основе конфиг файла, чтобы не править код при смене протокола, а создание конфига из тз автоматизировать насколько возможно.
164 1793707
>>793641
offsetof()
165 1793885
>>793705

>берешь питон/шарп/любое другое скриптоговно


Сократил твой словесный понос.
166 1794030
>>793885

>кококукареку покпок


Простите, петушиный не понимаю.
167 1794040
>>793248
камон, cling же есть
https://github.com/root-project/cling
168 1794042
>>793652
емнип, core dump.
Делаешь дамп памяти с помощью `gcore <pid>` (поставляется вместе с gdb)
Потом, если нужно, делаешь `readelf --segments <полученный после gcore файлик>`, и теперь ты знаешь, где в файлике лежит адрес памяти по указателю.
Если у тебя не POSIX -- выйдите отсюда пожалуйста
169 1794045
>>794030
а так?
Раст -- это игрушечный язык, который не имеет применений в реальной жизни
170 1794066
>>794045
В руках его не держал, я сишник крестовик, имею дело с гигантскими авиационными протоколами для can aerospace и arinc 429 и знаю о чем говорю. На питоне скриптики для кодогенерациии иногда пишу, тут ты прав
171 1794068
И оффсетами вы не отделаетесь, когда есть битовые поля, смесь биг литл эндиан, фиксед поинт данные и тд. Тут вам не лаба номер 1.
172 1794102
>>794040

>cling же есть


Слава Богу! Теперь хоть буду знать с кем можно сравнить, если у меня получится завершить.
173 1794190
Привет всем, Си-господа. Вопрос к линуксоидам - как Линукс понимает какие драйвера нужно загружать при буте системы? Вот у меня есть произвольная сетевая карта, произвольная встроенная видеокарта, тачпад, клава и т.д. Допустим, я накатываю дистр для нубасов типа Убунту или Манжаро. После установки - хуяк, все работает, есть вай-фай, работает клава ну и прочая периферия. Как Линукс определяет во время установки системы как модули ядра надо загружать, чтобы все девайсы работали? Заранее спасибо.
174 1794223
>>794190
девайсы тянут с собой информацию о себе
image.png84 Кб, 1024x945
175 1794291
>>794190

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



https://en.wikipedia.org/wiki/PCI_configuration_space
176 1794749
Скипаю большую часть заданий Праты т.к. всё кажется однотипным бесполезным не имеющим практической ценности говном, но при этом общий алгоритм как задание нужно реализовывать в голове простраиваю. Это Даннинг — Крюгер или я прав?
177 1794753
>>794749
Прав, синтетические задания из книжек по программированию нахрен не нужны.

Для знания языка полезнее писать реальные программы, для общих концепций лучше уж литкод тогда решать
178 1795061
>>794749

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


Дьявол в деталях.

> Скипаю большую часть заданий Праты


Не будешь писать код - не научишься ни писать код, ни отлаживать его.
179 1795068
>>795061

>Дьявол в деталях.


Не спорю, но если у меня задание вида прочитай файл и подсчитай количество указанных символов в нём то уже совсем детсад уровня совмести код из задания 6 параграфов назад с кодом 3 задания назад.
>>795061

>Не будешь писать код - не научишься ни писать код, ни отлаживать его.


Вот я и хочу поскорее проспидранить книгу и сразу взяться за какой-нибудь серьёзный проект с гуглением и энергетиками.
180 1795070
>>795068
Зачем тебе тогда вообще Прата? Давай сразу гугли.
181 1795076
>>795070
Потому что как база он охуенен и что гуглить если не знаешь чего гуглить? Проблема для меня в том, что после раздела упражнений с массивами и указателями у меня устойчивое ощущение того, что я занимаюсь хуетой.
182 1795092
>>795068

> подсчитай количество указанных символов в нём


Задание со звездочкой: открой файл с каким-нибудь фильмом и посчитай в нем количество '\x1a' на винде. С двумя звездочками: то же, но файл на флешке, и флешку во время работы программы ты выдернешь.
183 1795096
>>795092
А что я выиграю если займусь? Какие-нибудь ограничения введёшь? На винде т.к. доступ к стику будет сложнее чем на никсе?
sage 184 1795108
>>795096
Ничего не выиграешь, забудь.
185 1795269
>>794045
Ждём когда допилят V. Нормальная обёртка над С для людей с оверхедом в ~3%, а не ржавый высер от Мозилы.
15900395662310.jpg15 Кб, 414x406
186 1795277
Как произвести точный поиск в строке?

Допустим, надо различить m1 и m11 (или m11 и m111, напрмиер). Ведь при поиске в m11 входит m1.
187 1795282
>>795277
Посимвольно парси строку. Или регулярки. Ты в С-треде или жс?
188 1795285
>>795277
Проверяй следующий символ после найденного, является ли он разделителем.
189 1795310
>>795282

>Или регулярки.


Регулярки? В Си?
Ну на хуй.
мимо пхп-макака
190 1795351
>>795092
>>795108
Кто я такой чтобы не принять брошенный вызов?
https://pastebin.com/Wna2cYm9
191 1795506
>>795277
конечный автомат напиши
192 1795618
>>795285
Наверно подойдёт.

https://ideone.com/as9J6d

Нам известна длина искомой строки.

Надо проверить

>следующий символ после найденного, является ли он разделителем



Символ - "

Допустим, получим с помощью strstr в какой части строки нашли совпадение. С помощью известной длины + 1 символ можно переместиться по строке, наверняка.

Подсобите допилить указатель, плез.
193 1795625
>>795618
if ((p=strstr("bana","banana")) && p[4]=='n') printf("banan\n");
else printf("dunno\n");
sage 194 1795656
>>795351
Не самая красивая логика с feof(). Она сейчас работает, но если бы у тебя не было условия в строке 30 (если бы ты считал все символы, а не только конкретный), то EOF тоже посчитался бы. Алсо, тут лучше подошел бы fread(), потому что у этого кода примерно 4 вызова функций на символ (лок/чтение/анлок у fgetc(), плюс feof()), а fread() размазал бы эти вызовы на один буфер из несколько кб данных, тем самым чтение ускорилось бы весьма существенно.
195 1795684
>>795656
Полезная инфа, спасибо. Перепишу в свободное время.
196 1795870
>>788563

> пить смузи, растить жиденькую бородку, быть на хайпчике, писать на жопаскрипт, обсуждать модные и "ПРАГРИССССИВНЫЭ" ФРЭЙМВОРКИ



Пиздец, нахуй так жить?

мимомобильщик, который "ебает" всякие железки (не ардуино) все свое свободное время и которому это заходит пиздец как на ура, больше чем мобайл
197 1795873
>>788565
Респект тебе, дядька.
198 1795877
>>788035
Кстати, я пока занимаюсь этим как увлечением. Хотя рассматриваю сделать это основным делом (я уже в сфере 3.5 года вчерашний штудэнт, работать попиздовал еще в универе если че, епта).

Просто реальность такова, что не одними деньгами, анонче. Есть ещё то, что у тебя в мозгу и душе.
199 1795947
https://onlinegdb.com/Hyr_9-0mP

Чому не хочет выводить символы после ':' ?
200 1795968
>>795870
Молодец возьми с полки пирожок лол
201 1796053
>>795947
Там две ошибки.
Во первых, sizeof(char) это один байт. Ты выделяешь один байт и пишешь в него строку.
Во вторых, sizeof(temp) вернёт тебе 4 или 8 - в зависимости от того, 32 или 64 бита приложене.

Используй хотя бы strlen(bar) чтобы посчитать размер строки.
202 1796057
>>796053

>Используй хотя бы strlen(bar) чтобы посчитать размер строки.


И не забудь прибавить к нему единицу, чтобы для терминального '\0' было место. А так твоя программа не только неправильно работает, но разрушает память.
203 1796131
>>796053

>Там две ошибки.


>>796057

>А так твоя программа не только неправильно работает, но разрушает память.


Что?

Я думаю, что в строке спец-символы. Надо их правильно экранировать. Только вот не соображу как.
204 1796178
>>796131
Не копротивляйся. Спецсимволы ты правильно экранировал.
Перечитай >>796053 и >>796057
Там исчерпывающий ответ.
205 1796195
>>796131
Ты выделяешь память для пустой строки - массив char из одного байта, в аккурат под терминальный ноль.

В этот массив функция sprintf пишет четыре байта и тем самым разрушает память.

Чтобы понять где ты накосячил, выведи на экране значения sizeof(char), sizeof(char*) и sizeof(bar) - всё поймёшь, если не дурак.
206 1796225
>>796178
>>796195
Я Вас услышал. Спасибо.
207 1796290
>>795968
Спасибо, анон :3
208 1796757
Вопрос от начинающего программиста: хочу сделать карту со связанными локациями, какой класс лучше использовать?

Подробнее: есть карта с локациями типа CHAR, каждая локация связана с несколькими соседними, в результате образуя сеть связей между этими точками. При этом сама связь может иметь одно из 4х свойств: автодорога, поезд, пароход, авиа.
Например: локация Берлин (точка Б) связана с Лондоном (Л) по морскому пути, с Парижем (П) железнодорожным, с Веной (В) автомобильным, а с Москвой (М) авиасообщением. Вот такая карта должна получиться к примеру. Важно, что связь не каждый с каждым на карте, а только сосед с соседом и поэтому чтобы добраться из точки А в точку С нужно преодолеть ряд других точек.

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

Опыт в создании приложений небольшой, но имеется, поэтому основы я знаю, а вот со связанными списками особого опыта нет, кроме совсем уж простых приложений. Данная карта важна, т.к. на основе неё дальше всё и будет строиться и вот с "дальше" у меня проблем нет. А вот с картой есть :)

Если у кого есть какие идеи или опыт создания подобных карт, то буду очень рад услышать совет.
209 1796789
>>796757
Гугли a-star поиск по графу.
image.png21 Кб, 639x424
210 1796893
>>796757
Сделай структуру и назови её route_t
Внутри структуры определи два указателя на локации и поле, определяющее тип транспорта. Такой структурой ты опишешь любой маршрут. А если чего нехватает, то добавишь в эту структуру. Например, время в пути, цена билета и т.д.

Сделай структуру локации
Внутри структуры имя локации, количество активных маршрутов и массив из, например, 10 указателей на структуры маршрутов. Можно в локации даже не хранить количество маршрутов, а считать количество ненулевых указателей в массиве.

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

Возможно на картинке пример скомпилится сразу - не проверял его.

.
.
211 1796946
>>796757

>связь может иметь одно из 4х свойств: автодорога, поезд, пароход, авиа.


А домики будут набигать?
212 1796975
>>796757

> одно из 4х свойств


Вот хорошо, можно в младшие биты указателя засунуть... Кхе-хе. Гм, о чем это я?
213 1797015
>>796975

> Гм, о чем это я?


Деды так делали, а затем память стала дешёвая и каналы передачи данных быстре.
214 1797103
>>797015

>а затем память стала дешёвая и каналы передачи данных быстре.


а программисты стали очень тупыми.

Базы данных на си не пишут.
215 1797181
>>797103

>Базы данных на си не пишут


Чегобля?
216 1797206
>>797103
почти все существующие бд написаны на сях, маня
217 1797214
>>797206
>>797181

Наверное, он спутал язык программирования с языком запросов.
218 1797245
в стандарте есть, что первый элемент структуры начинается с её 0 смещения (если кастануть в char+/void+). так что можно лепить заголовки разным структурам. но что насчёт второго элемента? если это, например массив разной длины (у разных структур разный, с описанием в заголовке) + разносортные данные после. можно ли полагаться на то, что они по одному адресу будут? или про это ничего не сказано.
219 1797310
да друк много наверное людей зашло такой-то эффективный спам
220 1797346
>>797245
Чево?

struct { char a, b; } s1;
struct { char a; int b; } s2;
s1.b может быть по смещению 1, s2.b --по смещению 4.
221 1797409
>>797346
#pragma pack(1)
Или чота такое.
222 1797430
>>797346
да ты что, как интересно.
223 1797432
struct { char a; int b[2] ... } s1;
struct { char a; int b[123] ... } s2;

вот о чём я говорю. что говорит по этому поводу стандарт?
sage 224 1797434
>>797432
Говорит, что структуры несовместимы. Они совместимы, если одна вложена в другую, или если они почленно совпадают (включая имена).
225 1797435
>>797434
ну, тогда static_assrt() по старинке и в путь.
226 1797441
>>797434
А как же VLA?
227 1797468
>>797432
Здесь b будут по одному смещению. Если нет--компилятор выкидывай.
228 1797474
>>797468
экзистенциально да, будут. но дело в том, что C - это не просто язык описания естества, но метафизики.
229 1797477
>>786992 (OP)
Чики, двощ. Порекомендуй IDE под сишечьку.
230 1797481
231 1797484
в тему метафизики https://stackoverflow.com/a/16482997 - в комментариях
232 1797505
image.png20 Кб, 956x248
233 1797584
234 1797585
>>797477

тут есть несколько вариантов https://alternativeto.net/software/codeblocks/
235 1797794
>>797585
я вот тоже раньше думал, типа, вим-емакс - это сложно или старо-ограничено; сидел на кодблоксе.

я со смехом плюю себе в лицо. хотел бы я вам посоветовать сходу переходить на _нормальные_ _редакторы_, но кажется, нужно поиметь опыт чтобы понять разницу.
236 1797817
>>797477
vscode + плагинсы
320px-Quicksort-diagram.svg.png23 Кб, 320x640
237 1797896
Поясните за qucksort нашёл это на вики.

4-ка - опорный элемент.

И вот я нихуя не понимаю какого хуя 4 не меняется местами с 7-кой.

Смотрите: 3 < 4 это истинно. Увеличиваем индекс на 1
7 > 4 Следовательно меняем местами 7 и 4. 7-ка уходит в конец, а 4-ка на место с индексом 1.

Какого хуя они тут как-то сдвигают 4-ку постоянно.
238 1797898
>>797896
Я имею в виду второй шаг сверху. 4-ка должна сдвинуться на место 7-ки согласно алогоритму, а не на предпоследнее. Какие-то манярасчёты.
Unbenannt5.PNG14 Кб, 961x499
239 1797905
>>797898
>>797896
Вот ещё скрин как этот же массив обработан моей программой на алгоритме быстрой сортировке.

Принт делится на 2 группы
1. Массив целиком
2. Рассматривый в данный момент подмассив.

Верхняя строчка весь массив, а нижняя подмассив в рекурссии . Надеюсь вы понели.

И вот программа сортирует правильно, но не так как на этом манярисунке из вики.
240 1797919
>>796893
чтo за язык на пике?
241 1797927
242 1797934
>>797927
чтo значат звёдoчки?
243 1797947
>>797934
указатели же
244 1797950
>>797934
Звёздочка в имени признак авторитета. Цифры в квадратных скобках — количество ходок по оффсету в условных единицах.
245 1797961
>>797947
тьфу блин, привык видеть их видеть без прoбелoв. спасибo анoн пoнял
246 1797980
>>796893
нихуя твoй кoд не мoгу пoнять. хoтя си хoрoшo знаю дoвoльнo
247 1797986
>>797980
Ты плохо знаешь си. На картинке довольно простой код, только отформатирован будто ему за табуляции платят
248 1797998
>>797986
не пoнимаю в первoй структуре куда ссылаются from и to
249 1798010
>>797998
ну это типа указатель from типа структура локация.

реально надо подучить структуры и союзы в сишечке.
250 1798043
>>797998

Если я правильно понимаю, то где-то выше в исходнике была создана структура location , что при этом создало новый тип под названием "struct location".
Далее получается так, что структура route состоит из 3 элементов: первые 2 элемента - это указатели from и to (оба являются указателями на тип struct location), 3 элемент - это enum.

Прошу поправить меня, если я неверно расписал.
251 1798045
>>798043

>то несколькими строками ниже создаётся структура location



самофикс
252 1798067
>>798043
в этих структурах даже oпытный челoвек запутаться мoжет oсoбеннo кoгда кoд не твoй.

алсo зачем oн указатели юзает? их нужнo юзать на oпределённые случае, здесь я такoгo не вижу.

сам юзаю в си указатели кoгда динамические массивы сoздаю
253 1798105
ни с кем не буду судиться за рекламу чёрнoгo мягкoгo химашевскoгo плана. слеплен с любoвью как шoкoлад нестле упакoван в гoрах увезён на oсле
254 1798451
>>798067

>алсo зачем oн указатели юзает?


Поотому что помнит компьютеры с 16 битной шиной адреса.
255 1798452
>>798043
Всё правильно.
А если добавить в каждую структуру указатель на next, то получится однсвязный список.
А если добавить ещё указатель на prev, то получится двусвязный список.
256 1798453
>>798043

>при этом создало новый тип под названием "struct location"


Нет. Имя новых типов loation_t и route_t
257 1798476
>>798105
гуф это ыт?
258 1798499
>>796789
>>796893
Спасибо за идеи и прототип кода! У самого тоже появилась похожая идея со структурой, у которой внутри будет список указателей на другие структуры.

Буду пробовать все идеи и о результатах потом напишу :)
259 1798503
>>798453

Пока не соглашусь с этим (но мне надо будет снова прочитать соответствующую инфу).
Если я правильно помню, то typdef не создаёт новых типов. typedef лишь позволяет создать, скажем так "ярлык", чтобы использовать именно его, а не писать каждый раз словосочетание "struct location", "struct route".
260 1798545
Анон, в чем разница между прошивкой и драйвером? Типа, драйвер юзает API ядра операционки для взаимодействия с девайсом, а прошивка работает на голом железе и хранится в ROM или флэш памяти, да? Или есть еще принципиальные различия?
261 1798613
>>798545
Драйвер может быть частью прошивки.
Например, когда ты перешиваешь смартфон на Андроиде, то прошивка включает в себя всё - я идро, и драйвера, и сам Андроид, и приложения.
262 1798622
>>798503
typedef создаёт новый тип данных. Впрочем компилятору неважно что внутри будет. Для него метка будет означать какой-то объявленный тип и на этом все.
Ты можешь сделать typedef struct huy huy_type;
И структуру определить где-то в другом месте. В принципе компилятор будет знать о таком типе и ты сможешь его использовать без объявленной структуры, но что оно внутри за вундервафля - без определения не узнаешь.
Короче говоря ты можешь юзать ярлык без определения оригинала, что в принципе можно считать за самодостаточность такого нового созданного типа.
263 1798665
Аноны, посоветуйте материала по указателям. Иногда путаюсь а мои функции в один момент то хавают простой указатель то требуют разыменовывать, из-за этого постоянно путаюсь.
264 1798691
>>791021
Понятно. А ещё в каких больницах ты бывал?
265 1798797
>>798665
Ш А П К А
266 1798808
Сап, сяч. А как лучше прогонять массив чего-либо - оффсетом (т.е. a[offset] или ptr(a+offset) ) или же новым адресом, т.е. pa = a?
267 1798828
>>791019

>хайтек


>сделать крутого робота, чтобы собирал тупое говно


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


Найс рофлтек.
268 1798898
>>798808
Первые два способа всегда были эквивалентны. а++ мог быть эффективнее, но современные кунпеляторы умеют преобразовывать одно в другое по своим соображениям.
269 1798917
>>798622

>typedef создаёт новый тип данных



Уверен абсолютно, что ты не прав в этом. Я прочитал 3 абзац "Semantics" главы 6.7.8 ISO/IEC 9899-2011 и 9899-2018; вот цитата оттуда A typedef declaration
does not introduce a new type
, only a synonym for the type so specifed.
270 1799043
>>798917
Да, так и есть. Удобно устанавливать синонимы, привожу как пример, на структурные типы, дабы не писать "struct $(name)", а например "$(name)_t". Выглядит компактнее, лаконичнее (?), "современно и молодёжно".
271 1799046
Допо>>799043
Лаконичность помечена со знаком вопроса, т.к это острый вопрос. Решайте сами, как будете писать. Я высказался, как думаю на текущий момент.
sage 272 1799076
>>798808
x = *ptr; ptr++; самое эффективное, даже с современными умными компиляторами. Из-за алиасинга остальные варианты могут потребовать вычисления адреса каждый раз, тогда как с инкрементом указателя никаких подводных не может быть в принципе.
sage 273 1799215
>>799046
Линус ругался на такое, дескать, слово struct должно напоминать, что тип представляет что-то большое.
274 1799253
>>799215

>Линус


А что, он дохуя авторитет? Ну вот серьёзно.
sage 275 1799266
>>799253
Как ни странно, да
276 1799272
>>799253
Ну как сказать... Создатель ныне самого популярного ядра ОС. Защита от долбоебов: рофл про 3% на десктопе неактуален, ибо Линукс есть везде - в эмбедщине, роботах, интернете вещей, серверах, роутерах, телефонах (ведроид), спутниках и т.п., оверолл больше компьютеров в мире крутятся на Линуксе, нежели на какой-либо другой ОС.
Ну и создатель гита, которым пользуются 90% девелоперов по всему миру. Ни разу не авторитет, да.
277 1799305
>>799266
>>799272

Ну не знаю. Мне он как человек не нравится. Да и закапавыался я с головой в код ядра Linux. И в Windows DDK тоже закапывался. Нет в ядре Linux (почти нет) таких мест, коорыми можно восхищаться. Между тем, внимательное изучение заголовочных файлов из DDK сразу даёт понять разницу в качестве ядер NT и Linux.

Насчёт git - ну да, удобно. И возможностей поболе чем у svn, но это как бы не извиняет Торвальдса, за его скверный характер.
[
278 1799313
>>799305

>Между тем, внимательное изучение заголовочных файлов из DDK сразу даёт понять разницу в качестве ядер NT и Linux.



Это звучит интересно.
Можешь запостить небольшой сравнительный example?
279 1799323
>>799305
по DDK ты не можешь в полной мере оценить код всего ядра, лолшто. Закрытый софт есть закрытый софт, ничего не поделаешь.

То, что у него скверный характер, это всем известно, но это не отменяет того факта, что у него есть определенный авторитет.
280 1799344
>>799313

>Можешь запостить небольшой сравнительный example?



Увы, я давно закапывался туда - в году эдак 2003. Чего там говорить если уже лет как десять, наверное, с момента переименования DDK в WDK.

Со списками в DDK/WDK очень красиво сделано. Множество приёмов, которые с точки зрения начинающего программиста можно назвать "хакерские".

Ах да, что особенно нравится в ядре Windows это вот эта штука - https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_irp
Для неподготовленного глаза выглядит конечно не очень, но если понять как это работает, то видно красоту архитектуры.

Лучше можно конечно спроектировать, но это уже другой разговор.
281 1799379
>>799344

Там в описании указано "The IRP structure is a partially opaque structure..."
Что они имеют в виду под "partially opaque structure"?
282 1799395
>>799379
https://en.wikipedia.org/wiki/Opaque_data_type

Кстати, в чём красота, то там работа с драйверами "слоями", ты можешь, например, написать драйвер, который вклинится между ядром и другим доайвером и заставить работать этот драйвер в качестве фильтра. Ну вот например ты можешь реализовать сквозное шифрование между драйвером устройства и ядром.
sage 283 1799416
>>799305
Качество ядра нт вызывает сомнения, как бы красиво ни выглядели его заголовки..
284 1799422
>>799416
Обосновать своё утверждение можешь?
285 1799437
>>799305
Не согласен, в ядре Линукса есть много красивых решений. Умудрились даже высрать ООП дизайн в языке без ООП, не притягивая блоатед плюсы. Та же реализация макроса container_of - чистый и красивый хакинг. И такого много, на самом деле. За 4 года разработки драйверов на Линукс, мне пришлось прочесть достаточно кода в ядре.
286 1799442
>>799305
У него прекрасный, замечательный характер. Нет ничего постыдного в том чтобы показывать фак нвидии или хуесосить тех кто шлет в ядро говнокод.
287 1799458
>>799215
Не об этом речь была, но ладно...
288 1799459
>>799437

>Та же реализация макроса container_of



Можешь започтить этот кусочек кода или кинуть ссылку на него?
image.png34 Кб, 811x148
289 1799496
>>799459
Пикрил
В целом, это ищется в гугле за наносекунду, поэтому мог бы и сам, но ладно.

Примечательно, что довольно большая часть ядра Линукса - это не ANSI Си, а разномастные хаки, в т.ч. основанные на расширениях компилятора GCC, выжимающие максимум производительности.
290 1799536
>>799442

>Нет ничего постыдного в том чтобы показывать фак нвидии



> Показывать средний палец компании, которая единственная производит норм видюхи с норм драйверами, втч под линух, где у единственных всё из коробки без бубнов, и благоговеть от лизонькиных-писенькиных красных поделий с кривыми, шо проприетарными, шо швабодными, шо под линукс, шо под шиндошс дровами и единственное достоинство которых - греть ЧСВ амудебилов вроде сралкаша и кулича, ммммммм.

291 1799539
>>799323

>по DDK ты не можешь в полной мере оценить код всего ядра, лолшто. Закрытый софт есть закрытый софт, ничего не поделаешь.



По торрентам еще с каких-то диких нулевых гуляет код вынь2к. Эти исходы чуть ли не на дисках на пиратских развалах продавали, емнип.
292 1799544
>>799496

>Примечательно, что довольно большая часть ядра Линукса - это не ANSI Си, а разномастные хаки, в т.ч. основанные на расширениях компилятора GCC, выжимающие максимум производительности.



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

И местные байтолюбы считают это чем-то хорошим, даже великолепным?

Ну ну.
293 1799552
>>799544

>ногострельным языком



Какой же язык, который ты считаешь не ногострельным, следует использовать, по твоему мнению, для написания ядер ОС?
294 1799568
>>799552
Только рОст.
295 1799610
>>799544
Ты не напишешь МАКСИМАЛЬНО ЭФФЕКТИВНУЮ операционную систему на языке без UB. Даже высеры раста вынуждены абузить unsafe (чекай сорц redox), и то это будет медленнее так или иначе. Почему так - на дваче не объяснить, пройди курс теории вычислений в нормальном, не СНГшном, ВУЗе, и ты поймешь о чем я говорю.
296 1799632
>>799568

>Только рОст


смешно, вопросов больше не имею
297 1799647
>>799552
В принципе, С++ можно. Дело не столько в языке, сколько в дизайне системы и используемых алгоритмах. Так-то С++ обратно совместим с Си. Особливо если во всю пользовать extern "C" . Нюансы конечно есть, но их не так много.
298 1799649
>>799552
Паскаль легко может быть использован.
Но это не совсем правильно.
Правильно реализовать ядро в виде множества сервисов, которые обмениваются между собой сообщениями. И тогда для написания ядра ОС сгодится любой язык программирования. Даже скриптовый.
299 1799667
>>799647
обратная совместимость с си это самое некрасивое и костыльное место всего дизайна крестов как языка. Разве что совсем дурак будет этим заниматься
300 1799672
>>799667
Чего бы тогда тебе на C# не переползти? Это как С++, только без указателей.
301 1799698
>>799672
При чем здесь указатели и сися? Болен чем-то дружок?
302 1799705
>>799698
При том, что ты или кто-то другой сделал громкое заявление, и не подкрепил его доказательствами или хотя бы примерами.

Кстати, поговаривают что указатели в C# таки есть, но только в unsafe режиме.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types
303 1799748
Какой ide пользуетесь? Или Vim?
sage 304 1799803
>>799437

> Та же реализация макроса container_of - чистый и красивый хакин


Это та же самая, которая в винде CONTAINING_RECORD, и которую изобрели примерно вместе с сишкой задолго до линусов?
305 1799811
>>799748
Нотепад++
306 1799818
Нормальная ли это практика юзать функцию которая возвращает значение но не назначать его никуда? Или лучше юзать какую-нибудь мусорную переменную/другую функцию?
307 1799820
>>799818

>юзать функцию которая возвращает значение


Ну фнкция должна только успех тру или фалсе возвращать, а значения через параметр
308 1799825
>>799748
Зависит от проекта (-ов) и текущих задач.
sage 309 1799842
>>799818
Да, нормальная, но чтобы ты страдал в C2x притащили/притащат [[nodiscard]], дебилы понатыкают их везде, и компилятор будет ругаться.
310 1799866
>>799649

>Правильно реализовать ядро в виде множества сервисов, которые обмениваются между собой сообщениями



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

Но чистые сообщения не работают, драйвера приходится монолитить.
311 1799887
>>799866

>Но чистые сообщения не работают, драйвера приходится монолитить.


Это распространённое заблуждение. Но я не буду тебя переубеждать. Сегодня точно не буду.
312 1800369
>>799536
Дурачок, вот если бы ей фак не показали, то и не делала бы.
313 1800387
>>799887
Но он прав, да это и понятно - "просто сообщения" в вакууме не бывают, это накладные расходы.
314 1800392
>>799705
Paint.net так работает, помню как его хаяли за то, что его пихали как пример что на .net можно писать быстрые приложения, обрабатывающие массивы из миллионов пикселей в секунду, а на практике там такое жульничество.
315 1800396
>>799818
Зааисит от того что делает функция, иногда игнор говорит о неучтенной ошибке.
316 1800398
>>799748
Vs codium для всего.
317 1800438
>>800387
Ты тоже заблуждаешься.
318 1800439
>>799818
Нормально.
printf возвращает число выведенных байт. Ты часто пользуешься результатом printf?
319 1800759
>>800438
Нет. Все абстракции все равно на низком уровне требуют имплементацию, ABI.
320 1800763
>>800439

> 2k20


> ты часто пользуешься printf


Нет.
321 1800794
>>800759
И тем не менее ты заблуждаешься. Те же критические секции и спинлоки, которых в ядре немало, это большее зло, чем сообщения.

Вот без этого вот можно обойтись, если реализовывать через сообщения - https://www.ibm.com/developerworks/ru/library/l-linux-synchronization/index.html
322 1800796
>>798917
Однохуйственно.
Ты создаёшь новую запись в таблице символов при компиляции этим. Что синоним, что линк - запись появилась, компилятор работает как с новым типом, хоть и указывающим на другой составной тип. Удачи читать стандарты которые не работают ИРЛ.
323 1800805
>>800794
Сообщения - это циклический буффер, в который пользователи могут писать и читать. А значит, те же блокировки.
1514800934903.png10 Кб, 414x266
324 1800814
>>800796
Nahooy путешествуй.
325 1800818
>>800814
Ты дебил, уйди. И почитай что такое translation unit.
326 1800821
>>800818

>МААМ Я ТРАЛЮ ДВАЧ, ПОЧЕМУ ОНИ НЕ ТРАЛЯТСЯ


Нет ты.
327 1800825
>>800805
Подмечу, что можно сделать lockless очередь. Но тогда часть перфа потеряется в другом месте. Хотя и не так сильно. Apple использует микроядро, и вроде не бегут с него. Впрочем, драйвера у них работают внутри отдельного сервиса в котором очередей нет.
328 1800841
>>800825
lockless вроде бы бывает только если ровно один записывает и один читает, а с сообщениями такого не будет.
329 1800860
>>800841
В гугле хватает multiple producer, single consumer lockless очередей.
Проблема ещё в валидации сообщений. Кинул неясный сервис другому сообщение, а оно и поставило раком всю систему. Рано или поздно выйдет, что система только тем и занимается что валидирует сообщения, да и дергает атомарные инструкции,которые инвалидируют весьма часто L1 кэш в seq_cst, в то время как монолитное ядро лишь локается на спинлоках/мьютексах/rcu, и просто работает.
330 1800876
>>800860
А, ну да, там же еще CAS в железе нужен.

> As an example, this code almost certainly needs a "memory" clobber. Not to ensure the correct functioning of cmpxchg16b, but because the goal is probably to sync threads, which means you want all registers flushed before notifying the other thread.


Лол, вся суть, пихать мемори барьер, к инструкции которая и так дохуя тактов жрет, вот тебе и лок фри.
331 1800903
>>800794
Обмен информацией между процессорами требует (затратной) синхронизации, даже если это обозвать обменом сообщениями.
332 1800908
>>800876
Вот и выходит несостоятельность делать high performance ядро ОС на микроядре.
333 1800921
>>800876
Мне кажется, что зафлашить store queue намного быстрее, чем пару тройку раз сменить контекст на блокировках.
334 1800950
>>800908
именно поэтому все RTOS имеют монолитное ядро. Хз че тут шизоиды срут про микроядро, из него максимум не выжмешь какне усерайся
335 1800970
>>797477
vim с ale
336 1800998
>>800818
Он тебе так-то ясно продемонстрировал, что нового типа не получилось, только синоним, какого хуя ты жопой начал вилять?
337 1801004
>>800805

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



В принципе вот тут и закопан корень заблуждений. Я говоро о синхронных сообщениях, когдв блокируется передатчик сообщения, если не готова принимающаю сторона, и наоборот - приёмник сообщений блокируются пока кто-то не пошёл ему сообщение.
338 1801006
>>800950

>все RTOS имеют монолитное ядро


Чушь.
339 1801029
>>801004
Ахуенно, а теперь расскажи как будет работать твоя "блокировка" когда двое посылают сообщение одному и тому же.
340 1801046
>>801029

>Ахуенно, а теперь расскажи как будет работать твоя "блокировка" когда двое посылают сообщение одному и тому же.


Если приёмник не готов, блокируются оба передатчика. Иначе сообшение посылает тот, у кого выше приоритет, второй
посылающий блокируется средствами микроядра.
341 1801051
>>801046

>второй посылающий блокируется средствами микроядра.


Давай, рассказывай как.
342 1801066
>>801006
ну да, куда мне до тебя, с моими-то четырьмя годами опыта разработки софта под RTOS для спутников :-)
343 1801073
>>801051
Посмотри в исходниках - https://github.com/l4ka/pistachio
344 1801078
>>801066
Предлагаешь "писюнами меряться"?
345 1801411
Народ, стоит ли читать K&R если полностью прошёл Прата? И чем вообще теперь заниматься? Даже не представляю.
346 1801421
>>801411
Хочешь научиться программировать на чем-то - пиши код, не читай книги. Книги полезны как большой справочник.
347 1801422
>>801421
Вот я и думаю - Прата всю доступную теорию даёт или там чего-то нет? А что вообще писать можешь посоветовать? Идей почти нет.
348 1801485
>>801422

>Идей почти нет.


Иди в МакДак
349 1801495
>>801485
Так и знал что писать сюда было ошибкой.
350 1801524
>>801411
Читай исходник пинуса, бсд или иной софт, который прожил не меньше десятка лет и был написан коллективом
351 1801539
>>801524
Опять троллим тупостью? Как можно человеку только осилившему прату советовать читать опенсорс говно вроде пинукса? Мало того что он нихуя не поймет, ты ему еще и советуешь вдохновляться дырявым стилем ленивых хуесосов вроде самого пинуса
352 1801545
>>801495
Начинать вкатываться в айти вот что было ошибкой.
353 1801608
>>801539
А что читать/кодить в таком случае?
>>801545
Но ты ведь всё ещё здесь, а не в JS треде.
354 1801634
>>801608
Вопрос "что кодить" просто вымораживает.
Не знаешь что писать - бери любую задачу со списками, затем с бинарным деревом, затем с небинарным деревом.
Затем приходи сюда, отчитывайся и получишь новое задание. А пока не сделаешь - не приходи.
355 1801640
>>801608
Так зачем тебе яп если ты не знаешь что кодить?
У меня вот идей и задач на ближайшие год-полтора напридумывано.
356 1801643
>>801608

>читать


CLRS и что-нибудь по архитектуре ЭВМ.

>кодить


>>1801064 →
Ещё, наверное, стоит заглянуть в асмотред (в шапку).
357 1801743
>>801643
Шахматы. Серьёзно?
358 1801753
>>801743
Не осилишь?
359 1801807
>>801743

>Шахматы


Позиционная игоря для пидоров, там никакого ИИ и в помине нет. Бери книжку эндшпилями и прочей залупой для задротов и вперед.
мимо
360 1801822
>>801807
Чел, ты..
Там самое интересное байтоебство с битфилдами.
361 1801870
>>801822

>Там самое интересное байтоебство с битфилдами


Вкусовщина. Приятней когда игра интеллектуальная, с элементами случайности, какой нибудь Бридж или Преф.
362 1801872
>>801822

>байтоебство с битфилдами


З.ы. чому байтоебишь а не подключишь нормальную БД?
363 1801874
>>801822
Только битфилды к байтоёбству не относятся
364 1801881
>>801874
Битборды, конечно.
еще спиздани что битоебство к байтоебству не относится
365 1802019
>>801539
Оче Толсто
366 1802039
>>801753

>Не осилишь?


Не знаю, не пробовал.
367 1802172
>>802019
Да не, совсем не толсто.
368 1802180
>>801881
Байтоёбство - движение реальных байтов
Битборды с битфилдами это вообще другое
369 1802186
>>802180
А можно ли на Си пососать битхуй?
370 1802202
>>802186
Зависит от определения
371 1802255
>>802180
Да не, чел. Битборды - это то самое реальное байтоебство реальных байтов.

// Пример получения интересующих нас битбордов:
uint32_t all_bb = bitboards[IDX_ALL_0] | bitboards[IDX_ALL_1]; //Все занятые клетке доски
uint32_t empty_bb = ~all_bb; //Все свободные клетки доски
uint32_t mam_bb = bitboards[IDX_ALL_0] ^ bitboards[IDX_SIM_0]; //Белые дамки

uint32_t up_right_bb = 0 | ((bb & RANK_1357) >> 4 | ((bb & RANK_2468) >> 5 // Ход белых вверх вправо, чётные горизонтали надо сдвигать на пять, нечётные — на четыре:
;
372 1802263
>>802255

>Белые дамки


>


Хуянки, маня.

>uint32_t up_right_bb = 0 | ((bb & RANK_1357) >> 4 | ((bb & RANK_2468) >> 5 //


Это в какой шаражке учат так говнокодить?
373 1802270
>>802263
Ты ошибся тредом, js два блока вниз.
374 1802300
>>802270
Так это у тебя код в стиле веб-макаки.
375 1802302
>>802255

>uint32_t up_right_bb = 0 | ((bb & RANK_1357) >> 4 | ((bb & RANK_2468) >> 5


Чё за хуйня со скобками? И потом ты ещё говоришь, что это не говнокод?
376 1802307
>>802255
Я тебе написал что такое байтоёбство
Битборд это вообще одна из элементарнейших дата структур уже лет 20 как реализуемых на любом из яп
377 1802328
>>802307

> Я тебе написал что такое байтоёбство


Где? Не вижу.

> Битборд это вообще одна из элементарнейших дата структур уже лет 20 как реализуемых на любом из яп


И что? Твое байтоебство тоже.
378 1802330
>>802300
Хуйню несешь . Открой заголовочный файл какой нибудь микрухи там то же самое.
379 1802402
>>802330
Анон, прости, что доебываю тебя, но! Микруха - это сленговое название любой микросхемы, а то что ты имеешь ввиду, имеет называние "микроконтррллер". Или, сокращённо, МК.
380 1802403
>>799552

JavaScript. И точка.

Правда, чтобы разработать ядро на JavaScript необходимо соблюсти ряд определенных условий касаемо разработчиков такого ядра:
1. Необходимо приобрести цистерну клубничного смузи
2. Нужен гироскутер, а ещё лучше - моноколесо
3. Необходимо соблюдать определенный внешний вид разработчиков: штаны с подворотами, жиденькая бородка
4. Разработчики такого ядра обязательно должны быть прогрессивными: говорить 2к20 вместо 2020, говорить о харассменте, гендерной несправедливости, интерсекциональной трансфобии (!это самое главное), обязательно должны быть ярыми поборниками за экологию и фанатами Греты Тунберг, должны ненавидеть мужланов и маскулинность, должны быть ярыми участниками куколд-движения
381 1802423
>>802403
Годно, анон. Криканул с утра, спасибо.
382 1802553
>>802402
Ты прав, в 3 часа ночи такое ляпнул.
383 1802557
>>802403
двачую.
384 1802558
>>802403
ты забыл чтo желательный пoл разрабoтчика тянка или трап
385 1802559
>>802403

>4. Разработчики такого ядра обязательно должны быть прогрессивными: говорить 2к20 вместо 2020, говорить о харассменте, гендерной несправедливости, интерсекциональной трансфобии (!это самое главное), обязательно должны быть ярыми поборниками за экологию и фанатами Греты Тунберг, должны ненавидеть мужланов и маскулинность, должны быть ярыми участниками куколд-движения


Ты говоришь так, словно байтоебов и кразноглазиков данная проблема не коснулась.
На что там заменят слово "слейв" в линупше? ЧЕРНЫЕ ЖИЗНИ ВАЖНЫ!!!!!
Кого пидорнули с должности президента фсф за то, что спизданул про дела Эпштейна чьто-то в духе "Наверняка эти шлюхи сами с удовольствием шли сосать миллиардеру" КАРАУЛ ВИКТИМБЛЭЙМИНГ!!!
386 1802811
>>802559
Анон, так никто и не говорит, что не коснулась.

Просто я с этого всего SJW-мрака стебусь. Абсолютно глупое и бессмысленное движение, которому некоторые хипстеры придают слишком много значения.
387 1802816
>>802811
Такие движения всегда были и будут, как были и будут те, кому нехуй делать.
388 1802861
>>802559
Где ты проблему увидел? Общество исцеляется от предрассудков.
389 1803005
>>802330
Там будет путаница со скобками?
1519371412309.png50 Кб, 734x928
390 1803110
391 1803142
>>803110
Автор этого кода перестраховался и не очень уверен в приоритетах операций. Если редактор подсвечивает парные скобки, то стерпеть такое можно.
sage 392 1803148
>>803142

> Автор этого кода перестраховался


Это не путаница со скобками. Автор этого кода хочет, чтобы любая макака смогла с первого раза правильно прочитать код. А приоритеты сдвиги vs. побитовые знает любой, кто с байтоеблей сталкивался.
393 1803169
>>802403
Неистово проигрываю.

Ещё могу добавить необходимость в 100 новых библиотек для написания ядра.
Обязательно чтобы каждый был основан на любых других библиотеках из npm. И все ставилось через десяток менеджеров пакетов, которые между собой не совместимы.
1529081589577.png84 Кб, 891x993
394 1803210
>>803142
Я честно не пойму с чем ты споришь.
Вот я открыл другую либу, для STM32.
Так и выглядит байтоебство (и так же выглядела копипаста с шахматными битбордами).
395 1803256
>>803110
Тут всё правильно со скобками, а в коде выше как раз типичный говнокод макаки с четырьмя открывающими скобками и двумя закрывающими
396 1803263
>>803256
Боже, какой же ты еблан. Естественно в коде не бывает непарных скобок, он даже не скомпилируется. Очевидно же что это ошибка копипаста примера.
397 1803265
>>803263
Ну, если ты не читаешь, что пишешь перед отправкой, то ты как раз на уровне js-макаки находишься
398 1803269
>>803265
Портфель собирай, ближе к экзамену вам расскажут разницу между ошибкой и опечаткой.
399 1803281
>>787010

>MISRA C - это такие рекомендации, как писать код для хуйни, которая может ебнуть


Удивительно, что такой код вообще пишут на C. У него же репутация языка, где выстрелить в ногу - раз плюнуть. Вроде Ada создавалась для подобных целей. Хотя впрочем, кое-какие важные вещи и на ассемблере пишут. Но проверяют 100 раз, конечно.
400 1803286
>>788531
Дядя, а что ты делаешь тогда на двачах? Тебе в Академии Наук надо сидеть, а не тут.
401 1803302
>>803210
Ебать говнокод. Я б в сто тысяч раз лучше написал бы :)
402 1803303
>>803269
Когда ракета наебнется будешь рассказывать про ошибки и опечатки.
403 1803354
Я правильно понимаю что структуры - это мини ООП для Си?
404 1803370
>>803354
Ооп есть сахар для структур/массивов с адресами функций
405 1803374
>>803370
Что для регуляри программиста значит ...?
406 1803389
>>803354
Структуры это poor man's замыкания.
407 1803395
>>803354
С одной стороны да, делает код чуть попроще для понимания.
С другой стороны если ты пишешь на Си в ООП стиле, как например сделан проект gtk, то кажется ты свихнулся, тихо страдаешь по крестам и лучше уже выбрать их.
sage 408 1803931
>>803281
От логических ошибок тебя никакой язык не застрахует. Нужен опытный программист. И тот же самый опытный программист обычно уже миллион раз обжегся на сишке, и более-менее умеет качественно на ней писать.
409 1804060
>>787708

> Тебе сам стандарт или реализацию.


Сам стандарт: то есть IEEE 754-2019.pdf.
411 1804076
#include <stdio.h>
#include <limits.h>
enum E { e1 = LLONG_MAX, e2 = 1 } e;
int main(void) {
printf("%lu ", sizeof( enum E ));
printf("%lu ", sizeof( e1 ));
printf("%lu\n", sizeof( e2 ));
return 0;
}
gcc 8 8 4
clang 8 8 4
vc 4 4 4
g++ 8 8 8
clang++ 8 8 8
vc++ 4 4 4
413 1804088
>>799416
Поясните, почему Ubuntu/Debian может "повиснуть" и никак не реагировать на клавиатуру (все эти SysRq и проч.), в то время как Windows тоже может "повиснуть", но всегда реагирует на Ctrl+Arl+Del. Это как-то связано с алгоритмом планирования процессов? Какой алгоритм используется в Windows?
414 1804092
>>799748
ST3 + тыща плагинов. В целом полёт норм.
Иногда в настройках (json) отключаешь что-то, но по факту оно не отключается.
416 1804101
>>804088
Я хз про линух, но винда уже с 95 а может и раньше драйвера запускает по сути на виртуальных машинах, чтобы железо не могло вешать систему и была истинная многозадачность. Но bsod опять же все равно происходил.
417 1804104
>>803931
Формальная верификация.
418 1804106
Поясните, почему многие проекты сидят на gcc 4..8, если gcc 4..8 забагованы? Причина перехода на последние версии: как минимум баг-фиксы в кодогенерации.
419 1804110
>>804088

>в то время как Windows тоже может "повиснуть",


У меня не виснет.

> но всегда реагирует на Ctrl+Arl+Del.


Любоей нажатие на клавишу генерирует прерывание. Обработчик прерывания читает из порт контроллера байт, или несколько байт, в зависимости от нажатой клавишы. Это байты называются scam-codes. Драйвер клаивиатуры передаёт эти сканкоды ядру, где в зависимости от локали эти коды транслируются в ascii или unicode символы. Можно читать напрямую сканкоды и смотреть какая клавиша нажата.

При этом доайвер (клавиатуры или ядро) анализирует последовательность нажатых клавиш. Когда он обнаруживает Ctrl + Alt Del, то посылает сигнал перезагрузки.

Старые ядра всегда ловили Ctrl+Alt+Del. Новые не ловят? Причин может быть много. Самая банальная - по какой-то причине прерывания от клавиатура запрещены. В этом случае на клавиатуру реагировать никак не будет. Другая причина... ну возможно косячит systemd. Это даже более вероятная причиина. Slackware упирается с переходом на systemd. Возможно она не подвержена этому багу.
420 1804119
421 1804129
>>804106
Легаси, сертификация, поддержка старых ОС без свежих пакетов.
Многие баги обходятся тонкими фиксами, отключением оптимизаций для отдельных участков кода и т.д.

А баги есть везде, через N лет текущую версию можно будет назвать старой и забагованной до неюзабельности.
422 1804130
>>787002
Там достаточно противоречивых правил.
423 1804146
>>804106
Потому что новые версии добавляют свои баги и несовместимости, придурок.
424 1804272
>>804096

>первый релиз в 2011 году


>последний релиз 8 ноября 2012 года


Говорилось про юзабельные RTOS, а не шизоидные говновысеры, толком не подходящие под такие задачи.
425 1804335
>>801421
Говоришь, для спутников пишешь? На

> As a microkernel-based OS, QNX is based on the idea of running most of the operating system kernel in the form of a number of small tasks, named Resource Managers. ...



Это была QNX. Давай посмотрим что крутится на насовских марсоходах. Охуевай от прочитанного:

>https://en.wikipedia.org/wiki/Comparison_of_embedded_computer_systems_on_board_the_Mars_rovers



И наконец, то что ещё не летало, но в перспективе сожрёт и QNX и VxWorks, не говоря уже об остальном - https://www.l4ka.org/65.php

Слушай, не в обиду, но может быть российские спутники долго не живут вовсе не от проблем с радстойкостью железа, а от того что ты и подобные тебе суперциклами злоупотребляете?
426 1804346
>>804272
Не туда ответил. Вот сюда ответ >>804272
427 1804397
Товарищи, подскажите, пж-та, где можно хорошенько выучить про unicode-32 строки в си? Хочу виртуальную машину перевести на юникод.
428 1804407
>>803148
угу встречал и в литературе 2 противоположных мнения
одни считают что нужно намеренно писать проще, в данном случае, расставить необязательные скобочки
другие считаю, и их мнение мне ближе, что человек который будет сопровождать данный код, будет обладать достаточной квалификацией и будет знать тонкости приоритета операций в языке и эти скобки расставлять не надо
429 1804414
>>804407

> будет обладать достаточной квалификацией и будет знать тонкости приоритета операций в языке и эти скобки расставлять не надо



А потом ебаться с ошибкой в коде
image.png7 Кб, 518x186
430 1804472
Может кто-нибудь объяснить, почему выводит 0, а не 4? Хотел понизить тип числа.
Я правильно понимаю, что можно переводить типы только в одну сторону(из типов с меньшим количествов байт в большее?) или же есть способы перевода на тип поменьше без потери данных(а если я знаю ответ и хочу перевести в тип с памятью поменьше?)
431 1804479
Почему такой код выдает ошибку?

Как я понял, если число типа double не имеет после запятой знаков, то с переводом все ок, если число не слишком большое
432 1804489
>>804472
>>804479

sprintf("%d\n", (int) sqrt(8+8) );

Причём 8+8 скушает ещё препроцесссор.
433 1804490
>>804479
И вообще, замени %d на %f и не парь мозги.
image.png41 Кб, 1224x446
434 1804496
>>804489
Не работает эта команда. Ошибка при компиляции

Бтв, как это все называется? Как работают форматы lf, d идругие? Они сами по себе не переведут инт в дабл, если указать для целого вещественный lf в принфте?
И как называется, когда переводят числа из одного типа в другой. А то мне из-за этой вещи мне бывает очень сложно искать ошибку в моем коде.
435 1804504
>>804496
Извини, я по ошибке тебе дал другую функцию. Убери перваую букуву s.

И посмотри в Интернетах что такое sprintf и snprintf,
а не компилится потому что для sprintf нужно больше аргументов.
436 1804521
>>804472
Функция sqrt существует только в виде принимающем и возвращающем double.
В printf же d означает i, int. Так что у тебя UB.
437 1804523
>>804397
Но их там нет. Есть wchar_t
sage 438 1804638
>>804496

> А то мне из-за этой вещи мне бывает очень сложно искать ошибку в моем коде.


Чтобы не искать ошибки, нужно включать больше ворнингов:

> printf("%d\n", 1.0);


> cc -Wformat file.c


> warning: format '%d' expects argument of type 'int', but argument 2 has type 'double'


> Не работает эта команда


Алсо, нужно читать, что тебе пишут на скриншоте (вторая строка). Сначала учимся читать, потом пишем код. Не наоборот.
sage 439 1804644
>>804523

> Но их там нет. Есть wchar_t


static const char32_t utf32[] = U"это блять что";

>>804397
Нееш, подумой. Притащи UTF-8 лучше. UTF-32 нужен разве что в текстовом редакторе, и то нужно хорошо подумать, стоит ли.
440 1804651
>>804644

> это блять что


С++ может быть?
441 1804673
>>804496

printf("%.2f\n", sqrt(8.0f + 8.0f));
sage 442 1804730
>>804651

> С++ может быть?


Это С11. В С2x притащат еще немного, и станет совсем юзабельно.
image.png53 Кб, 1106x394
443 1804921
Как можно не любить средства разработки от Майкрософт? Они же совершенны.
444 1804954
Аноны, писал все время на крестах, но сейчас необходимо на С. У меня вопрос, как мне сложить несколько чисел в одну строку или просто написать сложную формулу. А-ля 1+2*3-4.
445 1804957
>>804954
int x = 1+2*3-4;
446 1804960
>>804957
А если оdна и3 чисел переменная?
447 1804961
>>804960
Пихаю все в for.
m = 5 - (i * 4); Например.
Мне выdает всегdа 5.
448 1804962
449 1804964
450 1804966
>>804960
А как ты на крестах это делал?
451 1804967
>>804966
Просто формулку писал. Может проблема в вывоdе?
printf("%lf\n", m);
452 1804968
453 1804969
>>804967
Какую формулку? Чем отличается?
454 1804970
>>804969
5 - (i * 4), например. В том то и dело, не пойму в чем именно проблема.
455 1804973
>>804970
На крестах 3аработало, спасибо.>>804969
456 1805013
>>804335
Ты кинул статью со спутниками, на которой почти все работают на монолитной VxWorks. Каким боком микроядро?
И не надо мне тут рассказывать за микроядро в VxWorks - его добавили как отдельный профиль сборки для mmu-less архитектур в 2014, и единственная его микроядерность - размер в 20 кбайт, и на этом всё
457 1805017
>>804970
Да просто солями уебался, а потом вопросы задавал.
458 1805220
>>804644
Да я просто обчитался гитлаба GHC (конкретно их рантайма) и захотел себе сделать так же. В питоне, расте, кстати, тоже строки по дефолту юникод32. Компилятор в байт-код у меня поддерживает utf[8, 16, 32] Но он на хаскеле, лол, а вот в самой виртуалке строки онли ютф8, хочется сделать нормальный юникод32, чтобы не париться совсем.

Ну или подкиньте, что можно почитать, вдруг я не так понимаю все это дело и лезу еще тут, есть у меня ощущение, что знаний не хватает...
459 1805283
>>805013

>И не надо мне тут рассказывать за микроядро в VxWorks


Конечно я не буду тебе за него рассказывать, потому что в мире есть только одно божественное микроядро и оно поддерживает спецификацию L4.X2. Все остальные ядра это бледные тени L4.X2.
460 1805343
>>805220
Что? Нет. Строки и в расте и в третьем питоне по дефолту енкодятся в UTF-8, и только в питоныче интерпретатор за тебя в большинстве случаев подставит нужную кодировку в процессе трансляции.
sage 461 1805537
>>805220

> В питоне, ... кстати, тоже строки по дефолту юникод32


[sys.getsizeof("x" * i) for i in range(10)]
[49, 50, 51, 52, 53, 54, 55, 56, 57, 58]
Еще охуительные истории будут?

> юникод32, чтобы не париться совсем


Эмодзи видел? А в них несколько code-points в каждом. Русские буквы с ударением, любые другие комбинирующиеся символы... не получится не париться, смирись.
IMG20200913221705860.jpg17 Кб, 1080x118
462 1805633
Анон а как заставить эти эмодзи собираться в один символ как в клавиатуре телефона?
463 1805845
>>805633
Печатай через '\b'
464 1806086
Бляяяядь, как же говна наелся с этими эмодзи. Посоветуйте чё почитать вообще про кодировки. Знаком ток с аски. Опционально про рендеринг текста тоже было бы интересно (после того как эмодзи поебали отображение текста в моем терминале)
465 1806090
>>806086

>Посоветуйте чё почитать вообще про кодировки.


Кодировки это ни о чём.
Читай вот это и вот это:

https://docs.microsoft.com/en-us/typography/opentype/spec/otff

https://developer.apple.com/fonts/TrueType-Reference-Manual/
466 1806906
Подскажите IDE для Си. Скачал CLion и столкнулся со следующими проблемами:
1. По умолчанию открывающая фигурная скобка ставится на той же строке, на которой описывается название функции и ее параметры. Мне нужно, чтобы открывающая скобка ставилась с новой строки в случае с функциями, но -- на той же строке в случае с циклами.
2. Мне нужно, чтобы я выбрал стандарт языка, создал файлик, написал код, скомпилил его, запустил. Потом создал бы новый файлик, написал бы в нем новый код, скомпилил бы, запустил. Звучит несложно, да? Однако в CLion под каждый такой отдельный файлик мне нужно создавать новый проект. Соответственно, для каждого упражнения из K&R я вынужден создавать New Project. Выходит громоздко.

Вы можете предложить мне писать в каком-нибудь vim или emacs и просто собирать компилятором из консоли -- неплохой вариант. Но я хочу но я хочу IDE с подсветкой, дополнениями, авторазметкой кода и т.п.
467 1806914
>>806906
Visual Studio тебе нужно.
А если из консоли, то пользуй редактор Midnight Commander. Автодополнения не будет, но подсветку он обеспечит. Да и vi c emacs умеют в подсветку. emacs я не знаю, но vi для редактирования кода годится только если ты по модему по межгороду на 2400 baud логинишься из Москвы в Норильск. Тогда у vi конкупентов нет, в любом другом случае он годится лишь для правки конфигов.
468 1806919
>>806914
Но в VS же даже нельзя выбрать Сишный стандарт, насколько помню. Там вообще все собирается плюсовым компилятором. А еще писать желательно на никсах, ибо я когда первый раз с винды на линукс пересел, то охреневал от buffered streams -- оказывается, не просто так \n добавлять нужно в любом выводе. Да и в VS разве можно не создавать новый проект под каждый файлик?
469 1806921
>>806906
Komodo IDE
470 1806928
>>806919

>Там вообще все собирается плюсовым компилятором.


расширение .c - компилятор Си, расширени .cpp или .cc - компилятор С++

> А еще писать желательно на никсах, ибо я когда первый раз с винды на линукс пересел, то охреневал от buffered streams -- оказывается, не просто так \n добавлять нужно в любом выводе.


Ну так опыт тебе. А писать желательно платформонезависимо, насколько это возможно.

> Да и в VS разве можно не создавать новый проект под каждый файлик?


Ты можешь хоть все демки/уроки в один проект поместить и пометить их неактивными. И выбирать одну активную.
471 1806943
Аноны, помогите записать массив чисел в не форматированный бинарный файл с 16-битными отсчетами. Я не пойму, как его сделать бинарным и не форматированным.
472 1806951
>>806943
https://linux.die.net/man/3/fwrite
Можно и через write, но судя по вопросу тебе пофиг.

> с 16-битными отсчетами


Это как?
473 1806954
>>806951

>Это как?


Это мои входные числа.
474 1806962
>>806954

> с 16-битными отсчетами


Так никто никогда не говорит. Нет такого понятия "отсчёты"

тебе нужно вывести массив шастнадцатибитных чисел?
475 1806964
>>806962
Я не очень понял, мое задание звучит как тут
https://www.programmersforum.ru/showthread.php?t=280657&page=2.
Я сигнал сформировал, но не понимаю, как его вывести.
476 1806965
>>806964
ты наивный, если полагаешь что я буду за тебя делать задание или хотя бы пройду по ссылке. Научить могу, делай сам.

У тебя никаких вопросов не возникло? Какова размерность массива? Числа со знаком или без?

Ну-ка, объяви массив на 10 элементов 16 битных беззнаковых чисел. Если не сможешь, то ты зря сюда пришёл. Тут злые взрослые дяди, которые тебе плохого наговорят.
477 1806967
>>806965
Все учел надеюсь.

>У тебя никаких вопросов не возникло? Какова размерность массива? Числа со знаком или без?

478 1806971
>>806967
Остался только вопрос, как 16-битные числа вывести в не форматированный бинарный файл.
479 1806973
>>806971

>Остался только вопрос


Судя по всему у тебя много вопросов.

> как 16-битные числа вывести в не форматированный бинарный файл.


Я тебе ответил выше - с помощью функции fwrite или write, на твой выбор.

Я не так и не увидел от тебя объявление массива.
480 1806979
>>806973
unsigned short dv[10] ;
481 1807059
>>806906

>Мне нужно, чтобы открывающая скобка ставилась с новой строки в случае с функциями, но -- на той же строке в случае с циклами.


Должно просто настраиваться в настроках Code Style (Braces Placement)

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


Основная билд система у CLion это CMake же. Для простых как у тебя случаев тебе в нём нужна просто одна команда add_executable.
482 1807103
Можно ли как-то увеличить число циклов в for для большого числа циклов? 110000 циклов считает, 120000 уже нет.
483 1807122
>>807103
volatile unsigned u;
while (--u) while (--u) while (--u);
484 1807125
>>807103
Нет, а стандарте вообще прописано что больше 100500 циклов быть не может.
Ты совсем ебобо? Баги ищи.
485 1807126
>>786992 (OP)
/pr
Реквестирую курс по с/с++, где объясняется оформление исполняемого файла и добавление встроенный или
директорных ресурсов (Иконки, вав-вайлы и т.д.). Желательно с пояснением синтаксиса и роли библиотек. Можно в виде статьи.
.
Сейчас освоило синтаксис, функции и системные команды. Хочу попробовать создавать оформленные простые микро-програмы (Наподобие интервального таймера). Но я даже не знаю как добавить иконку и собственный сигнал (Использую \a)
486 1807155
>>806906
Vs codium + плагин code runner
487 1807156
>>806906

>открывающая фигурная скобка ставится на той же строке, на которой описывается название функции и ее параметры.


Все верно.
488 1807183
>>806921
Попробую
>>806928

>расширение .c - компилятор Си, расширени .cpp или .cc - компилятор С++


Да, про это подзабыл. А что насчет стандарта языка? Хотелось бы иметь возможность выбирать между C90, C99 и C11

>А писать желательно платформонезависимо, насколько это возможно.


В реалиях Си, по-моему, это почти невозможно. Ибо так или иначе тот или другой кусок кода будет дергать то, что связано с ОС в половине случаев.
>>807059

>Должно просто настраиваться в настроках Code Style (Braces Placement)


О, помогло, спасибо.

>Основная билд система у CLion это CMake же. Для простых как у тебя случаев тебе в нём нужна просто одна команда add_executable


Можно поподробнее? Где именно мне прописывать cmake'овские команды?
>>807156
Согласно K&R стилю открывающая фигурная скобка тела функции должна быть с новой строки. А в случае с циклами она должна ставится на той же строчке
489 1807188
Подскажите пожалуйста, в каком порядке и что именно на каждом из этапов делает компилятор (например, gcc) при вычислении вот такого логического выражения: i < j || ++j < k
1555167495591.png243 Кб, 536x723
490 1807204
491 1807206
>>807188
Ну хуй знает, похоже на UB. Лениво проверять под MSVC и gcc.

Если не ошибаюсь, то иинкремент первым будет, затем проверка i<j, и если условие ложное, то проверка j < k.
492 1807221
>>807206
Хоть у || и самый низкий приоритет, но порядок вычисления то вроде он задает.
Т.е. если i<j истина, то правую часть он вообще скипнет.
493 1807222
>>807204
>>807221

Значит компилятор обрабатывает выражение "кусочками", двигаяст именно слева направо, и даже не доходит до префиксного инкремента?
1446031732582.png84 Кб, 1200x1354
494 1807231
>>807222
Компилятор строит дерево (AST, abstract syntax tree)
495 1807233
>>807222
Также он не всегда двигается слева направа - ассоциативность в табличке выше.
Например в x = y он рассчитывает y раньше x.
496 1807240
>>807221
Вот реально лень проверять. Просто когда опыт программирования в десятки лет, то такие конструкции подсознательно избегаегт, даже не задумываясь.
497 1807241
>>807206

> УБ


Стыдоба, логику основного оператора не знаешь, зато УБ
498 1807242
>>807231
>>807233

Если для моего примера сделать это:

{
int i = 3, j = 4, k = 5;

printf("%d\n", i < j || ++j < k);
printf("%d %d %d\n", i, j, k);
}

то последний printf покажет, что j равно 4.
И непонятно, почему префиксный инкремент (который во всём выражении имеет высший приоритет и должен за счёт своей "префиксности" моментально увеличить j на 1) не выполняется.
499 1807248
>>807242
Потому что order of evaluation независим от order of precedence
https://en.cppreference.com/w/c/language/eval_order
В операторе x() || y() если x() истина, то все выражение истина и вызова y() не будет вообще.
Аналогично x() && y() если x() ложь, то все выражение всегда ложь.
500 1807250
>>807242

>printf("%d\n", 1 || blowup() );


blowup() не будет вызвана. Это точно.

>>807241
И не говори. Самому тошно.
501 1807252
>>807231
>>807248

Благодарю!
502 1807254
>>807242
Думаю дело в том, что он сначала строит дерево. Но потом он его обходит то начиная с корня, то есть самого низшего приоритета.
503 1807382
>>805343
>>805537
Панимаю.

Пойду больше по теме покурю, спасибо.
А то делаю виртуалку для фп языка на вроде эрланга, но с норм типами (раскурил систему типов хаскеля для этих целей и чутка упростил, шоб в императивном языке норм смотрелось) пока получается лютое говно и я хз, как типизировать рассылку сообщений между процессами, разучил как делать shenandoah gc (получилось баганное кривое подобие, правда, но это дело наживное), в итоге у меня CMS и Shenandoah только, хочу еще G1 прикрутить.
Собственно, не хочется делать строки как в хаскеле и нативном эрланге, где они тупо на линкед листах, ну и массивы заодно завез, думаю вот, как обойтись без частного случая для строк, но что-то как-то лучше их все же вытащить в отдельный случай для экономии проца и оперативы.
504 1807400
>>807183

>Можно поподробнее? Где именно мне прописывать cmake'овские команды?


При создании проекта у тебя появляется файл CMakeLists.txt, который описывает всё, что билдит твой проект. Там и добавляй новые исполняемые файлы. Посмотри https://cliutils.gitlab.io/modern-cmake/chapters/basics.html , в особенности раздел Dive In. Только у тебя, естественно, будет LANGUAGES C. Для задания стандарта Си используй https://cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html
Вообще хорошо бы простой Make понять прежде чем лезть в весь ужас CMake. Но в CLion с мейком всё очень плохо, и если ты уж в него впираешься, то выбора нет.
505 1807459
>>807400
Ок, посмотрю вечером, спс
507 1810288
>>806090
>>806086

"The Unicode Cookbook for Linguists"
Managing writing systems using orthography profiles
Steven Moran
Michael Cysouw
508 1810956
>>788067

>Забугром эмбедщина


>Quallcom, Mellanox, Marvell, Nvidia, Xilinx, Tesla


Речь идет про рядового анона, либо без во, либо закончившего говновуз, которые забугром нафиг не кому не нужны даже с 10 годами опыта.
Поэтому если выбирать из работы в России: прогать микрики, как даун, или стать веб-разработчиком, очевидно выгоднее выбрать второе. Можно как завести трактор в ДС, так и перейти на удаленку, фриланс, когда прогером мкк будешь всю жизнь сосать за 30-40к максимум при работе оффлайн 5/2.
509 1810962
>>788546

>Причём настолько, что любой человек с опытом 3+ лет на этом самом эмбедеде может спокойно ехать в какую-нибудь Германию или Францию на 4-5к рейхсмарок ежемесячно,


Но реальность такова, что типичный байтоеб из НИИ, не закончивший топ вуз в дс, будет пахать за 20к-30к и ни в какую германию и францию не уедет, потому что он там нафиг не нужен.
В то время как веб-разработчик даже в рахе может получать эквивалент 2-3 рейхсмарок через пару лет работы и работать на в разваливающемся заводе или нии, а в крутом офисе с печеньками и кондиционером со свободным графиком.
510 1810968
>>795877

> не одними деньгами, анонче. Есть ещё то, что у тебя в мозгу и душе.


Угу, пока норм прогеры уже и квартиру в новостройке/жилье купят, машину, и семью заведут, ты будешь ездить на работу на жигулях микросхемы паять и жить с мамкой, зато для ДУШУ работаешь, лол.
511 1810997
>>810956

>либо закончившего говновуз, которые забугром нафиг не кому не нужны даже с 10 годами опыта


Дальше пост можно не читать, т.к. выдает теоретика сразу. Ты не знаешь, какие дипломы за бугром нужны, а какие нет (хинт: почти все со словом "государственный").
512 1811017
>>810968
Да, собственно, анон, я сейчас микросхемы паяю в свободное время работаю-то я андроидщиком. А когда заведешь семью - хуй ты поковыряешь МК в свободное время, ибо хуй тебе а не свободное время. И хуй ты потратишь свои кровные на свое увлечение.

Но вообще, если следовать твоей логике, что так, что так ты будешь в говне, ебать: либо с деньгами, квартирами, машинами, женой, но без свободы и поэтому тебе нахуй эти все КВОРТ5РЫ, МОШЫНЫ не будут нужны, депрессия сожрет твой мосск, либо без денег, но зато будешь заниматься своим любимым делом.

Энивей... Не хочу заводить серьезные отношения до 33, нахуй мне это нужно, только ограничивает твою свободу, анон
513 1811018
>>810997

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


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

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

Вышесказанное справедливо по отношения перектачиков из периферии.
Тред утонул или удален.
Это копия, сохраненная 22 марта 2021 года.

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

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