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

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

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

Пожалуйста, пользуйтесь 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/n2385.pdf
- man/Dash/zealdocs

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

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 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 помогает читать сложные сишные декларации.

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

- №51: http://arhivach.ng/thread/510484/
- №52: http://arhivach.ng/thread/529928/
- №53: http://arhivach.ng/thread/529929/ >>1593083 (OP)
2 1610778
Есть книги по применению Си на практике?
3 1610795
>>10778
Читай чужие исходники. Прочитай APUE для *nix, рихтера и руссиновича для винды, потом вкатывайся в интересующую предметную область.
4 1610809
>>10795

>Читай чужие исходники.


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

>Прочитай APUE для *nix, рихтера и руссиновича для винды, потом вкатывайся в интересующую предметную область.


То есть изучать API ОС?
5 1610827
>>10795
я не читаю русских авторов, всё слишком заумно и сложно постоянно обкладывают всякими ёба-терминами. мания у наших писать всё время книгу каким-то агадемическим языком. западные проще гораздо читаются
6 1610833
>>10809

> Я не понимаю как Си взаимодействует с ОС


Ты дергаешь либу за функцию, либа что-то делает.

> как пишут сетевые программы


APUE для *nix, Network programming by Jones/Ohlund под винду. Как конкретно организовывать программы, подсматривай у других, ну и книги тоже есть.

>>10827
Где ты увидел русских авторов?
7 1610836
Вкатился, а вот залетный зеленый со стеком в цпу и прочие питонодети пусть остаются тонуть в прошлом треде.
8 1610876
Только что посмотрел Pelles C идеху, боже мой какая же это милаха. Но как всегда минусы, это какой-то левый компилятор, ну и автокомплишена нету или есть?.

Самому написать что ли. Если взять тот-же clang, походу там есть куча уже готовых тулзов для автокомплишена, парсинга синтаксиса итд. А в качестве апи для гуя gtk, для кросплатформы. И забацать по быстрому идеху своей мечты?
9 1610892
>>10876
Под винду то? VC/VS закастомь, плагины попиши. Поинтереснее будет думаю. Clang уже со студией совместим кстати, сам на таком билде сижу.
exercise.PNG23 Кб, 795x92
10 1610917
Аноны, снова я выхожу на связь. Посмотрите, пожалуйста, я правильно задание выполнил? 1-24 из k&r или нет? Если что о всяких switch и стеках не знаю, т.к. прочитал только первую главу, читаю главу > делаю упражнение.

https://pastebin.com/KmqvnGJH
11 1610927
>>10917

> do not forget about quotes ... comments


> забывает о кавычках и комментариях


Все правильно сделал?
12 1610929
>>10927
ну это понятно, я так набросок кинул. чисто первое предложение сделал, кавычки, цитаты я тоже сделаю. я имел в виду сам принцип правильно я понял задания или нет? чтобы семантически правльной по смыслу была программа.
13 1610932
>>10929
По-хорошему [(1]) нихуя не верная программа, но для того, чтобы это обработать, нужно про массивы знать уже хотя можно скобки в int запихнуть побитовыми операциями, на 16 уровней хватит точно.
14 1610947
>>10932
да понимаю, я.
ну я не знаю массивов пока.. начал язык с нуля сразу с книжки k&r. я думаю что он эти задания даёт с целью закрпления того что я прошёл в первой главе. циклов этих, скобочек, назначения переменных и прочих. думаю у него для массивов отдельные задачи припасены впереди.
fffffffff.png144 Кб, 1076x518
15 1610963
Ребятки-ребятульки, выручайте. Проект усктроен следующим образом: есть корневая либа, в ней есть некий файлик driver.h с сотней экстернов (см пик).

Они объявлены уже во второй библиотеке "драйверов", и линковщик все это дело связывает вместе. Таким образом, корневой либе не нужно знать детали реализации, например, устройства хранения данных.

Проблема! Хочу эту хуйню инлайнить. Т.е. если имплементация __driver_storage_block_size возвращает тупо 512 то мне нахуй не нужно, чтобы основная либа мутила вызов функции, чтобы получить 512. Надо, чтобы линковщик сам понял, что надо блять, захардкодить 512. У меня стек по пизде от этой хуйни!

Что делать?
16 1610970
>>10963
Сколько тебе лет? Мне просто интересно.
17 1610971
18 1610973
>>10971
Норм. На самом деле я просто ньюфаня местная и я просто боялся что тебе 19 лет или 20 или 21, что ты младше меня и я такой дегенерат. Но вроде бы пока на своём уровне держусь.
19 1610995
>>10963

> Надо, чтобы линковщик сам понял, что надо блять, захардкодить 512


Для начала делаешь -flto, если не помогает - тащишь нужные функции в хедеры, делаешь их static inline.
20 1610998
>>10995
Я так и сделал. Охуенно получилось, только он падла посрезал мне interrupt vector. Ты часом не знаешь, как заставить gcc не трогать .S файл в плане оптимизаций? Ну или не трогать секцию, например.
21 1611002
>>10998
Гугли дерективы, volatile пропихнуть попробуй, мб поможет.

мимо диван
Screenshot4.png70 Кб, 809x764
22 1611004
>>11002
Я нихуя в этом не понимаю, для меня ассемблер это темный лес. Что такое директивы? Куда тут засунуть volatile?
23 1611008
>>11004
https://bugs.launchpad.net/gcc-arm-embedded/+bug/1747966 (первое сообщение про KEEP и последнее про порядок файлов).
24 1611018
>>11008
Ебать-колотить! Передвинул ассемблер в самое начало и все собралось заебись!
25 1611140
В cpp треде задал вопрос, теперь спрошу здесь. Какие доводы использовать C++ вместо Си? Мне нравится Си своей простотой, и соответственно пугает C++ своей монструозностью. Или таки можно использовать ограниченное подмножество языка и забить на остальные 100500 тыщ фич?
26 1611141
>>11140
Тебя кто-то заставляет пользоваться с++?
27 1611157
>>11141
Я задал конкретный вопрос. Ты уводишь от темы.
28 1611159
>>11140
Никто и не заставляет все фичи крестов использовать. Я по минимуму, только сахарок для удобства. А всякие обсуждаемые на C++20 возможности даже не понимаю.
29 1611243
>>11140
Макака, пошла нахуй. Такие дегенераты не нужны ни в C, ни в C++. Катись обратно в свои скрипты, раб.
30 1611267
>>10917
Строчка типа (dsfsgh{sdfsd)fsdf} проходит без ошибок, хотя она не кажется мне верной.
Какие инструменты уже есть? Массивы? Циклы? Функции (с рекурсиями)? Указатели с malloc-ом?
31 1611326
>>10917
Ты не отвечаешь, загрузил твою книгу.
Массивы идут до задания 1-24. Фигнёй страдаешь, сделай массив на 10к элементов, этого хватит на любую адекватную си-программу - вряд ли где будет вложенность хотя бы сотого порядка, а 10к хватит уже совсем почти на всё.
32 1611370
>>11267
массивы я делал только на уровне char m[10], ну ты понел.

цикл for и while про switch он написал в следующей главе расскажет

ну функции знаю как писать самопальные, про рекурсию знаю(по предыдущему яп) здесь не проходил рекурсии, но фанкции проходил.
про указатели вообще не понял тебя.

>>11326
и что мне этот массив даст? как через массив то это сделать? я не понимаю.
33 1611397
>>11370

>только на уровне char m[10]


Такого уровня достаточно. Не нужна не рекурсия, ни функции, простого char m[N] хватит.
Что-то типа такого (писал прям на ideone, мог накосячить): https://ideone.com/kgiiid
34 1611409
>>11397
спасибо, огромное, анчоус. я очень признателен тебе, что ты даже сам полез в эту книгу пока я спал и раскопал там всё проходил ли я. ты очень много времени потратил на то чтобы помочь ньюфане, спасибо тебе ещё раз огромное
35 1611414
>>11397
спасибо за решение ещё раз, я просто там про const не знал и это всё, но уже загуглил. сделаю по твоему варианту.
36 1611418
>>11414
Можно убрать все const, они не необязательны и нужны лишь для человека (кожаного мешка).
Не осознаю.PNG11 Кб, 730x263
37 1611422
Уважаемые личности, у меня вопрос по запятой
38 1611424
>>11422
Алсо, gcc
39 1611429
>>11422
А, дошло, потому что 4 это скаляр и во втором случая запятая это не оператор, а сепаратор, как при перечислении аргументов. Сорян поцыки
изображение.png4 Кб, 267x148
40 1611437
>>11422>>11429
Во втором случае сначала выполняется присваивание, а потом запятая с более низким приоритетом, как и должно быть.
В первом случае вычисляются скобки (с наивысшим приоритетом), в рамках скобок вычисляется запятая, и уже только потом присваивание.

Зачем прикручивать какие-то понятия сепараторов и скаляров, если из приоритетов получается такой же вывод? В твоём примере нет сепараторов, так как нет вызова функций, разве не так?
41 1611444
Или вот представьте ситуацию: если есть переменная x = 10, то почему значение выражения (x++, x) не 10, а 11?
Постинкремент же должен увеличить x уже после выполнения данного выражения, значит, порядок выполнения должен типа быть такой:
Он видит, что у первого x постинкремент, запоминает, что после выполнения выражения нужно увеличить значение на 1
Видит второй х, который равен 10, как и первый
Дальше два варианта:
1) Выражение закончено, его значением является значение последнего операнда (10)
2) Но там ещё где-то инкремент (11)
А на практике вообще инкрементируется х сразу, как только встречается постинкремент, и значение x в обоих случаях 11, как и выражения
Я хуй знает, почему так...
42 1611446
>>11437
Да, я тупанул жёстко. Таблицу с приоритетами помню, но меня переглючило и я снизу-вверх приоритеты воспринимал лел давно уже сижу...
43 1611487
Зачем в си все эти short, long, long long, double нужны? я знаю что их размеры изменяются в зависимости от компилятора и разрядности системы, но зачем это нужно?
44 1611499
>>11444
Постинкремент выполняется после того как переменная отдала своё значение, а не после выполнения выражения.
45 1611503
>>11499
Я не всосал, что значит "отдала выражение"
46 1611504
>>11503
Тебе надо поспать. Совсем обпрограммировался уже.
exercise.PNG24 Кб, 776x109
47 1611520
Как решить 2-1 задание из k&r я вообще ничего не понимаю. ну вернее типы я вывел через <limits.h> а как диапазоны float искать вообще ума не приложу. очень сложно
48 1611535
>>11520
Можешь использовать побитовый сдвиг, наверное
49 1611559
>>11487
Это сложный вопрос ты медленно но верно засасываешься в бесконечную бездну байтоёбства, до точки невозврата осталось не так много... Пока что ты ещё молодая и шутливая ньюфаня...

https://www.cyberforum.ru/blogs/18334/blog69.html

Читай статью там ответы на твои вопросы.
50 1611621
а почему мы не используем short вместо int? у него же sizeof в два раза меньше (2 байта) в то время как у int 4 байта. И ограничение там 32к вполне можно short везде писать. Так же будет меньше памяти занимать. всё четенько
51 1611649
>>11621

>inttypes.h


Проще уж сразу положиться на разработчика компилятора.
52 1611675
>>11520
А у тебя есть дискорд? Дай дискорд! Я бы тоже порешал задачи, можно и обсудить какие.
53 1611700
>>11243
Пидр
54 1611726
>>11621
Я, например, пердолюсь с 32-х разрядными ARM, и там желательно использовать 32-х разрядные типы, особенно во всяких алгоритмах и циклах, иначе будут выполняться дополнительные команды на конвертирование в 32 разряда и обратно.
55 1611733
>>11675
ты очень любезен, но у меня нет дискорда. я бы мог его зарегестрировать, но просто не понимаю как можно коллективно сидеть и решать одну задачу из книжки? я просто читаю книжку, вижу задачу, решаю, потом продолжаю читать

>>11726
понял, мне пока рано в такое лезть
56 1611801
>>11520
У меня прогресс уже, благодаря анонам и гугл разобрался в интеджерах и одну половину программы написал. но у меня теперь другая проблема: вычислить диапазон float чисел, как это делать я хз
57 1611818
>>11801

>но у меня теперь другая проблема: вычислить диапазон float чисел, как это делать я хз



float.h

А вообще посмотри стандартную библиотеку C, что бы представление хотя бы иметь. Она не большая.

Тебе, кстати, ещё их вычислить надо, а не только из хеддера вывести. Задание внимательней перечитай.
58 1611821
>>11818

>Тебе, кстати, ещё их вычислить надо, а не только из хеддера вывести.


вычислить минималки у unsigned чисел, потому что у них минималок нет.
да, я читаю там в книжке есть ссылки на приложения по этим двум бибилиотекам.
59 1611832
>>11821

>потому что у них минималок нет.


Это как так? У тебя в консоли в выводе они есть.
60 1611837
>>11832
потому что я их вычислил же. ты на код смотри. они имели ввиду вытащить константы и где нету констант вычислить нужно.
61 1611857
>>11837
Мне кажется, здесь старик Ритчи имеет в виду вывести из констатнт и вычислить без использования констант.
62 1611860
>>11857
ну и как ты это сделаешь?
63 1611892
>>11140

> Какие доводы использовать C++ вместо Си


Шаблоны, неймспейсы, constexpr. Особенно последнее.

>>11487

> Зачем в си все эти short, long, long long, double нужны?


В 1990 году кто-то написал код, в котором был 16-битный myint. Из-за этого в 2020 году 64-битный процессор, скрипя и спотыкаясь (pipeline stall) на каждой инструкции старается считать в 16 битах. Вот чтобы эта история осталась фантазией, размеры к примитивным типам не прибивали гвоздями. Потом, правда, осознали, что получилось не очень, и сделали еще int_leastN_t/int_fastN_t, но макаки продолжали тайпдефать инты в фиксированную ширину.
64 1611902
>>11892
я твой ответ про типы интеджера вообще не понял, анон. слишком я ньюфаня уж ещё для этого всего.
65 1611904
>>11860
unsigned int i = 0;
while (i + 1 > i) { i++; }
print("unsigned int max: %u\n", i);

Для signed можно закрыть глаза на UB, сказать -fwrapv и сделать аналогично unsigned. Для плавающей точки можно узнать размер мантиссы, найдя момент, когда i + 1 будет равно i + 2, а размер экспоненты получить банальным вычитанием. Хотя я не помню уже, что там в задании требуется.
66 1611914
>>11902
Да там уже ответили выше, я проебал пост просто. Суть в том, чтобы размер интов придумывали разработчики конкретного компилятора, и чтобы они выбирали размеры, которые проще всего обрабатывать процессору, для которого пишется компилятор.
67 1611925
>>11904
спасибо, анчоус, частично понял. мне нужно время чтобы осмыслить это.
изображение.png14 Кб, 629x483
68 1611940
>>11904
Оптимизировал твой код.

мимо быдлокомпилятор
69 1611947
>>11801
Вычислить программно?
Предположим, что о внутренней структуре числа ничего не известно (про мантиссу и прочее) и известно лишь что значения доходят до примерно равного значения по модули в положительных и отрицательных. Ещё придётся учесть, что float-ы переполняются.
Я бы вот такое написал: https://godbolt.org/z/S6DGPg (чтобы понять define просто замени type на тип и name на имя функции - я не знаю в каком виде шаблоны си, и потому просто через дефайн сделал много функций - лучше чем ctrl+c/ctrl+v на миллион строк)

К переменной прибавляется добавка пока число остаётся положительным и продолжает прибавлять, и добавка удваивается по тем же правилам. Если переменная становится отрицательной, то значит максимум достигнут и нужно снижать добавку, пока не подберёшься к нужному значению. Если t2-t1==t2 (переменная с плавающей запятой дошла до бессмысленной бесконечности и больше операции с ней не несут смысла), то значит тоже нужно уменьшать добавку. Вроде бы корректные значения вышли.

>>11733

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


Я не предлагаю коллективно сидеть и решать. Просто интересные задачи потом сверить друг и друга, может быть кто-то более интересную концепцию найдёт.
Например, мне интересно посмотреть как ты с комментариями и экранированием символов в строках через \ разобрался, но спрашивать это в треде не уместно, тому что флуд.
70 1611950
>>11947

>Например, мне интересно посмотреть как ты с комментариями и экранированием символов в строках через \ разобрался


ты имеешь ввиду задачу в которой нужно было удалить комментарии из кода си программы?
71 1611953
>>11940
А потом ты такой пересобираешь 16-битным компилятором, и твой ответ неверен, потому что UINT_MAX может быть 65535.
72 1611958
>>11950
Нет, я про 1-24 с проверкой корректности расстановки скобок.
73 1611961
>>11958
я не разобрался. я продолжил книгу читать и дошёл до 2-1 задания сейчас на нём сижу, потом откачусь назад 1-24...
изображение.png16 Кб, 637x544
74 1611966
75 1612065
>>11892

>В 1990 году кто-то написал код, в котором был 16-битный myint. Из-за этого в 2020 году 64-битный процессор, скрипя и спотыкаясь (pipeline stall) на каждой инструкции старается считать в 16 битах. Вот чтобы эта история осталась фантазией, размеры к примитивным типам не прибивали гвоздями. Потом, правда, осознали, что получилось не очень, и сделали еще int_leastN_t/int_fastN_t, но макаки продолжали тайпдефать инты в фиксированную ширину.


Сук, нахуй так жить?! Все эти ебаные киворды, я его рот.... Братан, нахуя вникать во все это байтоебство? Я просто не понимаю. Смысл в чем? Ты же вероятно не пишешь ОС. И даже не пишешь стек сетевых протоколов. Нахуй так жить, расскажи? Какие цели, зачем все эти базворды?
image.png83 Кб, 200x206
76 1612069
>>10764 (OP)
А кто нибудь пробовал складывать два указателя?
77 1612071
>>12065

> зачем все эти базворды


Какие? Это базовые вещи. Предполагается, что если ты вкатываешься в Си, то до или после этого ты осилил что-нибудь фундаментальное по архитектуре, и хотя бы смутно представляешь, как работает процессор. Ту же "архитектуру компьютера" таненбаума хотя бы.

> нахуя вникать во все это байтоебство


Чтобы писать быстрый код, чтобы делать низкоуровневые вещи. Если тебе не нужно байтоебство - нахуй тебе си?

> Ты же вероятно не пишешь ОС


Зато написал несколько эмулей, например.
78 1612137
>>12065
Мне вообще 21, я сижу у мамке на шее уже 2 года, из образования только шарага. В итоге как-то решил сделать ВАЙТИ, начал учить питон, там html\css, но проблевался от всего этого гавна. Но вот C почему-то зацепил нравится, его учить хотя я понимаю что занимаюсь хуетой и работы не найду на нём, но мне почему-то настолько уже похуй на ирл что я давно всё на самотёк пустил..

Короче это просто нравится, я вообще знаю только то что на этом языке драйвера сейчас пишут, а даже для ос предпочтение C++ отдают. Может быть я когда-нибудь в C++ вкачусь, но только после Cи и это явно нескоро будет с такими нулевыми знаниями как у меня.
Извиняюсь за вниманеблядство.
79 1612227
>>11966
Нормальный человек:

>Решите задачу


>Вот


>А так?


>Ммм, падажди-ка, тут так, а тут эдак, ясно. Вот.



Пердоля:

>Решите задачу


>Вот


>А так?


>Э? Что? Ваша задача неправильная и не нужна. Идите нахуй!

80 1612246
int ★foo[5]; и int (★foo[5]); одно и то же ведь - массив из 5 указателей на тип int?
81 1612277
>>12071

>Если тебе не нужно байтоебство - нахуй тебе си?


Потому что могу, потому что хочу, потому что это язык общего назначения.
82 1612759
>>10917
Хмммм. Понимаю, что это сишный тред. Но вброшу свое охуенное решение https://pastebin.com/WXqNzR4H. Вроде как тут же разница в языке не особо играет роли. Про комментарии забыл, но там тот же принцип вроде как.
83 1612767
>>12759
Хотя нет, понял в чем фишка комментариев, нужно не учитывать скобки которые в них попали. Ну, это вполне легко, просто проверяем, что последний элемент на стеке открывающих это начало коментария и пока его конец не найдем, ничего в стек открывающих не кладем. У однострочного закрывающим будет '\n', у многострочного */, только нужно не массив символов использовать, а массив строк. Ну или чуть поебаться с символами.
84 1612780
>>11904
По-моему это всё таки маразам какой-то зачем ритчи такое ебанутое занятие давать? Тот анон всё правильно понял, зачем эти рассчёты того что уже рассчитано вручную?
85 1612869
>>10764 (OP)
Спрошу тут.

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

С чего лучше начать:
ASMx86
Linux
Таненбаум архитектура ПК?

Вопрос довольно тупой, но на самом деле вводит меня в ступор. Т.к. архитектуру +\-, ну очень начально я знаю.

АСМ без примеров какого нибудь линукса и понимания его ядра может стать несколько не очевидным. (пару асм микроконтроллеров я знаю и знаю что без понимания уровня выше это хуйня).

А линукс - а начальные знания линукса, могут оказаться не тем что я от него ожидаю
86 1612935
>>12759

>как тут же разница в языке не особо играет роли


Развеселил, лол.
У тебя (у меня твоя) программа падает от строчки "}", если что. С комментариями и строчками самое интересное же, там есть всякие многострочные строки вида "asaf\"a//s\
sdg\\fa"
И то же самое с комментариями, которые /**/
87 1612953
>>12869

>не знаю, что под капотом


Nand to tetris (он же nand2tetris) гугли - и вперёд! Там как раз весь подкапот: от логического "и-не" через проектирование собственного канплюхтера к написанию и запуску на нём тетриса. Все стадии от и до.
Ещё вариант - купи себе книжку Харрисов Digital Design and Computer Architecture, простенькую ПЛИС-плату с али и всё то же, что выше - фигачишь от "и-не" к созданию компа.
88 1612964
>>12869
У Массачусетского универа есть курс nand 2 Tetris. Ты начинаешь с одного логического вентиля not and, и начинаешь на hdl создавать логические операторы, биты, регистры, память, алу, целиком комп с переферийными устройствами, потом пилишь виртуальную машину с ассемблером и компилятор си под нее.
Не знаю насколько ещё больше можно узнать что под капотом.
Курс платный, но можно спиратить.
мимокрестовик
89 1612965
>>12953
Лол, great minds think alike.
90 1612967
>>12964
>>12953
Слишком глубоко копнули, я по совместительству электроникой и микроконтроллерами занимаюсь, так что мне нужно не настолько глубоко и конкретно х86, причем было бы круто в современном контексте с практическими примерами.

Т.е. интересует какие регистры обычно каким образом дрочатся, что в них лежит, как реализуется соглашение о вызове, переключение контекста и прочая хуйня.
Я потому в линь и полезть думаю.
91 1612973
>>12967
На выходе хочется уметь понимать дизасм сложнее 3х строк с получасовым гуглением.
92 1613012
>>12246
Да, скобки в данном случае никак не меняют приоритет.

>>12780

> зачем эти рассчёты того что уже рассчитано вручную


Задание:

> by printing appropriate values from standard headers


and by direct computation
Хотя там скорее всего сдвиги имелись в виду.

>>12973
Таненбаум, потом любая книжка по асму для x86 (посмотри только, чтобы не с доса начиналось - все эти сегменты и int 21h тебе в жизни вряд ли пригодятся, и понимания не прибавят, особенно в x86-64).
93 1613095
>>12780

>зачем эти рассчёты


Эти расчёты для того, чтобы понять представление чисел разной разрядности и почему у них именно такие пределы.
94 1613144
>>12935

> Развеселил, лол.


Ну ведь серьзно тут разницы особой нет. Там стеки, тут стеки. Мне просто лень было си вспоминать.

> У тебя (у меня твоя) программа падает от строчки "}", если что


Я просто чет не подумал что кто-то передаст такую строчку.
Быстренько переделал, чтобы и комменты поддерживало. Можно будет потом нормально переписать, чтобы такой хуйни с кучей ифов не было.
https://pastebin.com/GkKjyZqd
95 1613146
>>13144
Блин, тут небольшая беда с регулярками, но думаю можно опять же, принцип-то ясен.
image.png192 Кб, 604x340
96 1613156
А в вашем низкококоуровневом Си никак не отображена фича x86 класть старшую часть результата умножения в dx? Я не слышу, блядь! Я есть нуждающийся в этом.
97 1613213
>>13156

>никак не отображена фича x86 класть старшую часть результата умножения в dx?


Это забота не си, а компилятора - си этого вообще ни разу не обязан отображать. Напиши ассемблерную вставку на полторы строчки или используй long long же.

>>13144

>Там стеки, тут стеки.


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

Ты же понимаешь во сколько десятков раз твоё решение с дополнительными стеками и другим выделением-освобождением памяти, регулярками и другой дичью будет менее эффективнее одного прохода с массивом и несколькими переменными-флагами для комментариев и скобок? Это же просто дичь невероятная, прикручивать регулярку сюда.
Давай я склею или найду кучу исходников и проверим время по фану? В шарпе есть возможность учитывать расход памяти с учётом внутренних затрат твоих стеков и регулярок? Просто в холостую (без выхода раньше времени в случае ошибки) запустить на крупных файлах (дефайны могут сломать всю малину), при этом тестовые строчки вроде "}" оно должно верно проверять, естественно.
Ответь в 53 (прошлый) тред, чтобы не мусорить в этот тред, если интересно.
98 1613233
>>13213

> Я бы не стал использовать стек в реальной задаче


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


Ну это толсто даже для этого треда.
Реализация Stack в .NET (как и у любых других вменяемых людей):

> private T[] _array;

99 1613255
>>13095
почему у них такие пределы кстати?
100 1613291
>>13233
Да, не намного, верно.
Именно поэтому, если использовать стандартный плюсовый стек (на деке), то для 100 элементов он вызывает 2 new, а для 1000 - 10 new и 1 delete. И потом после использования нужно будет ещё всё это очищать. Для вектора ещё хуже. А куча медленная, если есть возможность обойтись без неё - лучше так и сделать. Не знаю что это за тип в шарпе, но вряд ли он работает лучше без внешней информации о количестве элементов в общем случае.

Я просто поехавший, не обращай внимание.
Для 100 элементов рукописный костыль обгоняет стандартный стек на деке в 7 раз (на векторе в 11, и даже для единоразового вызова malloc в 3), для 1000 - 3 (5), для 100000 - 1.2 (3).

>>13255
А какие должны быть?
Такое внутреннее представление выбрали.
https://ru.wikipedia.org/wiki/Число_одинарной_точности
101 1613325
Реквестирую пример программы на Си, которая парсит файл с данными (чтобы и вложенные скобки, и разные типы). Желательно без флекса с бизоном.
102 1613354
>>12967
Анон, что-то куда-то не туда ты, кажись, рулишь! Прям как я в своё время. Тоже считал, что "слишком глубоко копаю", а в результате просрал кучу времени. Сейчас жалею, что таки не начал "слишком глубоко" копать. Оно, кстати, оказалось намного проще, чем изначально думал.

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


Ну, я тоже этим занимаюсь. Точнее, микроконтроллерами в контексте мехатронства.

>так что мне нужно не настолько глубоко и конкретно х86


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

>причем было бы круто в современном контексте с практическими примерами


Мне кажется, это будет херь типа "покажи приёмчик". Ты нахватаешься частностей, а фундаментального понимания в голове так и не будет.

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


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

Итого: Не еби мозга и не пытайся обмануть жизнь! На примере "детской" архитектуры пройди это всё: от уровня логических вентилей до высокоуровневого программирования. И не читай Таненбаума этого сраного! У него книжка обо всём и ни о чём.
104 1613398
>>13255
Про вещественные числа тебе скинули ссылку, а в целочисленных всё гораздо проще.

Можно на примере char разобрать. Предположим, что char имеет размер 1 байт, тогда unsigned char будет иметь диапазон значений от 0 до 255. От 0 потому, что unsigned не имеет отрицательных значений и это минимальное значение байта когда во всех разрядах 0 (0х00 в шестнадцатеричной СС, 0000 0000 в двоичной СС). До 255 потому, что это максимальное значение, которое можно представить одним байтом в котором во всех разрядах 1 (0xFF в шестнадцатеричной СС, 1111 1111 в двоичной СС).
В signed char самый старший бит отвечает за знак, 1 - это отрицательное число, 0 - положительное.
-128 == 1000 0000 в двоичной СС
-1 == 1111 1111 в двоичной СС
0 == 0000 0000 в двоичной СС
127 == 0111 1111 в двоичной СС

Для других целочисленных типов с размерами 2 байта, 4 байта, 8 байт и т.д. всё аналогично.
105 1613406
>>13354
Господи, когда вы начнете полный контекст читать. Писал выше, на примере детских - знаю все это. На AVR асме писал проги, на других 8бит асмах пишу вставки.

Мне интересна именно практическая х86 ака серьезных процов с защищенным режимом и их взаимодействие с ОС.
106 1613415
>>10764 (OP)
Интересно сколько здесь юзеров в треде. Наверняка не мало. Так вот, вы что-нибудь уже написали? Хочется увидеть реальные проекты. Какой смысл изучать язык ради изучения. Где работающие программы?
image.png60 Кб, 950x889
107 1613500
>>13325
Алсо, оцените обоссыте, будем честны кусок моего кода, который решает аналогичную задачу.
108 1613512
>>1608964 →
В питоне модно сделать исполняемый файл, который будет работать на других ПК? Или обязательно надо питон ставить каждый раз?
109 1613514
>>13512

> Можно



Быстрофикс
110 1613532
>>13512
можно
есть всякие py2exe, python freeze и всякие другие
но они все устроены так: берется интерпретатор и засовывается во внутрь бинаря
крч полная хуйня, на питоне лучше desktop аппликухи не писать возьми c#
111 1613535
>>13532

>возьми c#


Ехало ООП через ООП, сложна! Даже в хелловорлде неймспейс и класс.
Мимо
112 1613542
>>13532
>>13535
В сторону какого языка смотреть для несложных десктопных приложений?
113 1613561
>>13542
Сказали же блядь, С#.
114 1613595
>>11904
правильно я понимаю что этот метод называется переполнением(overflow)?

>>13398
спасибо, анчоус, понял. а в каких случаях нужно использовать эти unsigned, short и лонг. скажи, пожалуйста, молююю
115 1613597
>>13535
Ncurses просто.
116 1613598

>isalnum


Аллаху акбар.

Пиши названия нормально блядь, а не как дебичи, что стандартные функции писали у них были на то причины, что все равно не делает им чести
117 1613599
118 1613619
>>11904
хоть бы код свой сначала проверил прежде чем кидать.
119 1613626
>>13595
>>13595

>а в каких случаях нужно использовать эти unsigned, short и лонг



Ну signed, unsigned в зависимости от того, нужны ли тебе отрицательные числа или нет.

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

И лучше посмотри stdint.h из стандартной библиотеки и возьми за привычку использовать типы оттуда, потому что там разрядность гарантированна стандартом.
120 1613630
чуваки, не занимайтесь х..ней
учите си в 2к20, дак открывайте исходный код modern си проэктов и читайте его, к пример гугловскую фуксию..
удачи ..
121 1613642
>>13626
анон я сделал, определение интедежеров по типу переполнения, ручное вычисление. щас скоро код скину. с floataми пока всё туго, не понимаю нихуя. скоро буду к вам приставать с ними.
122 1613650
Наверняка, анон, тебе всегда было интересно, как выглядит 2 в овердохуятой степени. Дарю уникальную возможность, так сказать. Осталось запилить деление, заменить спринтфы какими-нить шустрыми макросами, ну и всяких корней, логарифмов по-мелочи нахуярить...
https://pastebin.com/rHpxn65x
123 1613651
>>13626
https://pastebin.com/Q20Bmgcz

Вот, анчоусы. Решил задачу 2-1 из k&r теперь и с ручным вычислением диапазанов целых типов. Там вычисления в районе 10-20 секунд идут подождите, вывод не сразу будет. Этот метод переполнение же называется, да?

>>11904
Анон, твой код бесконечный цикл создаёт. Не работает, он.

Осталось только с floatами разобраться
124 1613652
>>13651
Я запостил свой код чтобы вы оценили как вам.
image.png22 Кб, 312x295
125 1613653
я требую внимания, мне скучно блядь
126 1613654
127 1613655
>>13626

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


я возьму это на заметку, анчоус. спасибо, но потом. меня сейчас интересует строго книга k&r её пройду и если там этой библиотеки не косунь, потом ещё твою посмотрю.
128 1613656
>>13651
Ты посмотрел мой код с годболта (>>11947)?
Там нет цикла на миллионы итераций и это намного лучше, чем добавлять по 1. И он работает с флоатами и даблами.
129 1613661
>>13656
нет, я медленно всё переварию. здесь мне очень много помогают и кидают ссылок и я всё это читаю. пока я ещё до твоего пост даже не дошёл, анчоус.
130 1613667
>>13656
а смотрел твой код и после незнакомой библиотеки закрыл вкладку. потому что я учусь по книге мне итак нелегко, а здесь ещё в нагрузку всякие незнакомые библиотеки о которых я вообще не знаю. я уже писал уже неоднократно что меня интересуют только решения при помощи инструментов описанных в книге на тот момент когда появилась задача.

извини, анчоусы, но варианты с незнакомыми мне функциями, библиотеками и прочим с чем я ещё не знаком я не рассматриваю пока.
131 1613672
>>13667
Она не нужна. Просто float и double не достаточно, потому я ещё 128-битную плавающую запятую прикрутил для проверки.

Вот без неё. Там нет библиотек, и max_float я раскрыл без дефайна, можешь только на него смотреть проигнорировав другой код. max_float превращается в max_int заменой float на int без изменения другого кода.
https://godbolt.org/z/vyrk8E
132 1613675
>>13667
Вот вообще безо все, если тебе мозолит глаза и отвлекает эта дичь: https://ideone.com/YoThYK
133 1613677
>>13672
>>13675
спасибо, большое что делаешь это ради меня. уже смотрю...
134 1613680
>>13675
ну не совсем уж без всего continue и <stdlih.h> мне тоже незнакомы. но я попытаюсь разобраться.
135 1613688
>>13650

>2 в овердохуятой степени


Это элементарно в уме считается.
136 1613709
>>13680

><stdlih.h>


Не нужен, случайно оставил.

>continue


Синтаксический сахар, во всех случаях можно заменить на цикл без него: https://ideone.com/8BYmnI
Ещё добавил чтобы на каждом шаге значения переменных выводились для long long и для float, чтобы было понятна суть алгоритма.
137 1613710
>>13709
спасибо, анчоус. буду смотреть.
138 1613713
>>13709
спасибо, идеально. мне там всё понятно. буду теперь на основе этого разбираться и высирать свой кодэ, спасибо ещё раз. скоро решение скину как с floatами. а потом вернусь 1-24 со скобками допиливать
139 1614008
>>13354

> изучение асма как раз нужно заходить со стороны цифровой схемотехники


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

> как к обычно-языку типа си, джавы и т.д


Это и есть обычный язык. Для программиста x86 ничем не отличается от виртуальной машины этой самой джавы. Даже если ты полезешь в конвейер и ниже.
140 1615474
>>13709
анон, а как работает пустой цикл for(;;) без аргументов? я что-то не понимаю. читаю сейчас твой код и не могу понять как пустой for работает. там же условие должно выполняться чтоб он работал а его нету.
141 1615475
>>13709
>>15474
я так понял пустой for автоматически по условию становится равен постоянно true до тех пор пока программа не завершит его returnом
142 1615481
>>15475
не щас проверил он не работает.

>>13709
АНОН ПОЯСНИ ЗА ЭТОТ FOR(;;) ПУСТОЙ КАК ОН РАБОТАЕТ
143 1615488
>>15475>>15481
Можешь заменить на for (;1;) или while(1). Просто бесконечный цикл до return-а.

Всё ещё не уверен, что это хорошая (полезная) задача - 1.24 в разы более программистическая, чем какая-то фигня, где нужно знать про специальные значения по типу inf, про количество значащих запятых (1e40+124e20 строго равно 1e40, что может быть не очень очевидно) - всё это на стадии, когда ещё даже не знаком с continue/break точно лишь замусорит голову, лучше что-то полезное изучить.
144 1615501
>>15488

>Можешь заменить на for (;1;) или while(1). Просто бесконечный цикл до return-а


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

>Всё ещё не уверен, что это хорошая (полезная) задача - 1.24 в разы более программистическая, чем какая-то фигня, где нужно знать про специальные значения по типу inf, про количество значащих запятых (1e40+124e20 строго равно 1e40, что может быть не очень очевидно) - всё это на стадии, когда ещё даже не знаком с continue/break точно лишь замусорит голову, лучше что-то полезное изучить.



Всегда можно будет вернуться с более большими знаниями и переделать. В любом случае лишним не будет. Сегодня желатлеьно 2.1 доделать, а потом 1-24
145 1615512
>>15488
а ты ещё функции вначале не описываешь. в k&r они сперва строчку функции делали, а потом уже её саму писали в конце. надеюсь ты понел о чём я
146 1615519
>>15488
разобрался, анчоус, в алгоритме твоём. прикольный, сам придумал или где увидел когда-то? анон, а вот когда я делал +1 постоянно это же переполнение называется, да?
147 1615674
>>15512
Если функция описывается до ее вызова - то прототип в этом файле не нужен.
Capture.PNG78 Кб, 775x610
148 1615704
>>15674
спасибо, анон. огромное возьму на заметку. алгоритм хороший ты мне подсказал, я теперь его буду везде применять когда нужно будет узнать максимально возможное кол-во чего либо.

а вот здесь в библиотеки флоатов, много различных вариантов их все нужно выводить и рассчитывать? я честно говоря даже не каждый из них понимаю...
Capture1.PNG6 Кб, 645x136
149 1615758
>>15674
>>13709
анон, ты по-моему ошибся здесь с float'ом там -e38 должно быть
Capture.PNG1 Кб, 300x42
150 1615760
>>15758
отклеилось.
151 1615864
Короче сложно слишком, голова уже болит. Лучше продолжу книгу читать и другие задания к этим потом вернусь. К тому же я щас начал читать идущиц подпункт за 2.1 про константы и это то что мне нужно было чтобы граммотно принтить диапазоны раличных типов. В книге действительно задания как-то поспешны даются, не очень удобно
152 1615912
>>15758
Тому что это был код для целых, и под минимальным подразумевалось отрицательное с максимальным модулем, а не число больше нуля с минимальным модулем.
Для дробных стоило бы вовсе другой алгоритм сделать, чтобы для 300 степени не требовалось под 300k шагов, а log(300)*k шагов.

https://ideone.com/LEgATu
Можно заметить, что значение получается ниже чем -38 степень. Там идут так называемые денормализованные числа с пониженной точностью (умножение на 0.75 не изменяет значения в последнем шаге), про которые можно вовсе не знать, если ты не связан напрямую с вычислительными методами.
153 1615917
>>15912
анон, я пока книгу продолжу читать и на упражнения забью, т.к. у меня уже мозг тупо не соображает. может быть я потом вернусь к ним. ты реально тут мне так всё загибаешь, слишком сложно уже
154 1616293
Подхватываю парад тупости, делаю задания от 2. по K&R щя...
Почему у меня UINT_MAX и ULONG_MAX в <limits.h> имеют значения -1? gcc
155 1616294
>>16293
Потому что я тупой, всё, дошло до меня. Пздц, стоило только в тред пукнуть... извините
Снимок.PNG60 Кб, 900x680
156 1616313
>>16293
Короче, знаете, как в <limits.h> определены UINT_MAX и ULONG_MAX? 0xffffffff и 0xffffffffUL
Я всё понимаю, но ничего не понимаю. Почему, если константу-адрес максимального unsigned int'a просто превратить в unsigned long-константу, должны получится разные числа? И как мне вывести само число printf'ом? Эта задача заставляет ебаться меня вовсе не с тем, что предполагал автор задачи, мде...
157 1616315
>>16313
Ну, не "определены", наверное, это же именованные константы, я не знаю, как они и где хранятся, но это неважно
158 1616318
>>16313

скачай лучше вижуал студию, не позорься
159 1616320
>>16318
Для laba1 чисто поебать
160 1616330
>>16313
Сейчас заметил ещё такую хуиту:
unsigned char i = -13 "печатает" i как 243, как и положено
НО unsigned int оставляет -13, хотя, по идее, должно быть, как с char'ом
Меня эти байтоёбские перипетии с ума сведут, объясните, умоляю...
161 1616342
>>16313

>должны получится разные числа


Уточню, что я понимаю, почему они разные с U потому что представление разное, дополнение до 2, вся хуйня, а почему L как-то его меняет с тем же количеством байт, я не понимаю
162 1616344
>>16342
С чего ты взял, что оно его меняет?
163 1616348
>>16313>>16330

>И как мне вывести само число printf'ом?


%d для signed, %u для unsigned. Ещё можешь написать (long long)n и вывести его через %lld, чтобы гарантированно.
printf не знает тип, который ты передаёшь. Ты можешь туда хоть float засунуть под %d, и он напечатает float предполагая что переданные биты - это биты целого числа; естественно выведенное значение не будет иметь ничего общего с числовым значением флоата.
164 1616367
>>16348
А почему он unsigned char тогда правильно обработал?
>>16344
Не знаю, мне казалось, что раз на современных машинах лонг лонг есть, то он не просто так. Хотя, судя по адресу, наверное, просто так. Я лишь предположил, что я что-то не ебу
165 1616369
>>16367
Бля, при чём тут лонг лонг. Короче, не меняет, я понял, окей
166 1616374
>>16369
Кстати, поменялась, действительно, когда я стал использовать %u по совету >>16348-джентельмена. Тогда вопрос, почему поменялось?
167 1616391
>>16374
Бля, объясни что ты делаешь и что у тебя получается, в коде желательно, словами ты не умеешь
изображение.png18 Кб, 665x467
168 1616394
>>16374
Вот это тебя смущает? Что только unsigned char работает в соответствии с ожиданиями?
https://ru.wikipedia.org/wiki/Printf
Ищи в поиске по статье "продвижени". Продвижение типа. Там даже конкретно про unsigned char указано, вроде бы.
169 1616441
>>13406

>Мне интересна именно практическая х86 ака серьезных процов с защищенным режимом и их взаимодействие с ОС.



Там внутренняя кухня так меняется каждый год, каждое новое поколение, что в /hw/ у амуде-интело-срачеров в режиме 24/7/365 жопы горят, каких подробностей ты хочешь?

В х86 настолько помойка в системе инструкций что там существуют аж 3 команды (int 80h, sysenter, syscall в 64-битном режиме) делающих одно и то же.

> практическая х86 ака серьезных процов с защищенным режимом и их взаимодействие с ОС.



Взаимодействие через прерывание и передачу команд.

Взаимодействие с устройством из юзермода, в nix, например, идет через крайне замороченную и дырявую абстракцию типа "специальный файл" обычными fprint fscan , но когда нужно сделать что то странное типа настройки передать - то через системный вызов ioctl
170 1616443
>>16441

А зачем в линуксе развели эту бадягу, с устроством-файл и этими "тут играем, тут не играем а тут ioctl"
171 1616459
char ✸buf = "abcde";
Есть ли способ узнать размер константы? strlen() не подходит, нужен настоящий размер, а там в середине могут быть нули. Компилятор же знает, есть ли способ вытянуть это знание?
172 1616460
>>16459
sizeof(✸buf)
173 1616461
>>16459
sizeof на литерал
174 1616481
>>16460
Разыменовывание в char дает его размер - 1.

>>16461
Лол, круто конечно, но зачем нужен литерал без доступа к нему. Как на него сослаться в таком случае?
175 1616494
>>16481

>Разыменовывание в char дает его размер - 1.


Ой, действительно, это же не указатель на массив. Нет, тогда не получить по buf его размер, делай sizeof("abcde").
1568001858945.png4 Кб, 451x184
176 1616528
>>16494

>делай sizeof("abcde")


Так получается литерал-сирота без ссылок на него.
Попытался накостылять решение. Какого хрена???
Почему у меня на двух разных компиляторах, микрософта и борланда эта скотина конвертирует в указатель, выдавая "4", а на сайте нормально размер литерала "6"?
https://ideone.com/VIRj03
177 1616535
>>16481
#define IMPORTANT_STRING "abcdef"

sizeof(IMPORTANT_STRING)

printf(IMPORTANT_STRING)
image.png5 Кб, 258x108
178 1616538
179 1616540
>>16528

>Так получается литерал-сирота без ссылок на него.


Ну ты так его создаёшь. Хочешь знать размер, делай массивом, а не указателем.
180 1616544
>>16535
Таких строк много, нужно копипастить, а define нельзя переопределять.

>>16538
Вопрос был про получения размера литерала, а не массива.
181 1616550
>>16544

>Таких строк много, нужно копипастить


Копипасти. В чем проблема?

>define нельзя переопределять.


Зачем его переопределять? Каждый дефайн на один литерал.
182 1616551
>>16535
>>16544

>а define нельзя переопределять


Упс, а ведь можно! Спасибо! >>16535
image.png5 Кб, 360x110
183 1616552
>>16544

>Вопрос был про получения размера литерала, а не массива.


А что не так то? Какой размер тогда должен быть по твоему? Даже с терминальным нулем по середине нормально измеряет.
184 1616554
>>16550

>Копипасти. В чем проблема?


>Каждый дефайн на один литерал.


Ты у мамы не очень умный.
185 1616555
>>16554
Мне кажется, ты не совсем понимаешь, что такое литерал.
1455762891746.png8 Кб, 373x423
186 1616583
>>16555
Мне кажется, ты не понимаешь что такое копипастить код когда нужно выполнять несколько одинаковых действий. Обрати внимания, что код одинаковый, кроме собственно литерала, чтобы можно было добавлять и удалить произвольное количество действий простой копипастой и ничего не ломалось.
187 1616587
>>16583
Мда.
Так вот, литерал - это уникальная константа. Поэтому и дефайны должны быть на каждый дефайн свои

#define YOU_LITERAL "you"
#define ARE_LITERAL "are"
#define DUMBER_LITERAL "dumber"
188 1616594
>>16583
Поскольку в сях нельзя включать директивы препроцессора внутрь других, то для этого пользуются инклюдами.
#define LITERAL "one"
#include "printsize.inc"
//в конце можно #undef LITERAL

#define LITERAL "on"
#include "printsize.inc"
189 1616595
>>16587
Лол, просто без комментариев.
190 1616600
>>16583
>>16587
I'm dumber than you both combined, why don't you fuckers use arrays for its intended fucking purpose, when you need to know the size?
191 1616619
>>16594
Здорово. Спасибо за хитрость и дополнение.
192 1616650
>>16595
Чтож, как я и подозревал, ты не понимаешь что такое литерал. Например, 5 это буквально число пять. Ты же пытаешься работать с ним как с переменной.
193 1616655
>>16600
Безымянные литералы массивов нельзя присваивать одной и той же переменной несколько раз. Как результат, копипастить не получится. Хотя, выше запостили трик со скобочками, тоже вариант.
194 1616663
>>16650
Чувак, был запрос на помощь в решении конкретной задачи, простой и ясной. Умные люди помогли найти решение, а ты погрузился в отрицание "почему эта задача неправильная и не нужна", типичный недоумок.
195 1616678
>>16663
В том виде, как ты сформулировал, действительно неправильная и не нужна. Скорее всего ты действительно ламер который делает какую-то ненужную чушь не тем инструментом.
196 1616718
>>16663
Почему он посыпался на строке, выделенной синим?
197 1616720
>>16718
Адресовал случайно, вопрос всем, конеш
198 1616735
>>16718
Кто куда посыпался? Читай про двоичную систему счисления. Какбе нельзя в ней точно выразить деление на 10. (Вроде бы потому что у 5 и 2 нет общего делителя)
199 1616739
>>16735
На пике умножение
200 1616741
>>16739
Да неважно. Десятичные цифры то это десятки.
201 1616758
>>16741
Пойду применю свой мегамозг в попытке понять, чё происходит
202 1616776
>>16739
Лень расписывать все научно, ну как хранятся флоаты в двоичном виде? Это некое число mantiss*2exp
Но под мантиссу выделено фиксированное число битов.
Соответственно в какой-то момент у тебя число перестанет в него влезать. Младшие биты мантиссы потеряются, а множитель мантиссы продолжит расти.
Грубо говоря, было 11111111b x 64, умножаем на 10, там должно было бы стать что то вроде 010011111011b x 128, но в 8 бит это не влезет, поэтому придется порезать мантиссу до 8 старших бит 01001111b и увеличить экспоненту до 1024, в результате мы получаем 162816 вместо 163200
Иными словами шаг между соседними числами будет расти с ростом числа кратно степени двойки, поэтому и вылезет противоречие с десятичными знаками.
Float не подходит для точного поцифрового хранения числа, se la vi.
203 1616982
>>11904
Ночью с ней пердолился, сделал просто (unsigned int) -1 и забил хуй
204 1617041
>>12227
>>16663
Может вам в JavaScript перекатиться? Там можно спокойнее класть хуй на стандарты, писать всякую дичь, браузер и пипл схавает
205 1617155
>>16678
Какой я ламер и какой вопрос глупый нет не имеет значения вообще. Понимаешь, был задан вопрос. Ответов, В ПРИНЦИПЕ может быть только два:
1. Это невозможно.
2. Решение.
Разговор о неправильности задачи и переводе на другую, В ПРИНЦИПЕ не может начаться пока не получен предыдущий ответ. Потому что, только тогда можно (либо/либо):
1. Перейти на другую задачу ввиду невозможности решения предыдущей.
2. Сравнить два решения, старое и новое, и если новое лучше, ТОЛЬКО ТОГДА перейти на него.

Говорить же, что "другая задача лучше", когда не решена предыдущая, это абсурд. Пустое кукарекание дебила, вытащенное из жопы.
206 1617182
>>16718
Потому что float ограничен по размеру и не годится для вычислений. Даже сам язык об этом говорит. Любая дробная константа, например 1.5, это double, float же можно сделать только специально ограничив размер как 1.5f. Короче, float не нужен, за исключением случаев когда действительно именно он нужен по спецификациям.
207 1617184
>>17155

>Аноны, как забивать гвозди микроскопом?


>Лол, микроскопом не стоит забивать гвозди, и вообще в наши дни лучше заменить гвозди на закручивание саморезов


>Неет, ответов В ПРИНЦИПЕ может быть только два


>Это невозможно


>Решение как забивать гвозди микроскопом


Как скажешь.
208 1617187
>>17182
double тут ничем не поможет, ты столкнешься с той же проблемой, просто на пару десятков циклов позже.
209 1617199
>>17187

>double тут ничем не поможет


>тут


Тут нет проблем, вычислений нет, тупо опыт по ломанию переменной.
А я говорю про использование для вычислений, там только double, с float напорешься на косяки в обычных вычислениях.
210 1617201
>>17184
"Выбор", "лучше" подразумевает сравнение - наличие минимум двух вариантов. А у тебя только один, но но утверждаешь что лучший всё равно. Это вера, следствие фундаментальной тупости отдельного человека. Тот, кто предпочитает верить, а не думать, это дебил.
211 1617204
>>17199
А я тебе говорю про использование для вычислений, не используй double, он ничем не поможет будет так же криво, все равно понадобится библиотека для bigint/bignumber а то и символьных вычислений. На крайняк строки.
212 1617208
>>17201
Твоя проблема называется проблема XY. Пока ты не объяснишь, что именно ты хочешь сделать, а только говоришь с помощью чего, никуда продвинуться невозможно. Если тебе нужны строки и их длины, то может оказаться проще вообще генерировать .h файл где будут дефайны и для того и для другого, так и переводить программу на другие языки легче. А может проще взять c++ и нагородить там компайл-тайм строк на шаблонах.
Снимок.PNG25 Кб, 657x504
213 1617212
>>17187
Автор вопроса ИТТ, я немного изучил по вашим наводкам этот вопро и вот што я из этого понял:
Он поплыл при прибавлении к числу ста миллионов, как мы видим. Т.е, при сложении (base 10):
11 111 111
и
100 000 000
происходит какая-то залупа, которая добавляет к числу единицу. Фактически это т.н. floating point rounding error, то есть, десятичное число по основанию 10
1 111 111 111
Не может быть представлено на бинарном уровне (т.е. по основанию 2) как конечная десятичная дробь -- она будет иметь период. Комплюктер, чтобы сделать её конечной, округляет её, выходит число на единицу больше. Я не собираюсь считать это в лоб, потому что мне поебать, но на гипотетическом уровне происходит то, что я сейчас сказал. Т.е. это могло быть и меньшее число в другой арифметической прогрессии.
Дальше идёт тупо накопление погрешностей округления (пикрил). ПОТОМ в какой-то момент заканчивается место в мантиссе числа, и n младших разрядов представления числа по основанию 10, соответственно, выражаются через экспоненту, которая записывается во младших битах, поэтому там тупо нолики хуячат. А потом просто уже переполняется максимально возможное число, разрешённое компилятором и, возможно, при этом архитектурой процессора, но это я не ебу, очевидно, чё там происходит, но он кидает в тебя бесконечность. Всё
214 1617218
>>16459
Никак, char* не сохраняет размер.
Если хочешь размер - напиши char buf[]="", тогда в тебя в типе сохранится и его можно будет через sizeof получать, что в любом случае придётся сделать, если нужно печатать строку через printf.
Я бы вот так сделал: https://ideone.com/TBunV4
printf отказывается печатать строку, даже если явно указать что там 12 символов, но символов 12. Выглядит лучше, чем define/undef, но лишние переменные.


>>16718
У флоата 7-8 значащих цифр, у дабла 15-16. Что такое значащие цифры сам найдёшь.
Вот код: https://ideone.com/ZEj7su
215 1617223
>>17204
Ты прав наверное, просто помню, как-то раз понадобилось, и с float вылез косяк, а double его убрал. Понимаю, что для калькулятора не пойдет, только подумал, что в обычной программе не требуется прям чисто-пречисто.
216 1617230
>>17212
Алсо, пусть это примерно предоставит возможность понять, на какой ответ я рассчитывал, а то тут проблемы с коммуникацией частенько, как я понял
217 1617232
>>17212
Вроде все так.
218 1617234
>>17208
Твоя проблема называется:

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


Исповедь идиота.
219 1617242
>>17234
— Двач-медач, вот у меня почему-то раны вокруг рта…
— Так ты ж ешь с ножа. Ложку попробуй.
— Ложкоблядь закукарекала. Ложкой мне неудобно.
— Тогда йодом помажь, лалка.

— Двач, а почему я суп так медленно ем? И мне очень неудобно.
— Потому что ты ножом суп ешь? Ложкой ешь.
— Ложкобляди не нужны! Бамп! Еще варианты? Бамп!
— Ну отхлебни из тарелки тогда.
— Ебанутые...

— Двач, почему на меня в ресторане так странно поглядывают?
— Потому что ты с ножа ешь!
— Каждый раз одно и то же, что за дебильные анонимусы. А другого объяснения нет?
— Может и есть, но это не важно. Важно есть твердое вилкой, а жидкое ложкой.
— Кажется, я совсем не понимаю мира и не гожусь для этой жизни.
— Да все с тобой нормально, просто возьми ложку, когда принесут суп.
- ПРОСТО! аххахахах! ПРОСТО! Ахуительная история. Угу. ПРОСТО блять. Спасибо, идиоты, за совет, блять.

— Двач, двач! Мне так больно, у меня кровь течет! За что мне это?
— Чем суп ел, дебилушка?
— Ножом, конечно.
— А ложку не пробовал взять?
— Почему анонимусы так безжалостны ко мне, а еще двач-помогач?! Это невыносимо!
— Ложку взять не пробовал?
— Нет!
— А что тебе помешало?
— Я не хочу об этом говорить. Всё. Тред закрыт. САЖИ ТРЕДУ САЖИ. Вайп!

— Знал бы ты, двач, как я хочу макарошек!
— У каждого своя судьба.
— Как ты думаешь, анон, когда-нибудь у меня получится поесть макарон? Я ведь не хочу ничего особенного.
— Так свари макарон, возьми вилку и ешь.
— Да? Хорошо, я подумаю.

— Двач, и как люди манную кашу едят и не режутся?
— Ложкой, блять!!
— А чего ты ругаешься сразу? Я ж нормально спросил...

— Анон, поговори со мной.
— Я обедаю.
219 1617242
>>17234
— Двач-медач, вот у меня почему-то раны вокруг рта…
— Так ты ж ешь с ножа. Ложку попробуй.
— Ложкоблядь закукарекала. Ложкой мне неудобно.
— Тогда йодом помажь, лалка.

— Двач, а почему я суп так медленно ем? И мне очень неудобно.
— Потому что ты ножом суп ешь? Ложкой ешь.
— Ложкобляди не нужны! Бамп! Еще варианты? Бамп!
— Ну отхлебни из тарелки тогда.
— Ебанутые...

— Двач, почему на меня в ресторане так странно поглядывают?
— Потому что ты с ножа ешь!
— Каждый раз одно и то же, что за дебильные анонимусы. А другого объяснения нет?
— Может и есть, но это не важно. Важно есть твердое вилкой, а жидкое ложкой.
— Кажется, я совсем не понимаю мира и не гожусь для этой жизни.
— Да все с тобой нормально, просто возьми ложку, когда принесут суп.
- ПРОСТО! аххахахах! ПРОСТО! Ахуительная история. Угу. ПРОСТО блять. Спасибо, идиоты, за совет, блять.

— Двач, двач! Мне так больно, у меня кровь течет! За что мне это?
— Чем суп ел, дебилушка?
— Ножом, конечно.
— А ложку не пробовал взять?
— Почему анонимусы так безжалостны ко мне, а еще двач-помогач?! Это невыносимо!
— Ложку взять не пробовал?
— Нет!
— А что тебе помешало?
— Я не хочу об этом говорить. Всё. Тред закрыт. САЖИ ТРЕДУ САЖИ. Вайп!

— Знал бы ты, двач, как я хочу макарошек!
— У каждого своя судьба.
— Как ты думаешь, анон, когда-нибудь у меня получится поесть макарон? Я ведь не хочу ничего особенного.
— Так свари макарон, возьми вилку и ешь.
— Да? Хорошо, я подумаю.

— Двач, и как люди манную кашу едят и не режутся?
— Ложкой, блять!!
— А чего ты ругаешься сразу? Я ж нормально спросил...

— Анон, поговори со мной.
— Я обедаю.
220 1617264
>>17218

>Я бы вот так сделал: https://ideone.com/TBunV4


Красиво, ничего не скажешь.
221 1617294
>>17218

>Вот код: https://ideone.com/ZEj7su


Чекнул, это ты эпсилон нашёл, получается?
222 1617342
>>10764 (OP)
Чем автоматически доступ мимо массива найти? Его нет, но мне кажется, что может быть, а считать в голове сложно, я что калькулятор?
223 1617368
>>17342

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



Ты по-русски сначала писать научись, мысли свои выражать, а там и с массивами приложится всё.
224 1617377
>>17368
Я не думаю, что ты способен мне помочь, но объясню попроще. Есть массив int foo[10]. Мне надо найти, если вдруг где-то в программе есть bar = foo[11], или baz = foo[10]. Программа не валится с sigsegv, значит сейчас этого нет, но может быть при определенной комбинации параметров это может случиться. Нужна программа, которая может найти такие параметры, или сказать, что таких параметров 100% нет.
225 1617384
>>17377

ну в Си вообще плохо всё с проверками границ массивов. Некоторые параноики пишут макросы(функции) - обёртки, которые проводят рантайм проверки. Ещё тебе могут помочь всякие статические анализаторв кода. Но общая задача статического анализа кода на такие ошибки равносильна решению задаче останова, так что 100% не будет тебе.
226 1617387
>>17377

>bar = foo[11]


У меня ide выдаёт предупреждение от такого.

Посмотри что такое valgrind, например - даже если тебе нужен не он, с него выйдешь на схожие инструменты.
227 1617388
>>17342
Уфф, мой начальник что то подобное на плюсах делал.
В общем, для начала надо обернуть создание таких массивов в функцию или макрос (new же вроде тут нет) да и доступ лучше сделать не через [] а через геттер.
Суть в том чтобы создавать массив больше размером, и снизу и сверху. И заполнять его контрльными данными. Например
55 AA 55 AA 55 AA 00 01 02 03 04 05 55 AA 55 AA 55 AA
А в геттере проверять что данные не совпали с контрольными. Конечно там будут ложные срабатывания, но хоть что-то.
228 1617393
>>17342
Еще нагуглил что если размеры известны то что-то может найти статический анализатор, например опция -fsanitize=bounds
229 1617394
>>17384
Не, ну классно. Взял, расширил мой вопрос до статического анализа, и сказал, что на этот вопрос ответа не существует. Спасибо.

>>17387

>valgrind


У них даже на википедии написано, что именно это он не умеет. Да и вообще я просто небольшой текстовый анализатор хотел, а не рантаймовый. В рантайме, как я уже сказал, всё и так работает.

>>17388
Да это понятно, что можно, но мне просто найти
foo[bar]
for (int i; i<=bar;bar++)
{foo=3};
даже аллоки без фри искать не надо.
230 1617401
>>17387

>У меня ide выдаёт предупреждение от такого.


Ну и да, естественно, foo[11] и компилятор находит. А foo[bar ⛧ bar - 3 ⛧ baz],
231 1617402
>>17394

>{foo=3};


{foo=3};
232 1617403
>>17402
Макаба, перестань есть мою [ i ]
233 1617410
>>17401
Попробуй загнать в статический анализатор. PVs Studio например.
image.png38 Кб, 354x117
234 1617652
Вырезаю из строки часть выделенную //. Чому p_end не ищет то шо нужно?
#include <stdio.h>
#include <string.h>
int main() {
char test1[50] = "2ch pomozhet/ ne pomogay podumoy /vsegda";
char p_start, p_end;
// for(int i = 0; '\n' != (str = getchar()); i++);
p_start = strcspn(test1, "\");
p_end = strcspn(test1, "
/");
printf("p_start = %d\n", p_start);
printf("p_end = %d\n", p_end);
for(int i = 0; i < p_start-1; i++) {
printf("%c", test1);
}
for(int i = p_end; i <= '\0'; i++) {
printf("%c", test1);
}
printf("\n");
return 0;
}
235 1617702
>>17388

>Уфф, мой начальник изобретал C++ из соплей и палок


Необучаемые.
236 1617741
>>17702
ООП на С для тебя странность?
237 1617835
>>17702
Ты не понял, я писал о том, что он реализовывал это в C++ (переопределяя new/delete)
238 1618081
>>17394

>Не, ну классно. Взял, расширил мой вопрос до статического анализа, и сказал, что на этот вопрос ответа не существует. Спасибо.


>Да и вообще я просто небольшой текстовый анализатор хотел, а не рантаймовый. В рантайме, как я уже сказал, всё и так работает.



ты не очень умный. я тебе объяснил, почему вопрос не имеет ответа на "100 процентов", твой "небольшой текстовый анализатор" эквивалентен задаче останова. Потом дал два практичеких приближения. но как я уже говорил, твоя проблема не массивах и сишечке, а в неспособности символы переводить в смыслы и обратно.
239 1618248
>>18081

>Найти bar = foo[11]


>Ета задача останова! И ты тупой!


Ебать ты долбоёб, братишка, соболезную.
240 1618253
>>18248
Даня Крюгер, ты?
241 1618408
>>18248

Если тебя интересует (не рантайм)проверка выхода за границы массива по константным индексам, то тебе кланг например, сам выдаст ворнинг. Если по индексам, которые хитровыебанно вычисляются - то это эквивалентно задаче останова. напиши интерпретатор брейнфака или любого другого тьюринг полного языка, пускай есть переменная j, в начале там 0. ты периодически выполняешь по шагу своей программы в интепретаторе, а потом выдаёшь на печать значение массива foo[j]. если интерпретируемая программа заканчивается, пишешь в о 12. Так вот если бы твоя простенькая статическаая проверка существовала, ты бы решил задачу останова таким нехитрым образом.

но мне кажется, ты толлишь тупостью.
242 1618416
>>18408
Двачую. А то может у него вообще размер пользователем вводится, тогда вообще можно тушить свет.
243 1618562
А я просто эту хуйню решаю, если размер много где используется, то объявляю его в дефайне, а потом этот дефайн везде подкладываю, где возможен выход за границы. Правда яшитаю в 90% массивы зло и нахуй не нужны. Дали тебе маллок и фри - нет хочу говно есть и дрочить несчастный стек
244 1618572
>>18562

> дефайн везде подкладываю


Пиздец. Держи забытые технологии древних: #define countof(array) (sizeof(array) / sizeof((array)[0])) только с указателем не вызови случайно
245 1618576
>>18572
Ага, и везде вместо говорящего дефайна использовать макрос, который ещё каждый раз в рантайме будет считать значение из констант. Охуенно, производительно
246 1618580
>>18576

Если у тебя компилятор не от хлебушка, то на нормальном уровне оптимизации заменится на константу (для не ВЛА).
247 1618588
Забытые технологии древних.
248 1618620
А в чем разница, если я объявляю j внутри цикла или в скобках for? Я вижу, что поведение j от этого меняется, а как и почему - не понимаю.
for (int i = 2, j = 2; i < len; i++)//можно объявить j здесь
{
int j = i; //а можно здесь
}
249 1618670
>>18620
Сорян, затупил на несвежую голову. Очевидно, что если объявлять в for, то она только 1 раз объявится и будет сохранять значение на все итерации, а если внутри, то с каждой итерацией значение будет перезаписывать на i.
250 1618694
>>18670
Если не брать в расчёт оператор continue, то цикл
for (чёто1; чёто2; чёто3) { хуйня };
Эквивалентен
чёто 1; while(чёто2) { хуйня; чёто3 };
251 1618695
>>18694
Кстати, мне компилятор не разрешает объявлять переменную внутри for, хз как вы ето делоете
252 1618696
>>18695
На си никто не пишет.
253 1618701
254 1618719
>>18695
Это еще что, раньше вообще так писали
func(x, s)
int x;
char* y;
{
...
}
255 1618728
>>18719
На класс похоже. Опередили время.
256 1618931
>>17652
бамп
257 1618939
>>18931
У тебя разметка поехала. Непонятно что в коде.
Но вроде все правильно, ты искал слеш - нашел первое вхождение слеша.
258 1618968
>>17652
Если ты имеешь в виду найди позиции обоих слешей, то можно делать что-то вроде
p_start = strchr(str, '/');
p_end = strchr(p_start+1, '/');
Естественно тут надо проверять что p_start не вылезает за границы строки.
259 1619268
>>18576
>>18580
VLA нинужны, для всего остального sizeof гарантированно считается на этапе компиляции, с любым уровнем оптимизации. И да, countof(unique_names) гораздо понятнее, чем всякие NUNQNM да, почему-то экономить буквы любят именно адепты подхода "задефайним размер массива где-нибудь в жопе"

>>18588
Кого ты наебать пытаешься? У одного байткод (и да, UBOUND был в старых бейсиках?), у второго дебаг-сборка.

>>18968

> Естественно тут надо проверять что p_start не вылезает за границы строки


Оно NULL вернет, если что. Но там не нужны никакие strchr, нужно просто завести флажок и идти циклом по строке. По / менять состояние флажка. С взведенным флажком мы символы пропускаем, со сброшенным - копируем.
260 1619275
>>18968
https://pastebin.com/jVwxcRR4
Сорян шо сразу на пастбин не выложил
Ну я ищу две строки "/" и "/"
p_end мне выдает тоже шо и p_start, счас снова прочел описания функций и понел шо я не правильно понял их назначения, блят вот я слоупок.

Здравым ли будет алгоритм искать сначала например слеши и потом проверять нужную звездочку с необходимой стороны?
261 1619391
>>19268

>VLA нинужны



Так то самый удобный способ работать с динамическими двумерными(многомерными) массивами.
262 1619519
>>19391
Этот вопрос тут поднимался много раз. Вкратце: если у тебя VLA неизвестного размера, ты всегда можешь выделить слишком много и получить переполнение стека, которое по-нормальному хуй обработаешь. Если ты заранее знаешь максимальный размер, то тебе не нужны VLA - ты можешь сразу выделить массив этого размера на стеке. Если ты не знаешь и не можешь предсказать размер, тогда у тебя есть malloc(), ошибки которого, в отличие от VLA, можно худо-бедно обработать. Все это касается в том числе и alloca() - нужно сильно подумать перед тем, как ее использовать.
263 1619522
>>19268

>VLA нинужны


Ты просто не умеешь ими пользоваться.
264 1619584
>>19268

>Кого ты наебать пытаешься этой годнотой? Я лучше говна пожру.


Сам себя наебал и доволен. Дожили.
265 1619601
>>19391
Что за VLA? Почему бы не использовать связные списки для этого?
266 1619604
>>19601

>Что за VLA?


Нестатические массивы:
int i = get_random_number();
int a;
Такого нигде нет, кроме какой-то новой версии именно Си (в плюсах тоже нет).
Массивы обычно статические, в объявлении размер должен быть только константой.

>Почему бы не использовать связные списки для этого?


Потому что вкатывальщикам так проще. Лепишь тупо массивы везде, и оно работает на уровне лаба1, не нужно больше ни о чем думать.
267 1619605
>>19604

> int i = get_random_number();


> int a[i];


скобки съело
268 1619608
>>19604
У GCC/MinGW такое прокатывает.
269 1619609
>>19604

>кроме какой-то новой версии именно Си



Этой "новой версии" сто лет в обед. С99 называется.

>>19519

>Вкратце: если у тебя VLA неизвестного размера, ты всегда можешь выделить слишком много и получить переполнение стека



Положняк такой: не нужно использовать VLA для явного выделения массива на стеке. Но VLA очень хороши для маллоканья двумерных(многомерных) массивов, передачи многомерных массивов в виде аргументов в функции. Обычный способ маллокать двумерный массив - либо делать ручную арифметику(БУЭЭ!!) либо делть массив указателей на указатели, маллокать в цикле, освобождать потом тоже в цикле(БУЭЭЭ!!!11)
Двумерный массив n x m выделяется так с помощью VLA.

int (ж mas)[m] = malloc (sizeof(int) ж m ж n);
или
int (ж mas)[m] = malloc (n ж sizeof mas[0]);
но последний способ технически UB (в этом месте в стандарте по-ебанутому написано)

потом обращаешься
mas[j] = hui;
как к обычному двумерному массиву.

освобождаешь
free(mas);

Замечу, что в тот момент когда VLA описывается. фиксируется его размер, в смысле, если мы после того маллока поменяем m, поведение массива не поменяется.

а объявлять сразу VLA на стеке - да, плохая затея (впрочем я очень сомневаюсь, что проблемы могут возникнуть, если делать это в пределах нескольких кб)
270 1619610
>>19609

>потом обращаешься


>mas[j] = hui;



mas[a] = hui;

парсер
271 1619611
>>19610с

аа!!

mas[k][l] = hui;
272 1619612
>>19604
А, ок, спасибо. Ну тоже хорошая вещь, в яве такое прокатывает, почему бы и в си не?
273 1619616
>>19609

>Обычный способ маллокать двумерный массив - либо делать ручную арифметику(БУЭЭ!!)


>так с помощью VLA


>int (ж mas)[m] = malloc (sizeof(int) ж m ж n);


>sizeof(int) ж m ж n


А это что, не арифметика, или может НЕ ТА арифметика, лол?

>>19612

>в яве такое прокатывает, почему бы и в си не?


Вот именно, тут кроется огромная ловушка для подобных макак. И из за того, что "прокатывает" они так ничему и не научатся и будут писать неправильный код, даже не подозревая об этом. А когда потом где-нибудь программа от этого выпадет, они скажут: "си - нестабильное говно, вот на моей джаве всё заебись".
274 1619620
>>19616

>>19616

>А это что, не арифметика, или может НЕ ТА арифметика, лол?



mas[k ж m + l] не в кайф писать, когда можно mas[k][l].
Если массивы многомерные, то первый вариант вообще станет уродливым. Вот что я под ручной арифметикой подразумеваю.
275 1619622
>>19620

для обрашения к элементам массива, конечно же
276 1619629
>>19620
Точно. С одномерным и так работает, а про многомерный не подумал, что в типе нужно хранить еще размер массива. Статический можно объявить, а динамический без VLA нет.
277 1620169
>>19609
Окей, убедил, имеет некоторый смысл.
278 1620208
Подскажите плз, как сделать внутренний цикл добавляющим символ$.
279 1620222
>>20208
for (i=1; i<=5; i++)
{
for(j=1;j<=i;j++)
{
printf("$");
}
printf("\n");
}
280 1620223
>>20208
Чиво бля?
[code]
int main() {
for (int ii = 1; ii < 6; ++ii) {
for (int i = 1; i <= ii; ++i) {
putchar('$');
}
putchar('\n');
}
return 0;
}
[/code]
281 1621060
Аноны, как на пердолю mint накатить компилятор и вообще какие там компиляторы for perdoliya есть?
282 1621068
>>21060

>какие там компиляторы for perdoliya есть



пиши в терминале

gcc govno_proga.c

чё это вообще означает, "для пердоли", он должен сам за тебя код писать?
283 1622971
Пишу для ананасов, с которыми общался месяц назад на счет реализации SWIM прошивальщика для STM8 на другом, более мощном, микроконтроллере.

Таки вышло эту хуйню запилить, данные отправляю обычным GPIO bit-bang, написанном на ассемблере для исключения влияния оптимизаций компилятора, пайплайна процессора и прочей хуйни. Принимаются же данные с помощью счетчик+DMA на другом пине, который тоже подключен к SWIM пину стмки (отправлять и отправлять данные на одном пине одновременно ну никак не выйдет).
284 1623526
>>22971
1-Wire протокол и принимает и передаёт данные по одному pin-у
unnamed.jpg27 Кб, 512x310
285 1624529
Аноны, хэлпаните. Хочу написать программу которая получает значения, делает по ним форумул согласно методу Наименьших квадратов и строит функцию этой формулы на графике типа пикрил.

Так вот, есть ли на си какие-нибудь либры нестандартные чтобы подобные графики как пикрил принтить? разумеется в консоле рисовать его мне нахуй не надо это маразм.
image.png1 Мб, 640x640
286 1624695
Просто делюсь с вами, какой я феерический мудак, еблан, бес, черт и хуила. Вот эту хуету меня просят уже год. Да, до сих просит, потому что она хуево работает. dhnetsdk конечно показывать не буду, посадят нахуй, а cJSON - маленькая штука, спизженная с гита какого-то чела (внезапно влом руками жсонить). Это пиздос, как же я проигрываю с говнокода лютого. Захожу через удаленный рабочий стол на серверный комп, чтоб вручную там файлы менять и запускать, и потом через веб-клиент проверять результат работы, о я ебу. Она у них на полном серьезе крутится, логи хуярит, я не шучу, нахуй.
https://pastebin.com/9WvRhej9
https://pastebin.com/4ax0NV1V
первое - собсно ПРОДУКТ (ух бля)
второе - тестовый клиент
я ебал
287 1624738
>>24695

>я ебал


Си тут нинужон, любая реализация на скриптовом яп будет на 10 строк.
288 1624766
>>24738

>скриптовом


Вот так просто. А там же API китайский хуйти какой
289 1624781
>>24695
И сколько такой пиздец стоит?
290 1624871
>>24781
Да нисколько, просто ковыряю (раз в два месяц, бля), как свое дите проблемное. Насосусь хуев на настоящей работе, вечером зайду на полчасика "пофиксить" и дальше забиваю.
291 1624874
>>24781
Хотя изначально говорили заплатят, но мне сейчас похуй
292 1625086
#define debug_print(fmt, ...) do { if (DEBUG) fprintf(stderr, fmt, __VA_ARGS__); } while (0)

Проблемный макрос. Так "debug_print("message");" - не работает, нужно указать второй аргумент - "debug_print("message", i);" - тогда пашет. Можно как-то сделать чтобы оба варианта работали?
293 1625115
>>25086

>#define debug_print(fmt, ...) do { if (DEBUG) fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)

295 1625159
>>25117
Сойдет, спасибо.
296 1625224
Сап.
Вот могу я обьявить функцию так: void funk(struct a){...}

И могу так: void funk(struct &a){...}

Сама структура является указателем: typedef struct zopa
a;

Вопрос: какое из двух объявлений будет самым эффективным по памяти? Или разницы вообще нет?
297 1625225
>>25224
Ебал я в рот эти сраные звёзды *.
298 1625228
>>25224
Если у тебя уже

>typedef struct zopa a;


То ты нигде не должен писать funk(struct &a), а должен писать funk(a entity)
299 1625246
>>25228
Там

>>typedef struct zopa звезда_ебаная a;


И в gcc запись &а тащит.
А чо за entity?
300 1625253
>>25246

>>>typedef struct zopa звезда_ебаная a;


Это означает, что вместо struct zopa звезда_ебаная ты должен писать a.

>И в gcc запись &а тащит.


Ты скорее всего не понял, откуда она там взялась и что означает. В определениях функций вообще так
void funk(type &a){...}
быть не может в С. Это сиплюсплюсный синтаксис, который называется ссылкой.

>А чо за entity?


Просто слово, чтобы обозначить структуру, или переменную, или функцию. То, на что можно указать. В
int k = 4;
k будет entity, переменная типа int.
301 1625254
>>25224
>>25253
Вот кароч: https://ideone.com/QoA13D

>>25228
Блин, и правда, похоже что это фишка плюсов... Но вопрос про память остается открытым
302 1625256
>>25253
Тогда в догонку:
А можно объявить массив ф-ций?
entity a[10];
a[0] = printf;
303 1625261
>>25256
Я плохо объяснил, что такое entity, и ты не понял. Это никакой не термин, так что просто не используй его.

Массив функций объявить нельзя, потому что функции разного размера, а массивы состоят из элементов одного размера.
304 1625265
>>25254

>Блин, и правда, похоже что это фишка плюсов... Но вопрос про память остается открытым


Спрашивай в с++ треде, я не знаю.
305 1625274
>>25256
Можно объявить массив указателей на функции
306 1625305
>>25256
Функции это код, массив структура для хранения данных, так что массив функций сделать не выйдет, но можно сделать массив указателей на функции.
307 1625478
>>25305
>>25274
Как это можно устроить?
308 1625481
>>25478
Зависит от функции.
309 1625486
>>25481
Допустим обычный abs()
310 1625494
>>25486
int (*pabs[10])(int x);
311 1625504
>>25086
Все гениальное (и портабельное, в отличие от трюка с ##) просто: #define debug_print(/∗fmt, ∗/...) do { if (DEBUG) fprintf(stderr, __VA_ARGS__); } while (0). Найди два отличия. Алсо, if (DEBUG) плохой тон (если это не переменная, конечно), надо делать #ifdef DEBUG. Банально потому что иначе какой-нибудь компилятор может высрать тонну предупреждений про unreachable code.
312 1625506
>>25494
Ok, попробую
313 1625508
>>25494
А шоб разные ф-ции были? Ну та
314 1625511
>>25508
ну там abs и inc?
315 1625519
>>25508

массив указателей на разные функции можно, если у них одинаковые сигнатуры (типы параметров и тип результата), ну это просто следствие того, что все элемнты массива должны быть одного типа.
316 1625526
>>25511
Самый простой способ - кастить к uintptr_t, но это формально UB. Правильный способ:
1) Ты собираешься вызывать эти функции, поэтому ты по определению знаешь их типы. И если типы разные, кладешь их в uinon:
typedef int IntFuncType(int);
typedef double DoubleFuncType(double);
typedef union { IntFuncType ∗as_int; DoubleFuncType ∗as_double; } FuncPtrType;
2) Возможно, что тебе понадобится запоминать еще и тип:
typedef struct { FuncPtrType ptr; enum { INT_FUNC, DOUBLE_FUNC } kind; } FuncPtr;
3) Ну и складываешь:
FuncPtr pointers[10];
pointers[0].ptr.as_int = abs;
pointers[0].ptr.kind = INT_FUNC;
pointers[1].ptr.as_double = fabs;
pointers[1].ptr.kind = DOUBLE_FUNC;
Разумеется, все это можно обернуть в макросы, а макросы в _Generic.
317 1625527
>>25526
>>25511
Ахда, никогда не делай >>25494 так, если не хочешь, чтобы тебя проклинали. Еще ни у кого не отвалилилсь руки от одного тайпдефа.
318 1625535
>>25527
Я люблю эзотерические объявления. Хе-хе. Но не делать, а читать.
err000.png6 Кб, 575x37
319 1625671
>>25504

> Алсо, if (DEBUG) плохой тон (если это не переменная, конечно), надо делать #ifdef DEBUG


У меня так и записано, то я пример со стековерфлоу скопировал.

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

error: expected parameter name, found "/"
#define derr(/ fmt, /...) fprintf(stderr, __VA_ARGS__); stop();
320 1625809
>>25671

> да и я такого рода запись вижу впервые


Да это обычный многострочный комментарий, лол. А ты между / и ∗ пробелов понатыкал, еще бы оно работало. Имелось в виду "убери fmt из аргументов, оставь только __VA_ARGS__", а комментарий - напоминание читающему о том, каким именно должен быть первый аргумент макроса.
zvezd.png3 Кб, 173x73
321 1625826
>>25809
Ну это очень не очевидно было учитывая отображение на борде.

Способ крутой конечно, как я только сам до этого не додумался, спс.
322 1626076
>>25826
Линукс поди. Такой-то дерьмошрифт.
323 1626090
>>26076
Откуда вы такие лезете, блять?
324 1626131
>>23526
1-wire - низкопроизводительная и простая хуита для датчиков, спроектированная специально чтобы иметь возможность крутиться на медленных мк; SWIM несопоставимо сложнее и быстрее.
Для 1-wire ни счетчик, ни DMA не нужны, можно отправить сигнал по гпио и сразу же брать и ебать гпио инпут регистр в цикле.
В SWIM, помимо проблемы большой частоты, еще в некоторых случаях нужно получать входной сигнал с стмки и в то же время отправлять сигнал.
Capture.PNG10 Кб, 504x320
325 1626774
Аноны. КАК СДЕЛАТЬ ПОДОБНЫЙ ГРАФИК НА СИ? КАКИЕ ЕСТЬ БИБЛИОТЕКИ? ЧТО ЕСТЬ? Или мне в С++ тред идти сразу?
326 1626775
>>26774
OpenGL же

Причём просто точками и всё
327 1626776
>>26775
всмысле просто точками, а что он линию провёл как на графике никак низя?
328 1626778
>>26775
хоршо, спасибо большое. а можно через визуалку(визуал студио) прикрутить на сишную программу gui?
329 1626783
>>26776
>>26778

Я любитель, но вот как я себе это представляю

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

Там для DrawArrays надо и координаты двухмерные и массив на цвета

Создаёшь этот массив с координатами и прозрачными цветами

Потом в цикле согласно функции закрашиваешь каждую точку

Возможно есть и либы, которые это проще рисуют
330 1626787
>>26783

>Создаёшь этот массив с координатами и прозрачными цветами



>Потом в цикле согласно функции закрашиваешь каждую точку



Пиздец нахуй.
331 1626791
>>26787
Даже не знаю что тебе ответить. Если знаешь вариант проще, то даже лучше.
332 1626796
>>26791
ну ладно, я так глянул open gl там впринципе можно даже 3d игры писать. помню ретурн вольф на нём был. ладно, спасибо. щас пойду осваивать.

а можно gui формы через визуалку на си программу прилепить чтобы она консольный вид не имела?
333 1626800
>>26796

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



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

GLFW альтернатива, я её ещё пока не использовал, но англ сайтах пишут, что она круче glut
334 1626804
>>26800
Да, для тебя GLFW будет даже лучше, ща гялнул, там намного проще даже glut
335 1626807
>>26800
>>26804
спасибо огромное понел. анон, а вот то что я на opengl напишу, это на том компьютере где оно будет запускаться должен быть он установлен да?
336 1626808
>>26774
https://github.com/google/skia/blob/master/experimental/c-api-example/c.md
Но да, с GUI у сишки все традиционно хуево. Если у тебя винда, можешь на Windows API нарисовать, это относительно просто. Можешь вообще осилить слинковаться с gnuplot.

>>26800

> я использую glut


> GLFW альтернатива, я её ещё пока не использовал


Как там в 2000х?

>>26796

> а можно gui формы через визуалку на си программу прилепит


Создаешь .rc-файл, рисуешь диалог, потом DialogBoxParam, все.
337 1626809
>>26807

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



Он в венде есть по умолчанию, только подключение Lib GLFW потребуется - скачать и подключить

>>26808

>Как там в 2000х?



Напиши альтернативы, я сам не знаю.
338 1626814
>>26808
>>26808
спасибо анон. два винда у меня, и использоваться она будет под окнам.
339 1626816
>>26809

> я сам не знаю.


Ты сам написал - glfw. Но рисовать на OpenGL двадэ графики линиями это такое себе. Например, glLineWidth уже овердохуя лет как "сломана" в не-legacy контекстах.

>>26814
Если тебе на один раз - рисуй через GDI и не еби себе мозг. Примеров в сети овердохуя. Вот рандомный: http://www.cplusplus.com/forum/windows/227328/
340 1626817
>>26816

>Но рисовать на OpenGL двадэ графики линиями это такое себе



Точками же, это с моей точки зрения максимально просто и понятно.

Я просто с 2013 на freeglut и удивлён чего это его все так поносят. Что с ним не так, кроме старости?
341 1626821
>>26816
это для 2д графиики лучше подойдёт?
342 1626822
>>26817
Контекст у тебя какой? 2.1? glBegin/glMatrixMode и вот это все? А так, хуже glut только aux, а с glfw работать приятно, он для людей.
343 1626824
>>26816
Анон, может мне лучше на с++ написать её тогда раз Си с графикой не дружит?
344 1626829
>>26822

>Контекст у тебя какой? 2.1?



Хы, да.

>glBegin/glMatrixMode и вот это все?



Нет, glDrawElements или glDrawArrays

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

Управление, да, но решение нашёл.

Однако я нашёл LearnOpenGL, так что скорее всего перекачусь на него, потому что я малость повоевал и сделал свой аналог дельты.
346 1626994
>>26824

используй sdl2 и не еби вола
347 1627009
1
348 1627058
Этот тред это полный пиздец. Ебучая нейросеть
349 1627059
>>27058
Что тебе не нравится? Собираем массивы фукций, со дня на день уже ООП прикрутим.
350 1627632
>>26824
Этот товарищ тебе тоже не особо поможет.
Хочешь просто - пиши на шарпах, даже не придется другую IDE качать.
351 1627875
>>27632
шарпы мне не нужны, спасибо.
352 1627877
>>27632
да я вот сомтрю в визуалке есть gui для c++ его заюзать может?
353 1627922
>>27632
Этот товарищ уже посоветовал Skia и GDI из Windows API. С тех пор график уже можно было десять раз нарисовать.
354 1627926
>>27922
Я уже изучаю. спасибо, анчоусы. решил что буду на с++ писать использую gui от визуалки.
355 1628028
>>27922

>>Этот товарищ


В смысле с++ ему не поможет.

>>27926
Ты хотел просто нарисовать, я тебе про шарпы говорю про той причине, что там есть в коробке, например, Chart - подавай массив точек в него и у тебя уже будет нарисован график, который тебе конструктор форм в два клика сделает.
Но ты сам выбрал писать всю логику заново на плюсовом гуе, где это более заебно.
356 1628094
>>10764 (OP)
Напомните кто-нибудь, как быстро и наиболее эффективно, посчитать количество единичных бит в байте?
Что-то вроде:

>n = (n>>1)&0x55 + (n&0x55);


но это не то...
358 1628099
>>28094

>посчитать количество единичных бит в байте?


Циклом, ну или портянкой if'ов
359 1628103
Попас
360 1628118
>>28094
((a & (1 << 0)) >> 0) + ((a & (1 << 1)) >> 1) + ((a & (1 << 2)) >> 2) + ((a & 1 << 3)) >> 3) + ((a & (1 << 4)) >> 4) + ((a & (1 << 5)) >> 5) + ((a & (1 << 6)) >> 6) + ((a & (1 << 7)) >> 7)
361 1628125
>>28097
Оно каждый бит считает.
>>28099
Пффф, ещё лучше.

Вот, нашёл, на хабре - в три инструкции:
https://habr.com/ru/post/276957/

>n = ((n>>1) & 0x55) + (n & 0x55);


>n = ((n>>2) & 0x33) + (n & 0x33);


>n = ((n>>4) & 0x0F) + (n & 0x0F);


Есть чё нить более эффективное для произвольных длин?
Скажем, задача, подсчитать количество единичных бит в большом - байтовом массиве.
362 1628126
>>28118
Уж лучше тогда цикл. По крайней мере, развернуть его компилятор и сам может. И даже на popcnt осилит заменить.
363 1628128
>>28125

> Оно каждый бит считает.


Лолшто? Каждый бит - это sizeof(n) * CHAR_BIT.
364 1628134
>>28118
a = 100; //1100100, (3 ones)
result = 2.
365 1628144
>>28128
Я имел в виду, что оно каждый бит пробегает: https://rextester.com/IAXZKO9143 , а потом складывает.
8 итераций цикла для числа 255
366 1628147
>>28144
Там ниже ускоренные варианты есть. Правильное решение такое: тестить в рантайме, есть ли popcnt, и если он есть, юзать его (лучше интринсиком, но можно и ассемблерной вставкой), а на случай, если нету, сделать лукап-табличку (которая тоже есть и по моей ссылке, и по твоей на хабре) для байта и бегать по ней.
367 1628154
>>28147
Благодарочка.
368 1628225
>>10764 (OP)
Аноны поясните вот этот эффект

>>405430


>>405476


>>405477



Почему там не получается без volatile?
370 1628228
>>28227
Потому что компилятор соптимизировал твою it нахуй в while(it). Программа может туда попасть из while(1) только если it==1, никаких других действий между этими моментами нет, значит it всё ещё равно 1.
371 1628230
>>28228
Есть прерывание.
372 1628235
>>28230
Оно в коде меняет значение it?
373 1628236
>>28235
Да. Там же второй скрин.
374 1628243
>>28236
Поигрался с фоагами и компиляторами на https://godbolt.org, не нашёл такой комбинации, которая оставляла бы первую проверку и съедала бы вторую. Но всё равно считаю, что такое возможно и именно это происходит.
375 1628244
>>28243
Оно не оставляет первую проверку (ну как я понял из вопроса). Оно не смотря на то, что переменная изменяется, считает ее неизменяемой и равной 0. Видит while и просто ебашит while(true);

Судя по описанию.
376 1628245
>>28244
Я так понял, у него в нужный момент он мигает, а вот потом уже не пищит, или что он там задумал сделать после while(it);
377 1628250
>>28245
Вот сгенерил тебе пример на AVR, т.к. по себе знаю он такой же херней страдает.

https://godbolt.org/z/7j5vTU

Асм там довольно человекочитаемый.

>Я так понял, у него в нужный момент он мигает, а вот потом уже не пищит, или что он там задумал сделать после while(it);



Да я протупил. У него действие 2 должно дрочится пока кнопку не нажмет.
378 1628252
>>28250
К слову сгенерилось не такое же, но похожее - первый раз проверка i выполняется, а потом оно тупо подвисает.

Причем если выполнено i - подвисает дроча do_something
А если не выполнено - будет до посинения дрочить do_something_else

Т.е. код генерится в:

if(i) {
do_something_else++;
while(1);
}
else {
while(1) do_something++;
}
379 1628253
>>28252
Небыстрофикс.

Если выполнено i - один раз выполнит do_something и зависнет.
Если не выполнено - до посинения дрочит do_something_else

if(i) {
do_something++;
while(1);
}
else {
while(1) do_something_else++;
}
380 1628270
>>28094>>28097>>28099>>28118>>28125>>28128>>28134>>28144>>28147>>28154

Заебенил вот такую шнягу, на C#, правда, а не на шланге: https://rextester.com/XMF85756
Зато хорошо откомментировал. Кому надо - забирайте, хуитка считает биты не более чем за 4 итерации.
381 1628497
>>28270
Словил кринжульки-танцульки с этого кривого английского вкатывальщика
382 1628646
>>28270

>не более чем за 4 итерации.


И в чём выигрыш и эффективность? Ты делаешь кучу операций за итерацию, плюс к этому сверху полируешь это всё умножением (которое, в принципе, можно заменить на iterations << 1). Я чёт очень сильно сомневаюсь, что это эффективней, чем просто в цикле проверять пока в байте есть единицы.
iHRiGfZZvc.jpg38 Кб, 806x171
384 1629149
Двач, помогай
Недавно решил в катиться в си, но столкнулся с проблемой что мне нужно указывать в этих скобках число большее единицы
Может есть какая нибудь фича чтобы не писать каждый раз по 20 раз "++"?
385 1629150
>>29149
++far это сахар для far+=1
так что пиши far+=20
386 1629176
>>28657
Элитная программа, работает только у каждого второго.
387 1629303
>>29149
>>29150

Там вообще можно любой стейтмент, можешь даже несколько - через запятую, если долбоёб и ненавидишь читающего код
sage 388 1629326
>>29150
far=far+20, забытые технологии древних.
389 1629369
>>29326
Двачую, хотел написать.
390 1629533
есть список списков на питоне
[ [123, 34543, 3454, 'str'],
[3453, 43534, 345, 'str'],
]
как мне создать подобную структуру на си
типо знаю про существование стурктур, enum, union, но всё ли ето вместе использовать мне.
типо
https://pastebin.com/KXQ3iAmf
нужна подсказка как сделать многомерный mixed array
391 1629541
>>29533

void* твой друг для разнородной херни.
Но в твоём примере, вроде, обычный массив структур, тока ты скобки квадратные забыл после объявления там.
392 1629674
>>29541
Правильно ли я сделал? И теперь чтобы инициализацию сделать мне надо типо конструктора написать? типо что куда ложить? Блет надо снова перечить справку в кернигана
https://pastebin.com/EY244Dnu
Руководствовался этим
https://stackoverflow.com/questions/18577404/how-can-mixed-data-types-int-float-char-etc-be-stored-in-an-array
393 1629729
А main без return - это UB или нет? А то в тьюториалах пишут, а меня чего-то передергивает.
394 1629740
>>29674
Если тебе надо, чтобы в одной ячейке массива хранилось несколько типов, то тебе надо использовать массив структур Скорей всего это тебе и нужно , например:
https://godbolt.org/z/4c7UXh

Если тебе надо разные ячейки массива интерпретировать как разные типы, то нужно использовать, то что ты нашёл на стаке. Но ты походу не так понял, судя из твоего примера. Я пофиксил твой пример. https://godbolt.org/z/YTzSzG
Тут сложно в тексте объяснить, короче говоря, ты с помощью enum константы определяешь тип данных который хранится в определённой ячейке и соответствующим образом её обрабатываешь.
395 1629776
396 1629831
1
397 1629838
>>29740
Массив союзов ему нужен и доступ по указателю. Ты хуйню не оптимальную предлагаешь какую то.

typedef union{
void addr;
uint32_t
as_int;
char* as_string;
}my_union;

my_union array_of_unions[16];
398 1629851
>>29838

два чаю
можно ещё добавить енум тэга содержимого.
399 1629852
Господа сишники, кто нибудь прогал с libusb? Никак не могу найти функцию, которая бы отправляла данные на мышку, которая, в свою очередь, меняла бы цвет.
Эти дескрипторы для всех девайсов почти одинаковые, есть хотя бы мысль на что смотреть? На endpoint, али как?
400 1629857
>>29838
>>29851
Там макаба указатели сожрало.

Короче вся хуйня должна быть указателями.
Хранить в союзе указатель и данные это какая то ворошиловская стрельба по коленам.
401 1629863
>>29852
А мышка может? Я вот только вчера пробовал моргать светодиодом CapsLock и вычитал что на USB для этого каждый производитель каждой клавиатуры должен делать поддержку специальной залупы, на которую понятно, все хуй клали и в итоге нигде не работает.
402 1629932
>>29852

> которая, в свою очередь, меняла бы цвет


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

>>29863

> все хуй клали и в итоге нигде не работает


Чо, правда? Оно еще в 1.1 было, и везде работает. Попробуй вот так проверить: https://pastebin.com/raw/q082MYZk А вот напрямую переключить у тебя не получится, потому что винда (если у тебя винда) запрещает без дров работать с системными устройствами ввода.
403 1629937
>>29932
Как написать драйвера?
404 1629939
>>29937
Для капслока? Нахуй? Я имел в виду, что напрямую через libwinusb клавиатурой управлять не получится. А чтобы просто поморгать не влияя на ввод, существует IOCTL_KEYBOARD_SET_INDICATORS.
405 1629940
>>29939
Хочу управлять клавиатурой, как ahk, только стандалон.
406 1629941
>>29940
Я не знаю, как ahk. Но судя по названию, тебе SendInput нужен.
407 1629944
>>29941
Ладно, хорошо, спасибо.
408 1630052
>>29729
После C99, и в C++, return 0 можно не писать. До этого хз, возможно не UB а implementation defined.
sage 409 1630059
>>29932

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


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

Теперь самое интересное, через какую функцию передаются RAW данные в libusb. libusb_fill_bulk_transfer() может?

http://libusb.sourceforge.net/api-1.0/group__libusb__asyncio.html#gad4ddb1a5c6c7fefc979a44d7300b95d7
image.png99 Кб, 1043x649
sage 410 1630062
>>30059
>>29932
Вот эти байтики.
411 1630178
>>30062
А теперь внимательно посмотри на три строчки ниже. Поэтому нет, тебе нужен control transfer, а не bulk. И да, если эта хуйня через set report работает, то это совсем даже не костыль.
412 1630221
>>30178
Я не могу найти функцию set report в libusb, попробуй найти сам в доках. Я сам склоняюсь к control transfer, но будет ли это работать, хуй знает.
413 1630264
>>30221
Set report - это запрос из спецификации HID. Вот тут посмотри: https://www.usb.org/sites/default/files/documents/hid1_11.pdf (страница 62). И оттуда же:

> Feature and Output reports must be initiated by the host via the Control pipe or an optional Interrupt Out pipe.


Я бы на твоем месте хоть краем глаза, но просмотрел спеку целиком.
sage 414 1630647
>>30264
Спасибо за помощь :)

Теперь все работает спокойно через libusb_control_transfer совершенно спокойно, могу менять цвет на моей мыши и скорость их смены и режимы.

Теперь можно будет прихуярить что-нибудь для изменения DPI и можно прикрутить GUI ко всему этому, с ползунками :)
415 1630887
Вобщем, имея опыт программирования на С++, решил таки прочитать кернигана для расширения и уточнения своих знаний.

Интересно, но вот от примеров кода глаза вытекают, особенно шокирует предложение в некоторых случаях для краткости не использовать фигурные скобки, что ещё больше усложняет процесс чтения кода.
1.png1 Кб, 121x88
416 1630944
>>30887

> не использовать фигурные скобки, что ещё больше усложняет процесс чтения кода


Программистам на питоне расскажи. Фигурные скобки используют постоянно не потому, что читаемее, а потому, что можно случайно сделать пикрил. Конечно, если бы все люди пользовались IDE, проблемы бы не возникало, но вот когда у тебя обычный текстовый редактор, то при попытке дописать второй стейтмент, тебе нужно самому не забыть поставить скобки, а не забыв, еще и курсором побегать туда-сюда. Проще поставить заранее.
417 1630954
>>30887
Вот бы в сишечку контроль отсутпов... ммммммм
418 1630961
>>30944

>но вот когда у тебя обычный текстовый редактор



Ах линуксоиды!

Ну ничего! Есть же всякие геану и прочия редакторы!

Кстати, я в основном использую 2010 ВС, там нету такого, чтобы что-то автоматом подставлялось, я как автомат всё делаю, а вот в 2019 уже это дело есть, удобно.

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

Так же удивляет, что почему-то в С++ при обучении тыкают в лицо cin и cout, когда есть более удобный и логичный printf, странно.

Ну и блядские строки символов вместо string, ммммм, чуть что не так и исключение.

>>30954
Смотря на чём писать, я просто забил и проверяю на ВС 2010, мне сойдёт.
1584010259961.png265 Кб, 1080x1920
419 1630992
>>30944
Статические анализаторы такое ловят тащемта
420 1631058
>>30961

>Так же удивляет, что почему-то в С++ при обучении тыкают в лицо cin и cout, когда есть более удобный и логичный printf, странно.


printf это си, а не плюсы, он не понимает классы. А еще printf это целое минное поле подводных камней почитай википедию, страшнее

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


строк. А плюсы и классы сделаны как раз для избежания подобного. Так что в плюсах преподают потоки совершенно правильно.
421 1631129
Анон который пару тредов назад кидал скрин Ваткома с отладкой со значениями переменных как это настроить?
422 1631135
>>31058

> это целое минное поле подводных камней


Да хотя бы одно только то, что параметры форматирования у потоков перманентые, сразу нахуй перекрывает все очевидные неудобства printf. Какая-нибудь говнолиба сделает cout << hex , а обратно вернуть забудет, а потом ты такой cout << 120, и все нахуй взрывается, потому что на выходе не 120, а очень даже 78.
423 1631143
>>31135
Манюнь, ты пишешь какую то дичь, а вот от принтфов повзрывалось буквально программ на миллиарды.
424 1631144
>>31135
Интересная информация, но не относится к сказанному, да и даже если пиздеть на эту отвлеченную тему, неправильный вывод это не UB и чтение не той памяти.
425 1631159
>>31144

> чтение не той памяти


Для этого крестопотоки не нужны. Достаточно было просто не пихать пользовательский ввод первым аргументом.
426 1631171
>>29838
на помню шо хочу сделать подобный список списков на питоне
[ [123, 34543, 3454, "str"],
[3453, 43534, 345, "str"],
]
Я не правильно инициализирую числа, строка записывается, у меня каша от юнионов структур и перечислений, юнионы где то читал шо такая же структура только ссылается на один участок памяти
https://godbolt.org/z/ChrHYE
427 1631175
>>31171
Заебал. Тебе уже написали, что тебе нужна структура, а юнионы тебе не нужны. Юнионы тебе понадобятся, когда ты захочешь, чтобы любой элемент мог быть любого типа.
428 1631177
>>31175
еще раз ветку перечитал, вроде понел, спасибо анон
429 1631249
>>30992
Такое и гцц ловит, даже анализаторов не нужно.
430 1631294
>>31249
Такое нужно специально писать ради троллинга. А остальные шероховатости решаются автоформатированием в студии по нажатию пары кнопок.
image.png7 Кб, 220x117
431 1631302
начиная с какого стандарта си позволяет так инициализировать поля структуры по имени?
Стикер234x250
432 1631310
>>31302

>структура


>as_int, as_string

433 1631324
>>31294

> 2к20


> студия

434 1631327
>>31324
Студия последняя как раз ультрагоднота и мастхэв.
435 1631344
>>31327
Vs code, dude.
436 1631357
>>31249
Каким образом? Сейчас проверяю, 0 варнингов
437 1631366
Хорошие ресурсы по векторизации в gcc?
Атрибуты на выравнивание, интрины, терминология (фетчи, перфетчи, етц.).
Уклон скорее в понимание, чем именно в гцц.
438 1631372
>>31058
Да, только что сам подорвался, беру свои слова обратно. Впрочем, я итак использую cout и cin, printf мне показался удобным.
439 1631375
>>31357
Ты -Wall-то включил?
440 1631435
>>31302

>начиная с какого стандарта


C99
441 1631473
for (int i = 0; 1; ++i)
printf("E\n");

вот здесь что сперва происходит printf или ++i. По-моему printf я так понял что ++i делается после каждого выполнения тела цикла. Я прав?
image.png38 Кб, 605x609
442 1631492
443 1631503
>>31492
выполняем выражения это я так понимаю тело цикла выполняется, а потом уже count да? спасибо за баивую картиночку, понял.
444 1631552
Зачем вы вкатываетесь в си в 2020-ом году?
445 1631556
>>31552
Драйвера писать.
446 1631560
>>31556
Я выучил СИ, как мне писать драйвера?
447 1631561
А зачем Enum нужен я так и не понял. Читаю книжку из оп поста на английском и мой аннглийский не такой хороший чтобы хорошо там всё понимать.
448 1631569
>>31344
чо qt creator и codeblocks в помойку? даже vim?
449 1631574
>>31560
Это только часть того, что нужно знать.
450 1631577
>>31569

> qt creator


Нахуй.

> codeblocks


Студентикам норм

> vim


Для линуксобольных пердоликов.
451 1631578
>>31574
Что дальше учить?
452 1631583
>>31578
Устройства, протоколы.
453 1631585
>>31583
Есть книги по устройствам и протоколам? Дай гайды, молю.
454 1631587
>>31585
Нет, только документация.
455 1631590
>>31587
Как научиться читать документацию по устройствам и протоколам?
456 1631592
>>31590
Что у тебя не получается?
457 1631595
>>31592
Я не знаю. Я ещё ничего даже не открывал. Ну просто я помню по программированию что документацию сложно читать если у тебя отсуствует представление об этом.
458 1631597
>>31595
Получи представление тогда.
459 1631754
>>31577
Щяс потыкал, да согласен, лёгким движением мышки всё настраивается, но чому оно на електроне то?
460 1631849
>>31754
Тому, что на пердоликсах из графических интерфейсов только браузер.
461 1631857
>>31569
Qt Creator официальный редактор, конечно ты должен в него, если собираешься серьезно заниматься Qt
Codeblocks и Geany обычные хорошие IDE, если ты хочешь гуй
Vim и VStudio для поехавших задротов, проще поставить имакс со всеми фишками из коробки и не ебать мозг
462 1631883
>>31129
Бамп
463 1631891
>>31569
Что это? Зачем они нужны?
464 1631905
>>31891
Ребенок, а что было нужно до появления вскода, подарка от майкрософт? Он же только недавно вышел.
sage 465 1631909
Qt creator пиздатая ide, не надо тут.
466 1631913
>>31905
Саблим.
467 1631925
>>31913
Разговор вроде про иде, которые понимают код, а не текстовые редакторы.
>>31909
Позвони когда Qt станет стандартом. Никогда, ведь в юниксах только консолька стандарт, остальное васянские поделки, никому не нужные.
468 1631928
>>31925

>иде, которые понимают код,


Самосознание ИИ пока не завезли.
469 1632089
>>31344
CodeLite, мне норм.
470 1632143
>>31569
блят зря я вброс сделал, сорян аноны
471 1632461
Пиздец, этот тред просто мертв. На 10 перекатов выше 90% одни шизостуденты, троечники и просто полнейшие уебки, какой-то долбоеб спрашивает блин пачиму в кристах заставляют в паток писать када можна писать чуть более высокоуровневой обёрткой для потока из сишки!!)) другой дегенерат ему ниже отвечает ахах ну ты дурееень классооов-то неееет!!))) Спасибо школе 21 за это
472 1632463
>>32461
Что должно по-твоему в этом треде происходить? Новости по сишке обсуждать?
473 1632471
>>32463
Открой треды хотя бы двухгодичной давности, там ещё были адекваты, а посты вроде Я ПОЛЬЗУЮСЬ ВСКОД А ТЫ.. или ЗАЧЕМ НУЖЫН СТРУКТ просто игнорировались
474 1632475
>>32471
Практика показала, что адекватам здесь скучно, и они все свалили. А игнорировать посты тебе и сейчас никто не запрещает.
475 1632486
>>32463
>>32471
Ну давайте новости обсудим. Кто уже успел поиграть в [[скобочки]]? Что сказала о [[скобочках]] ваша IDE? Как вы думаете, через сколько лет можно будет писать код со [[скобочками]] и ожидать, что он соберется не только в гцц?
476 1632533
>>32471
Что ты до вскода доебался? Там обсуждали серьезную проблему выравнивания кода в ифах. Я считаю что статический анализ надежнее, чем как кто то предложил что студия сама везде скобочки расставит.
477 1632597
>>29149
ты ебанулся?
478 1632626
>>32533
Не пойму твоих рассуждений. Вот в студии можно нажать кнопочку и работает, а еще там решарпер есть сверху. А что такое "статический анализ"? Гдн это, что нажать? В перде? Извините, не надо такое.
479 1632665
>>32626

> А что такое "статический анализ"?


Это когда компилятор вместо компиляции или параллельно с ней внимательно смотрит на исходник и говорит, что код говно, и автор мудак. С пруфами, разумеется.

> Гдн это, что нажать?


cl /analyze (есть в виде кнопочки в студии), scan-build (он же clang --analyze), единорог, ну и прочие убогие цппчеки и сплинты, про которые вспоминать стыдно.
480 1632674
>>32626
Так бы и сказал что ты писатель laba1. Забыл нажать форматирование в студии = самолет упал, кому такое нахуй надо? Анализатор настраивается один раз, запускается при каждой сборке.
481 1633036
>>32665

>scan-build (он же clang --analyze), единорог, ну и прочие убогие цппчеки и сплинты, про которые вспоминать стыдно.


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

>>32674
Какой анализатор? Что настраивается? Давай конкретно. А пока у тебя ничего нет, только пустая брехня. Я конкретно сказал про студию и решарпер. От тебя не слышу такой же конкретики что использовать, для чего и как.
482 1633065
>>33036
Нахуй иди школьник
483 1633166
>>33036

> потом глаза ломать об высер в неё же


Специально для тебя оно умеет html.
484 1633179
>>33065
Дегенерата видно издалека.

>>33166
Умеет что?
Вроде была речь про ИДЕ, как следствие понимание редактором кода, как следствие возможность форматирование кода, а конкретно выделенного в редакторе текста по нажатию снопок.
Ну так что твой генератор простыней может и зачем нужен?
485 1633359
>>33179

> Вроде была речь про ИДЕ, как следствие понимание редактором кода


Речь была о >>30944 неправильно расставленных скобках. IDE умеет их авторасставлять, и на приведенном пике, когда ты bar начнешь писать, скобки у if появятся. А вот если код уже написан, или вот эта автоматическая вставка не сработала по каким-то причинам, IDE тебе больше ничем помочь не может. Между тем, в твоем коде баг. Для поиска этого и других, гораздо более хитровыебанных багов помогает статический анализ (ну и чтение кода человеками тоже, разумеется).
486 1633547
>>33359
Скобки автоматически появляются через строчку выше из за отстцпа через строчку ниже? Занятно. У меня такого нет и если бы было, отключил. Текст должен вставляться только после текущего положения и срямо после него, а не прыгать через строчки и тем более назад, это само по сабе генератор багов. Больше похоже на питонодебила, который хочет натянуть на си свои дурные привычки, где отступы это главное, а скобки лишь следствие. Какой-то жирный троллинг в си треде. Да и вообще фича ненужной сомнительности , а развели столько разговоров.
487 1633729
Зачем ENUM в си нужен? я не понимаю. ещё бы понял если бы он список чего то содержал, так он же список констант содержит нахуй он нужен вообще?
488 1633734
>>33729
у д а л и т ь
489 1633735
>>33734
не понял.
Стикер400x400
490 1633737
>>33735
как и то, зачем enum
491 1633738
>>33737
блять съеби нахуй с треда ёбаная тварь уже заебал своими смехуечками гнида ёбаная блядь
492 1633739
>>33738
нет, ты
493 1633741
>>33729
Посмотри хотя бы на (псевдо)syscall'ы
Ты можешь писать в программе OK / EXIT / CRASH с опциональными числовыми преобразованиями или тупо вговнокаживать 0 / 1 / 2 с комментами рядом, что это syscall
Структы какие-нибудь в этом случае излишни
494 1633777
>>33729
enum необходим чтобы показать какие значения может принимать та или иная переминная и никаких других кроме тех что в Enum.
495 1633791
>>33729
Для удобства. Забей хуй, когда в си прокачаешься до определённого уровня сам поймёшь. Enum это необязательная фича.
496 1633793
>>33777
Так в Си же тип не проверяется? Там вроде неявный каст. enum class это только в c++11
497 1633797
>>33793
я не знаю честно, я сказал всё что знал.
499 1633804
>>33802
тогда такое же назнчание как у #define
500 1633805
>>33802
Для сравнения, в c++
501 1633874
>>33793
Не проверяется. Никаких кастов нет, enum - это какой-нибудь сорт int (по факту всегда signed int). Но ты можешь прочитать код и увидеть, что именно ожидается.
502 1634070
0x02f шестнадцатиричное число

0x это же не элемент его? это просто индикатор что число шестанадцатиричное, так?
503 1634074
>>34070
Дожили. Да, так.
504 1634075
>>34074
я ньюфаня, на 43- странице книги k&r
506 1634082
Ээээ, где моя тема? Перекат, в общем.
507 1634116
>>34070
Лол. На этой замечательной ноте можно закрывать тред.
508 1634496
>>34082
дизлайк атписка
# OP 509 1634510
>>34496
Надо хотя бы до круглого числа дотерпеть. Десять тредов осталось!
510 1634603
>>34510
ого, сам ОП ответил, ну я типо отписался от етого треда, а на новый канешно подписалса!
Тред утонул или удален.
Это копия, сохраненная 25 мая 2020 года.

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

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