Этого треда уже нет.
Это копия, сохраненная 4 августа 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
image.png102 Кб, 792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному /clang/ 2713428 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит или ∗.

Что читать:

- 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 (драфт)
- 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://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлый: >>2599695
2 2713435
Сделал кривой перекат, извините меня, пожалуйста :3
sage 3 2714002
>>13435

>Сделал кривой перекат


Переделывай перекат!!
4 2714004
Сразу вопрос, точнее продолжение выяснения.

Пик-1:
Состояние регистров после проверки условия в switch, и перед началом расчёта адреса инструкции, на которую надо прыгнуть по условию, которое сформировано в switch.

Пик-2:
Состояние регистров после того инструкций (красными чёрточками показываю какие регистры изменились):

lea rdx, [rax*4]

как я понимаю в rdx записалось значение, на которое нужно будет увеличивать указатель, который записывается в rax следующей инструкцией

lea rax, [rel 0x560c7280f078]

т.к. переменные у меня типа int, а в условии switch значение равное 11-ти, то в rdx записывается значение 44, типа указатель нужно будет увеличить на 44.

Пока всё ясно, типа, как подсказал мне гугол, что при компиляции gcc создаёт таблицу с адресами, в которые записываются условия из switch/case.

Пик-3 и Пик-4:
Мне вот этот момент непонятен: типа, мы взяли адрес начала таблицы (не знаю, наверное, это не точно, потому что я не допираю для чего мы используем значение и что это за значение, которое у нас в регистре rax на пике-1) 0x560c7280f078, прибавили к нему 44 и получили то, что в регистре rax. Т.е. у нас есть указатель, который указывает на начало таблицы, к нему мы прибавляем 44 и получаем другой адрес, из которого мы берём значение и заносим его в eax, потом мы знак этого значения расширяем до rax, после чего значение fffffffffffff3a1 прибавляем к адресу (как мне кажется начала таблицы) 0x560c7280f078, после чего получаем конечное значение, которое у нас в rax на пике-2, по которому и прыгаем.

Но нахуя мы прибавляем два разных значения к одному и тому же адресу, это, во-первых? Во-вторых, что значат тогда 44 и fffffffffffff3a1?
5 2714732
>>14004
Это винда? Какой компилятор? Можешь показать код?
6 2714777
>>14004
Значение в ах отрицательное.
Назуя тебе и нам листинг без адресов?
Смотри cc -OS -o - с метками и коментами от клопилятора.
spanishrofl.jpg8 Кб, 480x360
7 2714871
П - производительность.

https://www.youtube.com/watch?v=pSvSXBorw4A

Си-параша это буквально дементивный дед языков программирования
8 2714926
>>14871
Как же у скриптомакаки печёт то!! Любо дорого это лицезреть! Очень много книг про фундаментальные алгоритмы, про криптографические алгоритмы, про низкоуровневое устройство компьютера, про кибербезопасность когда будут написаны на этих ваших растах и цыгах, вот тогда и приходите. А сейчас извольте в первую очередь изучать язык Си, чтобы не быть скриптомакакой, коей вы являетесь.
9 2714940
>>14926

>Как же у скриптомакаки печёт то!!


Старпер, у тебя галюны после валидола начались?

>Любо дорого это лицезреть!


Пока лицезрел, пустил подливу.

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


Делирий или маразм.

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


Мания величия оподливившегося маразматика.
10 2714947
>>14926
Да не отвечай, у этого макакошиза очередное обострение. Он сюда залетает периодически.
11 2714949
>>14947
Да, я знаю, анонче. Это я больше не для него ответил, а для "юнцов" этого треда, которые могут повестись на этот его дегенеративный скрипто-макакный байт.
12 2714955
>>14947
О, одинэсник из соседского корпуса пришел на помощь своему собрату по Альцгемеру. Похвально.
>>14949
Хуя самомнение у старпера, которому даже войд стары не помогают справится с утечками подливы.
13 2714991
>>14955

>своему собрату по Альцгемеру.


Проиграл
мимо шел
14 2715046
>>14871
Из-за чего такая разница в производительности между растом и це? С чем это связано? Я думал раст это просто безопасная надстройка над си. Ну и ещё не понятно, по какому признаку измеряется производительность.
15 2715184
>>15046
А си это просто безопасная надстройка над ассемблером.
16 2715272
>>15046
Забей!! Это уебанский тест!!! Тем больше упрошений (для человека), тем больше приготовлений нужно сделать компьютеру, т.е. тем больше машинных инструкций нужно выполнить, прежде чем дойти до самой программы.
17 2715289
>>15272
На си пишут реально дементивные. Я сначала пошутил, но теперь как-то не по себе даже.
18 2715297
>>15289
Что за шутки такие скрипто-макакные, которые нужно объяснять, и говорить, что это на самом деле шутки? Может, просто ты обдристался и тебя обоссали, и может больше так не надо делать в этом треде?
19 2715299
>>15297
И я о том же.
20 2715344
>>14732

>Это винда? Какой компилятор? Можешь показать код?



Это убунту, компилятор gcc, код прикладываю:
https://pastebin.com/ENdcGLDy
Это я просто в отладчике edb дизассемблю и изучаю Си.

>>14777

>Смотри cc -OS -o - с метками и коментами от клопилятора.



Можешь это разжевать, пожалуйста?
Прикладываю новые скрины с адресами. На пике 2 отчётливо видно, что мы прыгаем на адрес 00005653:bd280424, как раз тот адрес, что и указан в rax, только без двоеточия.
21 2715443
>>15344

>дизассемблю и изучаю Си


странный способ. В книге у денисова узнал о нём?
22 2715497
>>15443
Нет, в этом треде подсказали, ну не прям подсказали, а был спор насчёт того, что в итоге получится (i = i++ + i++, при изначальной i равной 5), и там чел задиассемблил и всем всё стало ясно и спор прекратился. А я в этот момент как раз пыжился над одной функцией, и всё никак не мог понять, как она робит. Поэтому я также задисассемблил её и мне всё стало ясно.
Поэтому я временами дизассемблю различный код на Си, когда непонятно, либо, когда (как в этот раз), просто интересно как оно работает на уровне машинных команд.
23 2715516
>>15497
Звучит неплохо. Просто иногда компилятор такое может сгенерировать, что по итогу больше смуты введёт.
24 2715565
>>15516

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


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

>Звучит неплохо.


Вообще, если заинтересуешься этим способом, то советую отладчик ddd, если ты на линуксе. В нём, под основным окном с сурсом Си, можно включить окно с машинными инструкциями, и видеть, при каждом шаге на Си, на какую инструкцию прыгает твоя программа. Т.е. ты можешь чётко видеть границы твоего кода в машинных инструкциях. Плюс ddd построен на gdb, поэтому можно ещё и навык пользования gdb прокачивать. Правда, в этом отладчике ебала с отображением инфы в регистрах, в памяти, в стеке, поэтому я первым делом "разграничиваю" код, а потом иду в edb (когда не хочу ебстись с командами gdb), чтобы присмотреться к нему более детально.
25 2715737
>>15344
Мне кажется, что я допёр до того, что делает gcc со switch/case: сначала он присваивает каждой инструкции адрес, затем он создаёт таблицу куда заносит разницу между и самой инструкцией и началом таблицы, которая должна выполнится при условии в switch. Расстояние между ячейками в таблице равно 4 байтам. В этих ячейках располагается отрицательное значение, которое соответствует разнице между инструкцией, которая должна выполниться по условию, и началом таблицы. Начало таблицы с адресами всегда располагается после ф-ции main, поэтому и в ячейках таблицы располагаются отрицательные значения.
Т.е. мы сначала узнаём то, что у нас получается в условии (т.е. в моём случае месяц), далее мы полученный результат умножаем на четыре, прибавляем к указателю на начало таблицы, берём из нужной ячейки необходимую разницу, затем мы расширяем её знак до 8 байт и прибавляем к началу таблицы. Теперь понятно, почему мы два раза прибавляем разные значения к одному и тому же адресу.
26 2715745
>>15737
*быстрофикс

Мне кажется, что я допёр до того, что делает gcc со switch/case: сначала он присваивает каждой инструкции адрес, затем он создаёт таблицу куда заносит разницу между самой инструкцией, которая должна выполниться при условии в switch, и началом таблицы. Расстояние между ячейками в таблице равно 4 байтам. В этих ячейках располагается отрицательное значение, которое соответствует разнице между инструкцией, которая должна выполниться по условию, и началом таблицы. Начало таблицы с адресами всегда располагается после ф-ции main, поэтому и в ячейках таблицы располагаются отрицательные значения.
Т.е. мы сначала узнаём то, что у нас получается в условии (т.е. в моём случае месяц), далее мы полученный результат умножаем на четыре, прибавляем к указателю на начало таблицы, берём из нужной ячейки необходимую разницу, затем мы расширяем её знак до 8 байт и прибавляем к началу таблицы. Теперь понятно, почему мы два раза прибавляем разные значения к одному и тому же адресу.
27 2715750
Сидел я в Стиме искал во что бы подрочить и увидел хентай, ну думаю можно и так. Зашёл на порнолаб посмотреть что там по играм и вижу игры десятилетней давности на QSP, скачал и тут как стало противно от этой деревянном и, меня то на скиллбоксе научили красиво кнопки двигать. Ну думаю ща переделаю все на жабаскрипт провославный, а эта поебень на вашем дедовским написана. Так вот как срать? Где программа начинается и где заканчивается, как найти то что является компилятором для этого поделия. Вот в жабаскрипте все просто в вебпаке так и написано ЕНТРИ ПОИНТ, а тут не понимать.
https://github.com/QSPFoundation/qsp
28 2715802
Сегодня в хедере случайно заметил глобальную переменную
struct foo {
...
} х_fieldname;
Это я пару лет назад вытянул определение из другой структуры, чтобы поднять читаемость. Сука. И главное, никто не может предупредить о таком. 100% легальный С.
29 2715847
>>15750
Bindings/default/default_control.c
Строка 374 вроде, явный инит, в мейк тоже входит.

Хотя где Мэйн сам не ебу, с телефона смотрю.
30 2715872
>>14871

>П - производительность.


Видос не смотрел, но вангую классику растоблядей.

>код на Си написан через очко


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

31 2715986
>>15750
Ты просишь без должного уважения к старшим! Без должного внимания к нам! От чего мы должны помогать тебе?
s-dn-m-okroshki.gif67 Кб, 480x315
32 2716228
>>15986
Прости деда, что давно не звонил, замотался совсем. Заеду летом к тебе, посидим, поговорим нормально, а сейчас помоги пожалуйста.
33 2716322
>>16228
Вот main, но что дальше я хз. Нужные более уважаемые (более старые и опытные) аноны.

https://github.com/QSPFoundation/qsp/blob/master/qgen/source/main.cpp
34 2716998
Мне необходимо узнать всё по теме списки и структуры в C. Где читать. Надо сухо, я уже все знаю, хочу лишь пробежаться по полному списку всех нюансов
1303041779689.png77 Кб, 872x1140
35 2717000
Господа, поясните че за нах
Передаю в функцию в качестве параметра указатель на структуру
struct sockaddr_un paddr
По ману эта структура объявлена как:
struct sockaddr_un {
sa_family_t sun_family; /
AF_UNIX /
char sun_path[108]; /
Pathname */
};
Далее я делаю дебаг принт:
printf("%s\n", paddr->sun_path[1]);
и получаю сегфолт
А если делаю так:
printf("%s\n", paddr->sun_path + 1);
то сегфолт не получаю. Почему так?
Мне нужно напечатать sun_path не с нулевого байта а с первого, т.к. юзаю unix domain socket abstract namespace , где 0-й байт всегда 0
36 2717110
>>17000
Я бы сначала в gdb посмотрел с точкой останова перед сегфолтом, че там у тебя происходит. Глянь, мб сразу понятно станет.
37 2717111
>>17000

> paddr->sun_path[1]


Какой тип?

> paddr->sun_path + 1


Какой тип?

> paddr->sun_path


Какой тип?
38 2717113
>>17000
paddr->sun_path - указатель на область памяти с 108-ю байтами.

paddr->sun_path[1] - ты передаешь конкретный ascii знак

paddr->sun_path + 1 - ты передаешь адресс смещенный на 1 байт вправо

Принтф ждет от тебя указатель на строку, ты ему передаешь знак, он пытается использовать полученное значение как адресс и естественно сегфолтит
39 2717135
>>17113
Я не он, но как тогда лучше поступить в таком случае, если необходимо принтить этот массив?
В цикле через putchar() нормально будет?
40 2717527
>>17135
&paddr->sun_path[1]
41 2718035
Как научить С, если они не понимают ни концепции типов, ни объяснения на уровне железки...
42 2718055
>>18035
функциональщиков - нахуй
14742780234230.jpg72 Кб, 650x567
43 2718089
>>17113
Благодарю, чет думал что "arr[1]" и "arr + 1" в С - это одно и тоже, типа сахар.
44 2718238
>>17527
Почему адрес первого элемента берется, а не нулевого?
&paddr->sun_path[0] тогда уж должно быть?
45 2718243
>>18238
Это для случая, когда с первого элемента выводить нужно. Если с нулевого, то ничего дополнительно указывать не требуется.
Тут >>17113 всё расписано.
46 2718249
>>18243
Понял. И ласт вопрос, а если я не уверен, что у меня там есть символ конца строки, то лучше в цикле выводить посимвольно?
47 2718253
>>18249
Лучше в каком смысле?
48 2718254
>>18253
Ну в смысле что printf или puts требует наличие символа конца строки ведь, а если его нету то он будет дальше принтить.
49 2718258
>>18249

> если я не уверен


Тогда си не для тебя.

Можно плюхнуть \0 в конец массива перед выводом, но это так себе выход.
50 2718267
>>18258
Понял. Бтв щас проверил, если создать массив из 8 элементов типа char и заполнить первую половину случайными символами, а вторую половину оставить как есть, то puts выведет только первую половину, хотя \0 я в ручную не добавлял. Пробовал два варианта, инициализировал через char mas[8]; и char mas = (char ) malloc(sizeof(char) * 8); а потом первым 4 элементам массива присваивал значение.
Печатает только то, что я присвоил почему-то.
51 2718269
>>18267
Макаба съела два указателя, ну там и так вроде понятно где.
52 2718273
>>18267
Глобальный массив инициализируется нулями по старту, с маллоком просто повезло, там может быть любой мусор.
53 2719286
Анонсы помогите советом. Какую IDE лучше использовать под Linux?
Скачал я от JetBrains -> Clion, но эту херню уже не купить из РФ (или может какие не замороченные варианты приобрести лицензию?).
Единственным более менее нормальным вариантом под Linux я так понимаю остается VS Code?
Вывод я сделал исходя из популярности, хотя сам не особый поклонник VS..но куле делать.
54 2719358
>>19286
Eclipse или Qt глянь, мб понравится.
55 2719404
>>19286

> Какую IDE лучше использовать под Linux?


https://www.jetbrains.com/fleet/download/#section=linux
https://www.eclipse.org/
https://netbeans.apache.org/

>>19286

>остается VS Code


Это редактор кода, не IDE.
Есть из редакторов ещё:
https://www.sublimetext.com/
https://geany.org/
56 2720099
>>19286
Все говно. Это буквально кусок винды на бесплатных костылях из жевачки гну. Выбор только между емаксом и вимом.
57 2721366
Стоит ли обратить внимание на zig любителям сишки?
58 2721389
>>20099
В каком месте vscode кусок винды? Это просто хром браузер с расширенным апи
59 2722177
>>21389
Штааа, писать код в браузере? Ахахаха!!
60 2722474
>>22177
браузер и есть, электрон же
61 2722582
>>22177
Штааа, писать код в интерпретаторе лиспа? Ахахаха!!
62 2722609
>>19286
(neo)vim + clangd
63 2722618
>>22609
это не иде
64 2722652
>>22618
навалить плагинов и будет как иде
65 2722779
>>22652
в иде это все из коробки
66 2722852
>>22779
ага, да. большинство фич "изкаропки" мне нах не сдались. кроме кодкомплетинга, древа файлов и консоли от иде никогда ничего не было нужно. для дебага использую valgrind и немного gdb.
все иде что я пробовал пиздец тормозные (даже с моими 20гб озу). плюс у каждого языка есть свои, а вим один
67 2722909
>>22852
Какие плагины посоветуешь накатить?
68 2722967
>>22582

> Штааа, писать код в интерпретаторе лиспа? Ахахаха!!


А тут-то что смешного? Ну разве что лучше в нем писать на лиспе.
69 2723808
>>22909
1. nerdtree
2. vim-lsp для clangd/ccls. ещё есть vim-lsp-settings, его не пробовал, он сам ставит и настраивает lsp сервера
70 2723845
>>22909
предлагаю тебе написать 2-3 без плагинов полностью. Почувствуешь себя человеком
71 2723846
>>23845

> написать 2-3


написать 2-3 программы*
быстрофикс
72 2723881
Чем построить график со стеком вызовов с рекурсией (конечной) ?
cflow ругается на любую рекурсию
73 2723905
>>23808
Спасибо, анонче!

>>23845
Та я и так без плагинов (единственный плагин, который юзаю это дубликат скобок, кавычек и апострофов) программы пишу в виме. Правда, они у меня пока не особо большие (100-200 строчек).
74 2729360
>>23905
Дед в треде. Пишу в виме много лет, никаких плагинов не пробовал. Я даже не могу заставить себя использовать метки для перемещения.
image.png470 Кб, 1059x655
75 2730041
а почему у меня вместо решёток пасьянс этот?
76 2730347
>>30041
Включи предупреждения от компиятора. Прочитай их.
77 2736291
А вы знали, что enum может быть беззнаковым, и тогда 1 - TWO > 0.
78 2736298
>>36291
enum по умолчанию беззнаковый.

> 1 - TWO > 0


В стандарте не прописано переполнение, поэтому это UB.
79 2736568
>>36298

> В стандарте не прописано переполнение, поэтому это UB.


Переполнение беззнаковых четко определено. Сравнение интов происходит беззнаковое, если одна сторона беззнаковая.
80 2737074
начал учить си, вообше не могу понять смысл констант.
Типа, если я в самом коде, не даю возможностей для изменения переменной при запуске программы, она ведь и так не изменится. Зачем тогда нужны константы?
81 2737109
>>37074
чтобы ты, например, случайно сам не очистил указатель на константную область памяти. Это больше для программиста
82 2737201
>>37074
Костыли компилятора для сокращения ошибок программиста, к самому исполняемому коду это не относится.
Вот взять например строковые литералы: "тут текст", это адрес на память только для чтения, если случайно туда напишешь, может быть ошибка нарушения доступа (access violation). Поэтому, при попытке присвоить простому (не константному) указателю строковый литерал, компилятор ругнется. Короче, защита от дурака, просто компилятор нянчится ругаясь на типовые ошибки, хотя это конечно может быть не ошибка, а сделано намеренно, но тогда уже сам себе хозяин.
83 2737222
>>37201

> к самому исполняемому коду это не относится.


Справедливости ради, глобальная константа (число пи) будет одна на всю программу, а копии литерала могут оказаться во многих объектниках и в бинаре, если компоновщик не дозуя умный.
84 2737851
>>37222
Разговор был вроде про константы. Нет константной памяти куда нельзя писать, нет константных указателей по которым нельзя писать, таких вещей не существует. Память бывает защищена и выдаст ошибку при обращении, но само обращение всегда возможно, не бывает такого что нельзя.

Поэтому константы это лишь маркеры на уровне исходных текстов для программиста, к коду это не относится. Ошибка констант это не ошибка кода, а просто защита от неправильного (по мнению программиста поставившего маркер) использования кода. Это просто маркер для себя, как например закладки в тексте. Вот ты читаешь книжку и расставил закладки, но в книге, в рассказываемой истории которую ты читаешь закладок нет, это метаданные чисто для читателя, для удобства чтения только. Так же и константы, в коде их нет, это мета-костыли на уровне редактирования кода только.
85 2737924
>>37074
Напиши коротенькую программу, в которой будут использованы переменная и константа, и задисассембли эту программу, и посмотри что происходит.
86 2737959
>>37924
ничего не будет происходить, в том же си можно спокойно менять константный указатель, а это значит что в исходных текстах констант не существует
87 2737970
>>37959
Да, анонче, ты прав! На уровне машинных команд конст ничем не отличается от обычной переменной (пик 2), только компилятор ругается, когда ты пытаешься записать в область памяти, которая выделена под конст (пик 4).
88 2737980
>>37970
Братишка, а ты чего под рутом то сидишь?
89 2737988
>>37980
А почему бы и нет?
90 2738010
>>37980
>>37988
Я просто заёбся каждый раз у себя же спрашивать разрешение (вписывая пароль). Это, когда есть чёткая система, то можно сидеть под своим пользователем, а когда ты изучаешь, исследуешь новые программы, новые техники, то ебля с правами демотивирует.
91 2738074
>>38010
Отключи запрос пароля или поставь большой таймаут.
Это БЭД ПРАКТИС, ёпта.
92 2738128
>>37851

> Нет константной памяти куда нельзя писать, нет константных указателей по которым нельзя писать, таких вещей не существует.


Молодой падаван, ты еще не видел МК и ДСП.
93 2738225
Привет, обьясните почему программа криво работает, я старался придумывал всё это а она так себя так ведёт!!!

https://ideone.com/8GEFZN
94 2738987
>>15872

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


мне всегда казалось что обратное это ошибка на равне с высратым на свет творчеством питухониста
впрочем наверное просто нормально написать код на расте тут приводилось в качестве противовеса высратому на свет творчеству питухониста но на языке си
я обрыгал сам себя, спасибо мне, расходимся тут не на что смотреть
95 2738990
>>30041
полагаю как минимум твой Cell[][] это символ в который ты пытаешься запихать строку "#" а в строке 2 символа, тобишь это массив символов, наверное еще с новарнингами пишешь, а так бы компилер тебе сказал что ващет негоже так класть одно в другое
Снимок экрана 2023-06-20 в 02.37.04.png214 Кб, 1742x966
96 2738991
а вот такой вопросик у меня есть

почему на 24 строке мне кидает варнинг и просит кастануть поинтер к моему типоразмеру (6 байт) если целевое поле структуры такого же типоразмера (6 байт)
ведь поинтерам без разницы какой тип данных в них пишется или читается, им важен типоразмер, сколько байт за раз мы читаем или пишем
так вот почему варнинг то?
не обращайте внимания, это учебная программка по структуркам для одной девочки, которая учит си
97 2739062
>>38074
Да, анонче, понимаю, что это нехорошо, но пока меня это не напрягает. Может ещё посоветуешь что-нибудь, что можно сделать, чтобы некоторые программы (например, ddd) работали бы нормально под обычным пользователем, а не только под рутом?
98 2739066
>>38991
Закинь код на пастебин, чтобы можно было бы его "пощупать".
99 2739074
>>39062
Через sudoers можно настраивать.
100 2739076
>>39074
Я запускал и с помощью sudo, и в файлу sudoers ковырялся, но всё равно что-то не получалось. Отладчик под моим пользователем как-то криво работает, а под рутом всё норм. И так, кста, не только с ddd. Мб, я криворуко всё это настраиваю.
101 2739146
А можно ли как то насильно запустить компилятор и исполнить код, если я где то пропустил точку запятую или что то вроде?
102 2739153
>>39146
На уровне компилятора -- нет, в лучшем случае есть костыли, которые детектируют опечатки и всякие очевидные ошибки вроде = вместо ==, но они обычно работают в виде подсказок и за тебя текст не редактируют. Может можно сделать их более агрессивными, типа чтобы они при сохранении файла исправляли, есть же форматтеры, которые при сохранении файла запускаются. Но это все равно хуевая практика, лучше поставить линтер и смотреть что он пишет перед запуском кода. В IDE линтер по дефолту должен быть включен.
103 2739155
Аноны, задачка на подумать:

https://pastebin.com/Mtq0mwhb

Этот цикл остановится на 4-м шаге (когда u и v будут указывать на 4), но почему, после завершения цикла, u и v будут указывать на следующие (за 4-кой) элементы массива?
104 2739217
>>39155
Че там думать, постфиксные операторы сначала выдают значения, потом отрабатывают.
105 2739222
>>39217
Ну да, логично, но это же не объясняет почему так происходит?
106 2739236
>>39222
Вайл получает фолс, операторы отрабатывают, что не так-то?
107 2739239
>>38225
Люди памагите прошол целый день, а программа до сих пор сама себя не исправила капец!
108 2739248
>>39236
Так, если вайл получил фолс, тогда как могут операторы отработать? Вайл получил фолс, т.е. цикл закончился, значит ВСЁ!, идём дальше.
109 2739250
>>39239
Кидай код в пастебине.
110 2739251
>>39248
Операторы не в теле цикла, а в проверке условия, они в любом случае отработают, потому что выражение исполняется для проверки.
image.png31 Кб, 646x153
111 2739266
>>39251
Ладно, не буду вас мучать! Операторы первым делом берут адрес следующего значения lea rdx, [rax+4] и записывают его по адресу, где хранится указатель, а только после этого сравнивают текущие значения, после чего, если они не равны прыгают в начало цикла. Поэтому и получается, что на выходе из цикла мы имеем указатели, увеличенные на единицу.
112 2739269
>>39266
lea rdx, [rax-4] это для v
113 2739272
>>39266
Для этого не нужно было дебажить, лол.
114 2739274
>>39272
Хах, лучше же, когда всё видно наглядно.
115 2739279
>>39274
А если просто числа, то сначала отдаст, а потом инкрементнет?
116 2739281
>>39279
Где и какие числа? Распиши подробнее вопрос, я часика через два освобожусь и тебе отвечу.
118 2739431
>>39279
мимопрохожу

постфиксные операторы сначала отдают значение а потом вычисляют инкремент
таим образом
int i = 0;
printf("%d\n",i++); //напринтил бы 0 а после принта i = 1
printf("%d\n",++i); //напринтил бы 2 а после принта i = 2
119 2739453
>>39066
только ради тебя анончик залил
https://pastebin.com/YFK15VQW

а вообще мне кажется я сам догадался в чем варнинг
в поле структуры висит массив, а по механике у массива то же есть поинтер типоразмером в одну ячейку (1 байт это же чары) и крч он волнуется что типоразмер ячейки массива не совпадает с типоразмером поинтера который смотрит на массив
Снимок экрана 2023-06-20 в 15.55.47.png10 Кб, 574x50
120 2739468
>>39239
я тут кое что увидел в твоей программе
для ii по фору не задано условие брейка (не уверен может специально)

а вообще чо так сложно написано то?
куча библиотек
размер массива стрленом вычисляется

ладн я придираюсь потому что я люблю писать без зоопарка библ стандартными средствами

например вместо стрлен что нибудь такое sizeof(word)/sizeof(char) но делить на сайзоф чар не обязательно, размер чара 1 байт

какой нить сканф заместо гетча
все, ладно не бубню
121 2739473
>>39431
Речь о машкоде после коньпеляции. Сначала апдейтит указатель, а потом уже берёт текущее значение.
122 2739478
>>39473
ты всегда можешь делать асмавставки для мануального управления, если тебе не нравится как работают эти операторы
просто напоминаю

>>39239
еще хотел сказать пару слов
в книге Крнигана и Ритчи как раз есть галава где обсасываются строчные лагоритмы над массивами чаров, ну там апперкейсы ловеркейсы и все такое и как они устроены на каких принципах
так вот довольно легко понять что внутри чаров или интов или других переменных лежат только нолики и единички, по сути как ты эти нолики и единички представляешь зависит только от тебя, можешь работать с символами как с числами напрямую
например
char c = 'a';
c = c + 20;
printf("%c -> %d\n",c,c); // выводим с как символ и с как число
123 2739481
>>39468
Ой, брейк надо было после фигурной скобки иф
124 2739659
>>39473
Анон, в корне ничего не меняется, только в регистры, которые в последствии сравниваются помещаются не указатели, а числа. Но суть остаётся той же:
мы сначала в edx помещаем текущее значение (для а) mov edx, [rbp-8], затем помещаем в rax значение а увеличенное на единицу (при этом значение в edx остаётся текущим, т.е. 0) lea rax, [rdx+1], после чего мы увеличенное не единицу значение заносим в область памяти, которая выделена под а mov [rbp-8], eax. Затем тоже самое, только с уменьшением на единицу, происходит с пtременной b , только её текущее значение заносится eax. Ну и после всех манипуляций идёт сравнение текущих значений a(edx) и b(eax) cmp edx, eax, и если не равны, то прыгаем в начало цикла.
image.png43 Кб, 752x239
125 2739675
>>39453
А что за компиллятор? У меня gcc без проблем всё сожрал.
126 2739686
>>39675
не, понятно что сожрал, ведь код запощен без ошибок и со всеми явными кастами, в нем нет ворнингов
но если убрать каст к типу поинтера в 24 строке будут варнинги, я про это писал
компилер не знаю какой в икскоде, гцц наверн то же с99 стандартом копилит с11 нет в икскоде ну в моем нету
127 2739700
>>39686
Ткни меня сейчас в какой строке у тебя ворнинги были, а то 24-я строка на пастебине у тебя сейчас пустая.
128 2739713
>>39700
а, да, извини, там же в начале студия еще комменты печатает несколько строк

на пастебине это 17 строчка
объявление поинтера и его инициализация адресом поля
129 2739716
>>39713
Ага, понял! Завтра поковыряюсь, сейчас как раз struct изучаю.
130 2739979
А муществуют вообще графические библиотеки под сишечку?
131 2740018
>>39979
OpenGL жешь
а для рисования нативных окошечек и оконных приложунек windows.h
еще когда то давно я писал на Qt, но я бы не назвал это графической библиотекой, скорее это обертка над плюсами для упрощения всякой кастующейся фигни по типу обработки событий по дескриптору

а вообще философия си как бы намекает - сделай сам себе тот же транслятор CSS или Lua или MD или любого другого самописного скриптового языка при помощи которого ты опишешь графику в окне консоли или в окне виндов мэнеджера

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

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

но так или иначе написать тот же рейтрейсинг в псевдографике это задача того же уровня как и написать рейтрейсинг в полноценной игре, все рассчеты абсолютно такие же до момента вывода на "экран", разница начинается как раз в слое обработки при выводе на то или иное устройство вывода
133 2740113
>>39481
а нет, фигню сморозил
134 2740116
>>39468

> размер массива стрленом вычисляется



а почему стрленом нельзя?
image.png102 Кб, 1659x865
135 2740123
а почему заменяются буквы в слове Word, если условие if не выполняется ни для одного элемента массива? по идее он же должен был вернуть то же самое, что я и ввёл, без шифровки
136 2740148
>>40123
А ты задебажь и посмотри в чём дело. По шагам пройдись и тогда станет ясно.
137 2740163
>>40123

>WORDSIZE - 1


Шифр Цезаря?

Как по мне, дело в регистре букв. Ты задал для сравнения только большие буквы, а запрос написан маленькими
image.png162 Кб, 500x500
138 2740174
>>15289

>На си пишут реально дементивные


А как дело обстоит у скриптомакак при прямом обращении к ПАМЯТИ?
139 2740176
>>40174
Тише, ты чего?? Эта скрипто-макака только угомонилась, зачем ты её опять ворошишь?
140 2740179
>>40163
Ну, получается что ни одна буква не совпадет, значит ни одна буква не должна сместится
image.png89 Кб, 1920x1080
141 2740198
>>40179
Неа. Это особенность компилятора новарнинги короче. К примеру, если ты создашь массив, и выведешь его в неправильном диапазоне, он будет выдавать случайные символы юникода в произвольных местах
142 2740244
>>39473
Кстати, анон, если интересно, то вот так выглядит условие с префиксными инкрементом/декрементом. Отличие в том, что переменные увеличиваются/уменьшаются и полученные значения сравниваются, т.е., если с постфиксными инкрементом/декрементом сначала идёт запись текущего значения в регистр, после чего увеличенное/уменьшенное текущее значение записывается в область памяти переменной, и уже после этого происходит сравнение текущих значений, то в условиях с префиксными выражениями происходит сравнение сразу увеличенных/уменьшенных значений.
Снимок экрана 2023-06-21 в 17.00.08.png54 Кб, 1134x98
143 2740686
>>40123
объясните мне кто нибудь почему массив на пике проинициализирован вот так?
почему 'Z', } что это за пустое пространство после символа Z? это компилируется как '\0' ? наверное нихуя ведь нужно явно фигануть туда 0 или \0 как символ

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

Alphabet[] = "XYZ";

или повесить поинтер на сегмент текста где будет висеть константная строка например так

char* Alphabet = "XYZ";

просто держать в голове что у строки в конце допсимвол '\0' вотличие от натурального массива символов

дальнейшая работа с этим ничем не отличается, точно так же в Alphabet[0] будет лежать 'X' если вытаскивать в виде символа

но я не понимаю что за пустое пространство после Z что это означает?
144 2740880
>>40686
Посмотри в дебагере
146 2741064
Анончики, здравствуйте.

Я очень тупой человек.

Как выводится 10-чное представление числа из памяти ЭВМ? Там же все представлено в 2-чном коде.

Условно, у нас есть 20байтовое число в памяти , как компьютер выведет его 10чное представление?
147 2741065
>>41064
В десятичной системе счисления
148 2741066
>>41064
И ещё вопрос, когда мы вводим число с консоли это же просто на просто текст условно:

int a;
scanf("%d", &a);

А как он переводит это значение в двоичное для хранения в памяти ЭВМ?
149 2741067
>>41064
20ти байтовое целое можно пушнуть в канал вывода при помощи поинтера с шириной шага 20 байт, в стандарте таких длинных типов нет поэтому что то навроде такого будет

typedef struct {
_Bool b[20];
} pointer;

pointer p = &a;

printf("%lld\n",
p);

но я не уверен, %ll умеет в вывод long long'a но не в 20битное целое, а тот же puts пушит только строки, а у тебя в задаче число

интересная задачка на самом деле, пойду поломаю голову как на экран вывести число, с хранением и записью/чтением чисел так то проблем нет особых
150 2741068
>>41067
То что ты написал выведет только 10-чное представление первых 8 байт этого 20 байтного числа
151 2741069
>>41067
разметка макабы сожрала звездочки
152 2741070
>>41068
я и говорю что %ll только в лонги умеет, я же это написал
ты вот лучше скажи какой спецификатор умеет в 20байтный формат
153 2741071
>>41070
Нет такого, насколько знаю, слышал только, что некоторые компиляторы могут в 128битные числа, но это не 20байтовое все ещё, есть либы для работы с очень большими числами, так называемая длинная арифметика, на этом мои знания заканчиваются
154 2741073
>>41071
крч я думаю на регистрах просто не хватит памяти чтобы вычислить 20ти байтное целое так что все равно надо костылить и проще всего наверное накостылить через строки раз уж вопрос с выводом на экран всяких там гиперчисел песчинок на пляже омаха
155 2741173
>>41073
Нужен цикл, в котором через арифметику указателей мы берём единицы и нули из памяти 20-ти байтного числа и складываем их в переменную. Каждые 8 шагов (через байт) приводим эту переменную к десятичному виду и это число выводим. Только из-за литтлиндиана цикл надо начинать с конца.
156 2741214
>>41173
Проще, конечно, использовать особенно принтфа, которая позволяет вывести 10 байт, т.е. в переменную загоняем арифметикой указателей 10 байт, приводим к десятичному виду, и после выводим.
157 2741215
>>41214
*особенность принтфа

быстрофикс
158 2741222
>>40686
Вот, анон, он на пустое место после Z никак не обращает внимание.
159 2741225
>>40686
>>41222
Такая хуйня есть в многих языках и она ничего не означает. Сделано для удобства перемещения строчек, добавления новых и т.п.
160 2741336
>>41222
Что за ШГ?
161 2741357
>>41173
Мужик, а ты сколько программируешь вообще ? У тебя курс информатики в школе был или ты троллишь так охуенно? Просто с твоих постов жир течёт пиздец как, ты либо не очень шаришь за математику, либо охуенный тролль, а таких тут не надо, все таки жизнь новичкам портить не надо, а то некоторые на арифметике указателей Си бросают
162 2741394
>>41357
Не, ну критикуешь - предлагай.
163 2741413
>>41222
благодарствую, а то чуть кровь из глаз не пошла
уже собирался дух Ритчи пробуждать и насылать проклятия на жопу
164 2741425
Ребят, здравствуйте

Не хочу ебать свой ССД, но требуется загрузить файлы с телеграмма на гугл диск, можно ли это сделать путём выгрузки файла в оперативную память, а позже загрузить ее из оперативной памяти на гугл диск? Файлы размером в пределах 1,5Гб
165 2741430
>>41173
Я не буду предлагать, но ты реально думаешь что у нас число, ты его засунул в buf и если по 8 байт и вывести, то получится 10 представление это 20байтового числа?

char buf[20];
void × start = buf;
for (int i = 0; i < 3; i++, start = (char ×)start + 8)
printf("%llu", (int64_t× )start);

Ты либо программирование бросай, либо матан учи
166 2741454
>>41430
у тебя ашипка
%llu распечатает байтпоследовательность как ансигнеды а число ты засунул в сигнеды чаров ну и про 8 байт из 20ти мы уже тут обсуждали

мимодругой анон
167 2741459
>>41430
Да, да, я понял, что у нас разрядность нарушается.
168 2741465
вообще вот касательно 20байтовой задачи я думаю а вот плюсы не могут пушнуть в канал вывода такую байтпоследовательность?
ну типа cout << xp; ???
прост если могут то почему бы не покопать как cout реализован в плюсах и не переложить на си рельсы
169 2741523
Может пригодится для решение задачи с 20-ти байтным числом:
https://www.cyberforum.ru/c-beginners/thread153284.html
170 2741543
>>41425
а си тут причем?
171 2741546
>>41430

>матан учи


А матан тут к чему? в математике что ли проходят как числа представлены в памяти?
172 2741561
>>41546
не ну с матаном он канеш перегнул слегка
преобразованиями форм счислений занимается арифметика
image.png33 Кб, 1333x441
173 2741719
четвёртый символ это enter? типа переменная Word сохранилась здесь как ааа+ентер+конец строки?
174 2741739
>>41719
не, последний символ это '\0' символ конца строки
обработка строк на этом принципе и основана
ты пихаешь в функцию адрес начала строки и функция без определения размера уже знает что в конце строки будет символ \0 и читать надо до него
например puts(conts char x) так работает да и спецификатор %s притэфа так же обрабатывается

в других вариантах переброса массивов в функцию ты вынужден передавать размер массива, функция изнутри не знает насколько большой твой массив, но только не со строками
175 2741744
>>41739
но в определении стрлен написано что конец строки не читается
176 2741764
>>41744
принтани sizeof(Text)
а еще можешь принтануть числовой вариант каждого символа и сравнить с табличкой ASCII юникодов чтобы понять чо там в строку запихалось
178 2741802
получается ентер и записался
179 2741805
>>41796
окей это ентер, ты оказался прав, мои поздравления
а еще поздравляю тебя, ты только что научился делать юнит тесты и можешь не постить каждый вопрос сюда а провести тестирование самомстоятельно
180 2741809
>>41805
реально
181 2741910
>>13428 (OP)
Сап программач, хочу поделиться болью. Я очень много пишу на сишке, ну и я вообще люблю низкоуровщену и поэтому на ней зарабатываю: bare metal, Linux kernel modules и прочее. На работе до определенного времени спокойно писал bare metal на сишке, потом коллектив выступил за переход на плюсы, но со стилем написания исходников «си с классами» — против этого я не выступал потому что не видел в этом смертельного. Замечу только то, что у нас нет практики постоянного code review, потому что у нас небольшой коллектив и просто нет ресурсов на регулярной основе такое делать. Когда мы использовали плюсы в си-стиле стало чуть чуть удобнее, как минимум, объекты собирали методы в свою сущность. Но недавно начался полный пиздец, потому что человек, который имеет большое влияние на коллектив предложил перейти на самые последние плюсы (темплейты, концепты, хорошо я отговорил от std::string и std::vector). Архитектура полностью пошла по пизде, темплейты теперь везде нахуй, в некоторых местах архитектура была поменяна только для того чтобы «так удобнее написать на темплейтах», интерфейс тоже стал ужасным, а сейчас я сижу на созвоне и слушаю как челы спорят о том, как лучше написать концепт. И мне было бы похуй, если мне давали делать мои низкоуровневые вещи (на уровне регистров), но нет, реализовывай наши криво написанные концепты (некоторые концепты написаны только ради того чтобы концепт был). Говоришь им что написанные концепты говно и это перетекает в 2-3х часовой созвон с обсуждением как правильно написать концепт. На вопрос: «как концепты и темплейты помогут мне реализовывать низкоуровневые интерфейсы (uart, spi и прочее)» — но кроме: «ну можно будет статически проверить некоторые куски кода» — я ничего не слышал. За то время, что я убил на все это дело, я бы покрыл все тестами, написал эмулятор и крутил бы систему днями и ночами на x86. В общем просто хотел высказать.
182 2741934
>>41910
разве темплейты это не старый добрый си?
и разве объекты с методами это не старый добрый си?

typedef struct {
char x phrase;
void (xmessage) (void);
} className;

void sendMessage(void){
puts("idite nahuy dolboebi");
}

className Obj;
Obj.message = sendMessage;

int main(void){
Obj.message();
}
183 2741974
>>41934
Да, классы то же самое, только методы находятся в пространстве имен класса, а твоя функция sendMessage попадёт в область видимости текущего файла. А темплейты (именно статический полеморфизм) нереализуемы на чистом си
184 2741991
>>41974
а... ну хотите полиморфизм тогда страдайте чо я могу сказать
ооп паттерны вот это вот все говно с фабриками и вечным дебагом корявой наследственности жопы из говна а не говна из жопы, это же лучше чем pure c в котором ничо нельзя реализовать нахуй его вообще придумали говно какоето лол для дементивных как тут скриптомакака пишет
185 2742016
>>41991
А что вы имели под темплейтами, если не полиморфизм? Еще темплейты удобны для задания параметров класса, которые не будут меняться в рантайме, например, буфер определить длину кэшурующего буфера для юарта: uart_class<256> foo(...);
186 2742020
>>42016
я имел ввиду фразу "тыскозал?"
187 2742087
>>13428 (OP)
Управлению памятью только в итт япах можно научиться?
188 2742348
>>42087
Тебе лучше в асм-тред сходить, и вообще почитать/покодить на асме, если хочешь понять что такое память, как устроена память, как управлять памятью.
189 2742356
Раз речь зашла о памяти, то задам ньюфажный вопрос.
Вот работал я с памятью только на уровне malloc(), calloc(), read() или write(), не превышая килобайта используемой памяти ща раз. А как с ней работают в больших приложениях, которые жрут по несколько гигов, типо всяких игровых движков и прочего?
190 2742429
>>42356

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


А никак. Индусы просто засирают память, пока не придумают чипы мощнее.
191 2743974
>>42348

> sub esp, 10000000 ; doljno xvatit

192 2743980
>>42356
Пишут полезные обертки
- пул, из которого выделяют разные объекты для уровня, а потом целиком его уничтожают (защита от утечек)
- стек (вариант предыдущего)
- пул для объектов одного размера (скорость+экономия памяти)
193 2744190
>>43980
пул это бассейн, чо несешь то, поехавший
194 2744258
Привет, а как выводить по 1 точке каждую секунду?
195 2744288
>>44258
функция sleep() в гугле
196 2744313
>>44288
Спасибо, еще вопрос: как напечатать символы массива, что бы один из них был большего размера чем остальные? Типа маленькие точки а потом огроменная
image.png323 Кб, 500x500
197 2744320
>>44313
а ты посмотри в таблице символов под каким номером твоя огроменная точка
198 2744408
>>44313
блондинка залетела в кодинг?
199 2744409
>>44313
Сменяй регистр точки.
200 2744413
аноны
может вопрос нубский будет, я просто никогда еще не писал с поддержкой вычислений на гпу, но вот хочу спросить
если я объявляю registered float несколько штук, то на регистрах какого чипа они будут сидеть? на цпу или на гпу? и есть ли механизм как ручками выбрать нужные ргистры если допустим я хочу просчитать флоаты именно на гпу чипе?
201 2744420
>>13428 (OP)
Сап
Аноны, я тут придумал очередной сюжет игры и друг мне предлагает закодить её на Си. Есть ли годные библиотеки которые бы позволили это делать быстро и легко?
Я одно время пытался сделать игру на жс и знатно поел говна. В итоге забил. Потом ещё был небольшой опыт на джаве, там чуть лучше даже намного лучше, но тоже пришлось как следует поебаться с библиотекой и её установкой.
Короче стоит ли браться за Си? Из целей вкатиться в этот замечательный перспективный язык и сделать хоть простенькую игру.
202 2744422
>>44420
О нет, только не си для игры, это не стоит того, честно
203 2744425
>>44420
ебашь хоть на ассемблере всем поебать
можете еще рассмотреть такие варианты
игра на фортране
игра на паскале
игра на делфи
игра на окэмле
игра на руби

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

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

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

но почему в играх не использовать си? там то как раз нужны сверхбыстрые вычисления в первую очередь, а переносимость уже вторична
205 2744454
>>44409
Как сменить регистр?
Типа такой еще момент. Надо что бы размер символов менялся после вывода
206 2744502
>>44420

>сделать хоть простенькую игру


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

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


Чел, ты должен понять, что Си это отвратительный язык, единственный плюс которого это zero runtime. Всё остальное, что пишут, особенно всё, что связано со стандартами выше С89, это ебантизм, потому что есть более удобные высокоуровневые языки программирования, с которыми пытаются конкурировать стандарты С99 и выше.
Поэтому, если ты не собираешься писать высокопроизводительные программы (всё что связано с драйверами, ядром ОСи, пизданутые числодробилки, где две альтернативы - Си со стандартом не выше С89 или ассемблер), то в Си можешь не вкатываться, либо ты можешь полгода-год потратить на ассемблер и Си (именно в таком порядке), чтобы лучше узнать то, как устроен компьютер. Этих знаний тебе будет более чем достаточно, чтобы освоить любой ЯП. Всё остальное, что будет иметь противоположную точку зрения от той, что я тебе привёл, что тебе будут писать местные петухи это от лукавого.
207 2744504
>>44454
Чел, ты серьёзно? Регистр точки хочешь сменять, типа переводить точку в нижний и в верхний регистр? Короче, мой тебе совет это пойти загуглить, разобраться самому как напечатать "огроменную" точку, а потом прийти сюда и объяснить нам это.
208 2744639
>>44504
Я не нашол нигде, почему то нигде нет понятных и однозначных обьяснений.
209 2744654
>>44639
>>44313

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


Давай, чтобы тебя не продолжали троллить сразу отвечу.
Увеличить размер шрифта только одного символа из всей строки ты не сможешь, потому что такой функции в терминале нет. Размер шрифта меняется сразу для всей строки, поэтому у тебя остается несколько вариантов:
- смотреть эскейп последовательности для своей ОС и эмулятора терминала, а потом просто выводить нужный символ жирным шрифтом.
- если у тебя строка состоит из символов в нижнем регистре, то выводить нужный символ в верхнем регистре. При этом стоит учесть, что для символов никаких регистров не существует.
210 2744739
>>44654
Алсо, вот как это может выглядеть на линуксе. Просто как пример.
211 2744743
>>44739
А как, кстати, вывести то "огроменную" точку? Это получается, что нужно же её из каких-то элементов соединить? Или нужно окрашивать часть экрана?
212 2744751
>>44743
Что значит огроменную точку? Ты задачу подробней опиши.
Можно составить массив символов по нарастанию яркости и использовать его, например, ".,-:;c3#@". Но, думаю, что для твоей задачи это не подойдет и тебе нужно просто символ юникода вставить.
213 2744757
>>44751
Да я вообще мимироходил. Не знаю подробностей задачи. Просто стало интересно как вывести "огроменную" точку. Как я понимаю из вопроса анона про эту задачу, что у него идёт ряд точек, сначала энное кол-во обычных точек, а после этого кол-ва нужно вставить точку, которая будет больше обычных, скажем, раза в 4.
214 2744759
>>44757

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


Если для вывода используется терминал, то произвольно увеличивать отдельные символы не получится. Это тебе не ОпенГЛ, где можно умножить вектора на скаляр и изменить размер обьекта. В данном случае можно: использовать другие символы(т.е. заменить огромную точку на что-то похожее), рендерить изображение в памяти, а затем выводить его на экран(т.е. создать большую точку из маленьких точек), использовать жирный шрифт.
215 2744764
>>44759

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


Примерно так и предполагал.
Понял, анон, спасибо!
216 2744782
блять звездочку напечатайте уже хватит мозги ебать
217 2744789
Рубрика ответов чат-гпт:
В кодировке Юникод символы представлены шестнадцатеричными числами, называемыми кодовыми точками. Жирная точка, также известная как точка среднего веса, кодируется в Юникоде и имеет следующий код: U+2022.

Этот символ представляет собой круглую точку, часто используемую для обозначения элементов списка или маркеров. В различных языках программирования и системах можно использовать разные способы ввода жирной точки, например, с использованием управляющих последовательностей или специальных символов, в зависимости от контекста и требований конкретной платформы.
Для вывода жирной точки в кодировке Юникод в языке программирования C в терминале Ubuntu 22.04 можно использовать последовательность управления ANSI-escape или использовать функцию printf с необходимой последовательностью Юникод-символа.

Вот пример двух способов для вывода жирной точки в кодировке Юникод в языке программирования C в терминале Ubuntu 22.04:

### Способ 1: Использование последовательности ANSI-escape

#include <stdio.h>

int main() {
printf("\u2022\n"); // Использование Юникод-кода точки
return 0;
}

### Способ 2: Использование функции printf с UTF-8 символом

#include <stdio.h>
#include <wchar.h>

int main() {
wchar_t dot = L'\u2022'; // Объявление Юникод-символа точки
wprintf(L"%lc\n", dot);
return 0;
}

Компилируйте и запускайте код в терминале Ubuntu 22.04, и вы увидите вывод жирной точки в кодировке Юникод в вашем терминале.

Обратите внимание, что поддержка Юникод-символов может зависеть от включенных шрифтов и настроек вашей терминальной программы.
217 2744789
Рубрика ответов чат-гпт:
В кодировке Юникод символы представлены шестнадцатеричными числами, называемыми кодовыми точками. Жирная точка, также известная как точка среднего веса, кодируется в Юникоде и имеет следующий код: U+2022.

Этот символ представляет собой круглую точку, часто используемую для обозначения элементов списка или маркеров. В различных языках программирования и системах можно использовать разные способы ввода жирной точки, например, с использованием управляющих последовательностей или специальных символов, в зависимости от контекста и требований конкретной платформы.
Для вывода жирной точки в кодировке Юникод в языке программирования C в терминале Ubuntu 22.04 можно использовать последовательность управления ANSI-escape или использовать функцию printf с необходимой последовательностью Юникод-символа.

Вот пример двух способов для вывода жирной точки в кодировке Юникод в языке программирования C в терминале Ubuntu 22.04:

### Способ 1: Использование последовательности ANSI-escape

#include <stdio.h>

int main() {
printf("\u2022\n"); // Использование Юникод-кода точки
return 0;
}

### Способ 2: Использование функции printf с UTF-8 символом

#include <stdio.h>
#include <wchar.h>

int main() {
wchar_t dot = L'\u2022'; // Объявление Юникод-символа точки
wprintf(L"%lc\n", dot);
return 0;
}

Компилируйте и запускайте код в терминале Ubuntu 22.04, и вы увидите вывод жирной точки в кодировке Юникод в вашем терминале.

Обратите внимание, что поддержка Юникод-символов может зависеть от включенных шрифтов и настроек вашей терминальной программы.
218 2744940
>>44789
с чем связано такое точное время запуска программы? лунное солнцестояние?
219 2745214
>>44940
Я попробую запустить в 20.04, потому что в 18.04 и 16.04 чёт не пошла программа.
220 2745315
>>44789
а что такое терминал
image.png869 Кб, 900x536
221 2745427
>>45315
анал терминатора
222 2745431
>>45315
Настоящий чед, нихуя не шарит, а полез в си.
Или сейчас ещё какую-то студентоту на нём дрочат?
223 2745435
>>45431
да брось, студендота как и все вкатыну в мире дрочат ооп, а это плюсы как минимум
224 2745482
>>44429
Что не так с гитом?
/offtop
225 2745483
>>44425
Только потом как отвернешься от монитора, забудешь в чем смысл программы
226 2745485
>>44502
А ассемблер на кой?
image.png140 Кб, 640x463
227 2745501
228 2745509
>>45483
1C программист в треде, всем в табличку!
229 2745521
>>45485
Ну, мне он помогает, потому что я могу смело дизассемблить любые непонятные мне функции, и, читая дизассемблированный код, лучше понимать, как эти ф-ции работают.
image.png4,8 Мб, 2000x3008
230 2745612
Не понимаю как работают эскейпы.
Во всех мануалах пишут что \b это бэкспейс, но принтф "0\b1" печатает 01. Еще пишут что \a это звуковой алерт, но он чота не звучит. Еще пишут, что \r это возврат каретки, возврат куда? Он просто с новой строки печатает как будто это \n.

В общем я ничо не понял. Объясните. Или эти эскейпы только на настоящих терминалах работают и мне надо блять купить стойку AT&T чтобы работала эта параша ебаная?

Задача напечатать символ, стереть, напечатать другой. Хочу попердолить псевдографику но не хочу раздувать хистори консоли всеми кадрами отрисовки, лучше стирать символ и печатать заного.
231 2745642
>>45612
\r точно работает. Он возвращается в начало и можно поверху старой строки хуярить. Так делают все эти прогрессбары соснольные.

> Задача напечатать символ, стереть, напечатать другой. Хочу попердолить псевдографику но не хочу раздувать хистори консоли всеми кадрами отрисовки, лучше стирать символ и печатать заного.


https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html
232 2745647
>>45642
А в каких системах эти анси трюки работают?

>\r точно работает. Он возвращается в начало и можно поверху старой строки хуярить. Так делают все эти прогрессбары соснольные.


Блять мой эмулятор терминала игнорит эту хуйню.
233 2745697
>>45647

>Блять мой эмулятор терминала игнорит эту хуйню.


Что ты выводишь после \r? Если только один символ, то его сложно заметить.
234 2745800
>>45612

> чтобы работала эта параша ебаная?


Пхахах, ты виндузятник?
Для отладки выводи по символу, делая fflush и sleep.
235 2746317
>>45697
Да ничо не сложно. "0\r1" выводит 0 и 1 на разных строках. Я же говорю как \n
Ладно пойду попердолюсь, чота работает не так как должно работать.

Алсо \r и \v это экспейпы для принтеров говорят.
image.png298 Кб, 550x367
236 2746444
Окей я разобрался. В эклипсе эмулятор консоли (наверное как и в любой студии) не умеет в эскейпы. Родная консолька все стирает как и положено. Алярмы отменяются. Спите спокойно, жители моря.
237 2746692
>>46444
Уффф, анон, успокоил! Спасибо!
image.png314 Кб, 626x417
238 2746694
>>46444
Хммм
А вот цвета не работают в родной консольке.

Я имею ввиду ANSI секвенции.
Для курсор позишина все гуд printf("\033[%d;%dH",L,C); отлично отрабатывает.
А вот обертка для цветов не отрабатывает.
Сама ANSI строка задается как \[\033[<COLOR>m\] и в нее на место <COLOR> мы записываем например 0;32 (это зеленый цвет)
Но как бы я не пердолил эту ANSI строку она печатает символ '[' заместо переключения цвета.
Вот теперь я думаю мой эмулятор zsh не поддерживает цветовые секвенции ANSI и надо пердолить в tty например без гуев.

Или в чем трабла?
Снимок экрана 2023-06-28 в 00.20.11.png308 Кб, 968x958
239 2746696
>>46694
Ну ваще выглядит так будто реально zsh не поддерживает цвета. Вывод ls никак не маркирует по цветам папки и файлы. Хмм
Снимок экрана 2023-06-28 в 00.53.26.png96 Кб, 308x456
240 2746702
>>46696
В общем я не знаю. На хабре пишут все гуд, в мануале пишут все гуд только для x-term'a. Но вот моя палитра "цветов" для zsh. И цветов я тут не наблюдаю.

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

Ну и как мне блин написать реализацию cmatrix для этой залупы? Цветов то нет!
241 2746706
>>46702
Цвета, вроде бы, нужно печатать дригим способом. Завтра покажу.
Было бы неплого, если бы ты прислал исходники
242 2746707
>>46706
https://pastebin.com/FtVsbm2G
Держи исходник. Я тут уже с психу ебанул 0-99 значения в попытке поймать хоть какой то цвет. Но все тщетно.
243 2746716
https://pastebin.com/ZBJFSkTT
Анон у меня тут undefined behaviour или что?
Почему первый символ инпута заполняет весь array?
image.png147 Кб, 500x500
244 2746726
>>46716
какой аррей? пиздец конечно у тебя разметка уебанская, как будто у тебя дисплей из складного метра (пикрилейтед) состоит
у тя гетчар читает в ц, а потом если ц не 0 тогда ++ все 10 индексов аррея
нахуя тебе это я не ебу, но ты так написал

ну судя по принтам ты там какие то символы должен считать я хз
2023-06-28 032542-user@DESKTOP-VE36L8M ~1.png9 Кб, 732x205
245 2746729
>>46716
>>46726
Как у меня с 17 на 23 скакнуло?
246 2746730
>>46729
а чо это такое на скрине? пхп какой то
крч я не знаю где ты наебался анон, надо было юнит тесты хуярить на каждом шаге чтобы быть в курсе правильно у тебя считает вот здеся или нет, а ты походу нахуярил логику и ща будешь дебажить ее, удачи
потыкай шаги вайла в дебагере
247 2746732
>>46729
алсо вот тебе лайфхак для твоих флажков фора
found != 1 это то же самое что и !found
сишник булы извлекает как 0 и как все что не 0

тобишь if(0) = if(false), if(124124124) = if(true)
248 2746733
>>46732
хотя с интами не должно прокатывать
операция нот (!) это операция над булевыми и наверн надо кастарунть инт к улам прежде чем юзать булевы операции
!(_Bool)found
или просто флаг нормально объявить как булевый
249 2746734
>>46730

>а чо это такое на скрине?


gnu debugger
250 2746735
вот я думаю теперь над твоей задачей, ну точнее не совсем над ней а над тем что 4 байта для хранения символа это дохера

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

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

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

есть еще варианты?
251 2746737
>>46716

j=j2; to j=j2-1
и заработало
image.png188 Кб, 626x351
252 2746740
>>46737
круто что нашел! молодец!

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

но вот например хранение числа матчей в соседнем байте инта
https://pastebin.com/yzcBWVcY
253 2746744
>>46740

>надо свою матешу


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

бля дохуя операций и ваще ритчи писал что есть машины с двухбайтными интами, так что такое решение через чар поинтер даже лучше
254 2746792
>>46744

>машины с двухбайтными интами


Инт это четыре байта. Шорт это два байта.
255 2746835
Аноны, помогите разобраться, пожалуйста! Столяров пишет, что в Си отсутствуют средства ввода/вывода, а всевозможные printfы и scanfы - это библиотечные ф-ции, которые сами написаны на Си. Так вот, где в заголовочном файле stdio.h (и где искать этот заголовочный файл в убунте, там есть несколько заголовочных файлов stdio.h) мне прочитать код этих функций? Просто интересно как это реализуется средствами самого языка.
256 2746982
>>46835
Могу ошибаться, но код ты посмотреть скорее всего не сможешь.
Ты можешь посмотреть используемые библиотеки в директории /usr/lib, например. Используемые библиотеки у скомпиленного исполняего файла можно посмотреть через readelf, а используемые системные вызовы через strace.
257 2746989
>>46835

>и где искать этот заголовочный файл в убунте, там есть несколько заголовочных файлов stdio.h


Ты можешь посмотреть код библиотеки stdio.h, но ничего полезного кроме внешнего вызова ты там не найдешь.
Основная реализация находится в системной библиотеке libc( glibc в linux), поэтому копай в эту сторону. Исходники можно найти в интернете.
258 2747027
>>46792
хочешь сказать что я пиздабол и сам придумал сайзофать инты заместо подстановки цыфры 4? нахуй иди долбоеб
259 2747042
>>46835
А это какой том Столярова судя по всему речь о "Введение в проыессию"
260 2747054
>>46740
Так у тебя получилось цвета пофиксить?
sage 261 2747106
>>13428 (OP)

>clang


Это компилятор, не язык.
Снимок экрана 2023-06-28 в 13.52.53.png2,2 Мб, 2540x1404
262 2747120
>>47054
Да. Надо было флажок нажать "показать цвета". Мои догадки про то что именно этот zsh не умеет в цвета оправдались. Именно этот и не умел.
263 2747161
>>47120

>Мои догадки про то что именно этот zsh не умеет в цвета оправдались


Это не проблема zsh, потому что оболочка этим не занимается, плюс она является ПОСИКС совместимой. Это у тебя эмулятор терминала цвета не выводил, потому что функция отключена была.
264 2747384
Чот не пойму как в printf'e сделана перегрузка необязательных параметров?

int printf(const char х __restrict, ...) __printflike(1, 2);

#define __printflike(fmtarg, firstvararg) \
__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
#define __printf0like(fmtarg, firstvararg) \
__attribute__((__format__ (__printf0__, fmtarg, firstvararg)))

Кто то может расшифровать? Это макрос или чо? И как оно работает? Как вот мне написать аналогичную функцию myfunc(int a, ...) __myfunc(1,2);

?????????
265 2747426
>>47384
man stdarg

> перегрузка


Брысь
image.png60 Кб, 1133x542
266 2747439
>>47384

>Кто то может расшифровать? Это макрос или чо? И как оно работает? Ка


Попытаюсь обьяснить как я это вижу, так что могу быть не прав.
Это вариадик функция. Первым аргументом передается обязательная часть(fmtarg - formatting argument?), а потом передается специальная структура, которая содержит в себе произвольное количество аргументов(firstvararg - first variadic argument?)

>#define __printflike(fmtarg, firstvararg) \


>__attribute__((__format__ (__printf__, fmtarg, firstvararg)))


>#define __printf0like(fmtarg, firstvararg) \


>__attribute__((__format__ (__printf0__, fmtarg, firstvararg)))


Тут никакой магии нет, просто повышение уровня абстракций и обертка над оберткой.

>ак вот мне написать аналогичную функцию myfunc(int a, ...) __myfunc(1,2);


пикрил
267 2747458
>>47426
Что с тобой не так челик?
268 2747492
>>47384
printf -- функция с переменным количеством параметров

Для работы с функциями с переменным количеством параметров используется макрос stdarg, ты прав
269 2747504
>>46982
>>46989
Аноны, спасибо за ответы!

>>47042
Это второй том, в котором речь идёт об ассемблере и введении в Си.
270 2747508
>>47027
2 байта инт был на 16-ти битных машинах, на 32-х битных машинах инт вырос до 4-х байтов, в 64-х битных машинах инт размер не поменял и остался быть 4-х байтным.
271 2747529
>>47508
Зависит от компилятора, на самом деле вроде как
272 2747612
почему консоль мигает, когда чищу её через систем цлс?
есть какие то другие команды, что бы сделать это без мигания?
273 2747615
>>47529
Да, это правда, тогда, возможно у него компиллятор считает инт, как двухбайтный тип. Тогда, анон >>47027, сорян, что я решил поумничать.
274 2747620
>>47612
Эмм, потому что ты спавнишь целый процесс на такую хуйню?
sage 275 2747622
>>47620

Что-то подсказывает, что он делает около-аскии графику и хочет, чтобы этот процесс отрисовки консоли заново не был таким.

У меня собственно тоже такой вопрос хочу сделать АСКИИ морской бой
276 2747631
>>47622
А хз, надо смотреть как в всяких ncurses сделано, там вроде не фликерит.
image.png119 Кб, 1743x631
277 2747632
>>47622

>чтобы этот процесс отрисовки консоли заново не был таким.

image.png13 Кб, 1100x476
278 2747635
>>47622
да, хочу покрутить квадрат
279 2747637
>>47615
Да ничего страшного, мы все тут сидим и умничаем друг перед другом. Дэнис Ритчи сам написал что надо не забывать делать сайзофы инта потому, что есть машины с двухбайтными интами. Я это не придумал.
280 2747641
>>44789
попробовал оба варианта, у меня вместо точки какие буквы вылезли. Значит терминал у меня какой то не такой или что?
281 2748152
>>37924
предполагаю что в С константы будут заменены своими значениями мимо жс бибизян
282 2748493
>>48152
Дальше по треду мы уже разобрали этот момент.
image.png9 Кб, 224x224
283 2748496
>>48493
Он асинхронно ответил.
284 2748531
>>48496
Судя по скорости его ответа, то

>мимо жс бибизян


здесь он не соврал.
285 2748603
Собрал свой хидер если кому надо покрасить консольку.
Сам исходник подкатом.
https://pastebin.com/MhqV7p9X
286 2748641
>>48603
Алсо вот такой вопросик возник.

Можно ли как то в сишнике инкапсулировать прототипы функций? Ну вот допустим я заинклюдил хидер и там лежать фукнции всякие. Можно ли как то сделать так, чтобы я не мог из мейна напрямую юзать функции, а только через обертки публичные? Ну крч как инкапсулировать то? Статик не решает эту задачу.
287 2748654
>>48641
Никак. #include просто вставляет текст указанного файла.
288 2748658
>>48654
А если допустим не инклюдить, а компилить в отдельный объектный файл и потом уже мейком собирать? Тогда поидее статик ограничит область видимости до объектника и все. Разве нет?
289 2748796
>>48603
out() небезопасен
include ограждать не надо
290 2748884
>>48152
В глаза долблюсь, сори
>>37970
Нубский вопрос по второму пику. Почему компилятор компилирует мертвый код и почему раз уж он его компилирует, то не делает свертку констант?
В javascript этот же код будет условно одной строкой
REX.W movq rax,0x600000000
291 2749116
>>48884

>мертвый код


Что значит мёртвый код? Это код, который показывает как выглядит программа, что на пике 1, в виде машинных инструкций.

>REX.W movq rax,0x600000000


Я так понимаю, что интерпретатор джээс использует макросы, т.е. эта строчка, которую ты привёл, на самом деле, на каком-то этапе развёртывается в код, который похож на пик 2, поэтому и такое различие.
image.png18 Кб, 322x204
292 2749183
>>49116

>Что значит мёртвый код


Это код который никогда не выполнится или который ничего не делает. По идее компилятор должен понять что main не несет никакой полезной нагрузки и просто выкинуть этот код.

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


Не, это как раз строчка скомпиллированого кода аналогичной функции на js, компилятор видит что мы просто складываем статичные числа и заменяет две операции a = 3; b = a * 2; одной операцией b = 6;
Просто стало интересно почему С компилятор не делает аналогичную свертку. Может надо флаги какие-то задать?
293 2749194
>>48884
Потому что аноны не знают, как включить оптимизации.
294 2749216
>>49183
Ну вот ответ >>49194
Я просто не включал оптимизацию, потому что мы же изучаем строение языка.
295 2749226
>>49216
>>49194
Теперь понял. Странно что оптимизации не включены по умолчанию.
296 2749244
>>49226
Не странно. По умолчанию код должен быть такой какой пишешь, а всякая самодеятельность компилятора ведет к багам, поэтому это опционально под твою ответственность, если что сам себе злобный буратино.
297 2749246
>>49226
В этом и мощь языка Си, потому что оптимизация это лишняя память, плюс лишние такты, которых может не быть на устройстве, под которое пишется код.
298 2749389
>>49246
Уже давно на копеечном ембедде мощи больше, чем тебе надо, хуярят иотовые питоны и жабаскрипты. Это тебе к дедам на лавочке послушать про байты и такты.
299 2749434
>>49389
Ты скозал? Чёт на моём шлагбауме, который открывается по нажатию кнопочки, я не заметил много гигабайт памяти и супермощный процессор.
300 2749472
>>49434
У тебя и банкоматы на районе на списанных шиндовс нт, который старше тебя. Есть проблески, но проще купить готовое решение.
301 2749481
>>49472
Банкомат, который занимает, как минимум, кубический метр, и всегда подключён к сети, сравниваешь со шлагбаумом, "голова" которого не больше 0,008 кубического метра...
Всё с тобой ясно, скрипто-макакыч.
302 2749488
>>49481
Задачи банкомата может решать мк за полтора бакса, но функционал проверен комиссиями, стандартами и прочими капитализьмами. Купить полтора тонны сертифицрованного мусора дешевле, чем заниматься этим с нуля.
Вообще, задачи бизнеса важнее твоей технической хуйни. Как только ты это поймешь, так перестанешь быть ойти-мальчиком, а станешь солидным господином. Но ты не поймешь, т.к. ты наёмный работник, а не господин.
303 2749501
>>49488
Одна из задач бизнеса это максимизация прибыли, что включает в себя, также разумные траты на технические средства, которые могли бы обеспечить выполнение той задачи, которая на них положена, а это означает, что не нужно тратить много денях на доп. оперативную память и процессор с несколькими сотнями мегагерц, чтобы обеспечить быструю и не "лагающую" работу интерпретатора питона, на котором так приятно кодить скрипто-макаке, которую я нанял.

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


Чёт я сомневаюсь, что безделушка за полтора бакса сможет потянуть оптимизацию пайтона или жээс, так ещё и обеспечить "приятную" работу с сенсорным дисплеем.
304 2749513
>>49501
Существующий мусор это дешево и работает с колёс, что и нужно бизнесу. Можно делать с нуля на будущее, но это противоречит философии постсовкого бизнеса, у которого суть получить прибыль здесь и сейчас, пока что-то не наебнулось. И это вполне разумно, не так ли?
305 2749521
>>49513

>И это вполне разумно, не так ли?


Согласен, это разумно, но до определённых пределов. Просто не понимаю, что ты хочешь до меня донести?
306 2749528
>>49521
Хочу до тебя донести, что твоя технологическая целесообразность очень редко пересекается с бизнес целесообразностью, для которой тебя нанимают.
Тебя наняли выкопать яму, а для чего её копают и какими средствами это не твоего ума дело, если тебя об этом не спросили.
307 2749529
>>49528
Так, и что мне делать - перестать изучать Си и кодить на нём?
308 2749547
>>49529
Изучать си и предоставлять услуги, или вкладывать деньги и получать услуги.
Но ты не годишься ни для того, ни для гругого, по-моему.
Ты из тех водителей троллейбусов, у которых какие-то фантомные амбиции. Да, любой хуй в постсовке имел окно, чтобы чего-то добиться. Сейчас этого нет. Сейчас в постсовке выжить это уже заебись, если у тебя есть возможность выехать и работать таксистом это уже замечательно. Не всем получать заработок на уровне потомственной ренты. Чисти трубы и живи достойно, сука, хули ты выебываешься?
309 2749565
>>49547

>И это вполне разумно, не так ли?


Скрипто-макакыч разорвался!!! Ладно, анон, хватит флудить в этом треде. Если хочешь позаниматься хернёй, то иди в б, и там загоняй свою философию, а нормальные ребята и так понимают, что из-за автоматизации, скоро и светофоры станут "умными", а для этого их нужно будет подключать к сети, чтобы мощные серваки, которые обладают овердохера памятью и суперпроизводительными процессорами, выдавая "красивое" окошко уведомляли оператора (скрипто-макаку), что в том или ином месте прогнозируется затор, следовательно он должен в "красивом" окошке переключить режим работы светофора. Но вот, чтобы светофор, своим маленьким микроконтроллером, понял, что скрипто-макакыч хочет преключить режим его работы, и нужны будут такие ребята, как я, и как многие из этого треда, которые напишут под этот маленький мк код на Си. И таких светофоров, шлагбаумов, турникетов, и т.д, и т.п. с каждым годом будет становиться всё больше и больше. Поэтому, анонче, флуд в б, а здесь только сишный, с ассемблерными вставками, хардкор.
310 2749719
>>49529
Да лучше уж Си дрочить в свободное время, чем какой-нибудь лисп или еще хуже хаскелль. Хотя лисп еще минимально интересен за счет интерактивности, но это давно и в Питоне с Джулией есть. А в Джупитер и C++ запилили уже.
311 2749769
>>49719
Да я хз откуда такая ненависть к Си! Это афигенный язык, благодаря ему и ассемблеру, я просто лучше стал понимать компьютер, да и благодаря этим знаниям, даже мой код на питоне стал красивее, лаконичнее, быстрее, просто потому что я теперь понимаю как бегают байтики в компьютере. Плюс к этому теперь ещё и логические операции со сдвигами обрели какой-то внятный окрас, просто я понимаю, что эти операции гораздо проще выполнять процу, да и благодаря этому теперь ещё и математика для меня совсем другой окрас обрела.
312 2749848
>>49226
Это как раз логично, а не странно. Например для криптографии полезно размазать управляющие команды всяким мусором, чтобы очередной кулхацкер джиэсбибизян по дизасемблу не смог накодить кейген для очередной денувы.
313 2749968
>>49769
А денег больше получать стал, пониматель компьютеров?
314 2749980
>>49769

>Да я хз откуда такая ненависть к Си!


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


Именно отсюда. Раз си помогает лучше узнать компьютер, его ненавидят те, кто ненавидит компьютеры, не хотят ничего про них знать. Большинство не хочет лезть разбираться в кишках компьютера, им надо наоборот, чтобы было проще, меньше думать, меньше делать, чтобы тык и стало заебись, чем дальше от компьютера, тем лучше, они стремятся к языкам более высокого уровня, более далеким от настоящей архитектуры железа.
image.png704 Кб, 800x777
315 2749991
>>49980
Так уже придумали скратч. Зачем они теряют время на пустословия в топике морей, когда можно лампово чиллить на хайлевел джипег бейзед ультрапоредж лангуаге?
Вопрос риторический, повторяю вопрос риторический.
316 2750045
>>49968
Нет, денег больше не стал получать. Но и программированием занимаюсь не потому что тут все 300 кк/наносеки, а потому что мне это интересно, потому что я получаю некое эстетическое удовольствие, когда написанный мною код делает то, что я запланировал. А Си и ассемблер я стал изучать, потому что, кодя на питоне, компьютер для меня так и оставался магией, даже пытаясь освоить книги по его архитектуре. Или у тебя, дебича, всё меряется деньгами?
317 2750646
Аноны, что это такое? Зачем в этом примере приводить к типу uint64_t на пике 1? Мой код на пике 2 не принимает и выдаёт ошибку на пике 3, причём всегда после после 2^30. Собственно, вопрос в чём я не прав?
318 2750714
>>50646
наверн потому что ты делаешь сдвиг в инте?
319 2750723
>>50714
Анон, рили! Получается, что цилочисленные литералы имеют тип инт. Спасибо, анон, просвятил.
320 2750727
>>50723
ну вот у меня теперь вопрос к знатокам. почему компилер идентифицирует единичку как инт? наверное зависит от флагов компила? ну логичнее же представлять единичку как ансигнед чар, чем как инт, а с флагами омпила наверное он еще и мог бы предугадать что ты тут подразумеваешь ансигнед лонги и представить единичку как ансигнед лонг (или ансигнед лонг лонг, наразных машинах это разные типы)
321 2750911
>>50727
есть литералы для таких случаев.
https://unetway.com/tutorial/c-konstanty-i-literaly
322 2750913
>>50911
Ты, наверное, хотел сказать, что есть суффиксы для литералов для таких случаев.
323 2750915
>>50727

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


Да! Который все равно станет int из-за integer promotion.
324 2750988
почему квадрат сплющивается в начале и стягивается к центру?

сильно не бейте, моя первая программа

https://pastebin.com/WKzji6Sb
325 2751013
Какая максимальная допустимая длина переменной?
326 2751015
>>51013
*длина имени
Тема про open и бинарные файлы. Аноним 327 2751027
Добрый день.
Изучаю Си.
Так вышло, что в моём понимании fopen вызывает open и что-то потом делает.

Собственно вопрос: как open может открыть бинарный файл? Вот fopen("bla_bla_bla","rb") позволяет читать бинарный файл, fopen("bla_bla_bla","wb") записывает в бинарный (и создаёт, если его нет), а как такое проделать с open?

Мои попытки записывать через open+write приводили к появлению текстового файла.
328 2751079
>>51027
В юниксе, откуда твои open+write, не было такой педерсии, как текстовые vs двоичные файлы.
329 2751085
>>51027
Если ты про шиндовс, то там нет никакого open. Если про linux, то вызову open фиолетово что там
330 2751752
не могу понять почему на пинус так и не накодили аналог conio.h с индикатором kbhit
неужели кбхит ненужен? а если и так тогда через какие средства мне накодить самый обыденный интерактив:
for(;;){
if(kbhit()){ switch( c=getchar() ){} }
}
331 2751753
>>51752
точнее нет не так вопрос должен звучать.
вопрос должен звучать вот как - существует ли какое либо кроссплатформенное решение по замене гетча через кбхит?
ну я не знаю, может читать байты из буфера консоли можно и на пинусе и на шинде одинаково (в чем я сильно сомневаюсь, команд лайн это какая то каляска по лекалам павершелла а не копия)
332 2751925
>>50988
немношко поправил код, теперь квадрат не сплющивает, но по прежнему все точки тянет в центр
334 2752546
>>51925
>>51928
ну не знаю, я не буду дебажить твой код, но я не вижу у тебя мат окургления флоатов до интов, походу ты просто отрезаешь дробную часть
image.png5 Кб, 543x79
335 2752916
>>52546
вот же
336 2752921
Объясните плз, как работает обратный вызов, для чего его вообще использовать?
Сделал пару примеров с указателями на функции, где в функцию передается указатель и потом по очереди в цикле по указателю вызываются разные функции из массива указателей на функции. Но как при этом себя ведет поток управления? Пишут, что он идет в обратную сторону, потому и обратный вызов, но я не могу этого понять. Как работает стек при использовании обратных ввзовов тоже не понятно.
337 2752928
>>52916
а, окей я не заметил при беглом листинге
а что значит жмутся к центру? может надо на радиус умножить корды?

у = син(а) х радиус
х = кос(а) х радиус
иначе корды в разбеге -1 to 1 по флоатам будут и околонулевые по интам
338 2752935
>>52921
для чего обратный вызов я не знаю, но указатель можно положить в структуру и будет классно
image.png9 Кб, 1123x733
339 2752943
>>52928
радиус это константа, на какую константу не умножай, с каждой следующей итерацией, они всё сильнее и сильнее тянутся к центру
вплоть до сингулярности
Вот как это выглядит (чем больше угол поворота, тем быстрее сплющатся)
340 2752947
>>52943
ладно, тебе виднее
341 2752979
>>52943
Такие алгоритмические задачи надо делать на подходящем языке, как питон или бейсик. Вот когда отладишь алгоритм, тогда можно его переносить на си. Иначе непонятно, то ли у тебя в алгоритме косяк, то ли ты наступил на сишные грабли по незнанию языка или неосторожности, как например выход за пределы массива или неправильная арифметика чисел.
342 2752987
>>52979
Бог дал человеку инструменты дебага, но человек не перестал млеть
от мыслей о высоком уровне, и тогда Бог обозлился на человека, и сделал его скрипто-макакой.
image.png50 Кб, 200x200
343 2752999
>>52987
>>52979
в голос
344 2753424
>>52979
Единственный язык, который нужен дополнительно, это ассемблер (nasm, так с ним много рарных книг), и то на уровне, чтобы ты мог читать дизассемблированный код. Знаешь Си и ассемблер, можешь дебажить, плюс правильно дизассемблить (как бы с элементами дебага, главное, чтобы можно было ходить по дизассемблированному коду по шагам), значит можешь приступать к фундаментальным алгоритмам. И поверь, ни одна книга, сайт, статья, препод, т.е. ни один источник информации, откуда ты будешь черпать её, посвящённый любому высокоуровневому ЯПу, не расскажет тебе о фундаментальных алгоритмах столько, сколько ты сам сможешь выудить, используя связку си-асм-дизассм-дебаг. А огрехи в понимании этих алгоритмов будут стопроц., потому что в их структуре (особенно, если используется любой высокоуровневый ЯП) столько уровней абстракции, что ебанёшься!!!
345 2753436
>>53424
Художественная книжка кернигана про юникс даст тебе больше, чем мильйоны абасракций, которые ты даже не осилишь.
346 2753451
>>53436
Скрипто-макакыч, ты то чего порвался? Хочешь сказать, что я не прав, что ли?
347 2753454
>>53451
Да, ты кондовый снулист, который думает, что если он начнет прорабатывать букварь, то станет дохуя писателем-философом. Не станет.
Будет дристать такими максималисткими выпадами в сторону всех подряд, пока не стухнет окончательно.
348 2753500
>>53454

>прорабатывать букварь


Скрипто-макакыч, ты пойди хотя бы один уровень абстракций пойми!! Как букварь, где описаны лишь символы, т.е. атомарные частицы языка, можно сравнивать с целыми языками, на которых написаны целые системы? Дебич, хватит здесь дристать! Просто пойми уже наконец, что ты ни за что не освоишь рекурсию на питоне, пока не посмотришь на то, как она выглядит на уровне машинных команд (на самом деле ничего сложного). Если ты до сих пор не осилил рекурсию, мы не виноваты. За что ты нам тут постоянно срёшь тупостью?
349 2753507
>>53500

> > Будет дристать такими максималисткими выпадами в сторону всех подряд, пока не стухнет окончательно.


Сколько лет, сколько лет прорабатываешь?
350 2753509
>>53454

>кондовый снулист


Поди, ведь, все выходные и понедельник искал это выражение, чтобы высрать нам его в этом треде. Вот шизик, пиздос!!
351 2753554
>>53509
Что там искать, это главный инфоцыганский термин. Любого овоща можно вкатить в зарабатывание миллионов, но именно С НУЛЯ. Потому что у него нет никаких знаний, он НОЛЬ.
А тут проработает вопросик с Анатолием Пиздунковым и уже ПРОФЕССИОНАЛ.
352 2753643
>>53507
Ты типа ругаешься на то, что это долго? На самом деле, прорабатываю может полгода, даже меньше. Пара месяцев ушло на то, чтобы понять, что Си без асма не осилю, потом пара месяцев ушло на то, чтобы осилить асм на уровне, чтобы можно было бы читать дизассемблированный код. И сейчас прошло ещё, наверное, пара месяцев, когда я дизассемблю всё, что мне не понятно, продолжая изучать Си. Ясен пень, что всё это не без перерывов, тому что 24/7 не могу уделять Си, но то, что после освоение асма обучение ускорилось и улучшилось это сто процентов.
353 2753654
>>53643
Ты за деньги работал когда-то? Сколько?
354 2753657
>>53654
Программистом не работал. А так, конечно, работал и работаю.
355 2753663
>>53657
Ну пиздец, так сразу и надо сообщать первой строчкой перед своими постами.
356 2753668
>>53663
Извини, в следующий раз воспользуюсь твоим советом.
image.png562 Кб, 1054x1500
357 2753738
358 2753774
>>53738

>Нотацией примеров теперь служит Оберон/Компонентный Паскаль – наиболее совершенный потомок старого Паскаля по прямой линии.



А мой хитрый план состоит в том, чтобы сразу на Си нырнуть в фундаментальные алгоритмы.
359 2753784
>>53774
Ловите столярова и топите его в бочке с тухлой рыбой.
Чо он там, кстати, высказался или молчит как уёбище?
360 2753807
>>53784

>Ловите столярова и топите его в бочке с тухлой рыбой.


А его за что?
361 2753822
>>53784
так столяров же с Паскаля начинает, не? или ты про какого-то другого столярова?
362 2753832
>>53822
Да забей! Наш скрипто-макака сегодня совсем обезумел.
image.png371 Кб, 793x784
363 2753883
>>53774

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


мне так нравится это выражение
вот наши то алгоритмы фундаментальные, не то что у ваших там виртов

фундаментальные это вот такие как
алгоритм сложения двух чисел return a + b;
?

а соответственно нефундаментальные это основанные на фундаментальных? тоесть квик сорт уже не фундаментальный будет

уууу вирт собака сутулая хуйне всякой учит
364 2753939
>>53883
Чёт ты переборщил с тупостью! Ты бы хоть оглавление этих книг прочитал, а потом оглавление книги Вирта, и тогда понял бы, что это суть одно и тоже (практически). Только тут примеры на Си, а у Вирта на Паскале. Видать из-за жары сегодня и скрипто-макака с цепи сорвался, и другие аноны подтупливают...
365 2753946
>>53939
да у меня нет претензий к книгам
у меня претензия к фразе
366 2753959
>>53946
Ну, это похоже надмозги так перевели.
367 2754240
>>53774
Не могу понять, зачем нужны эти книги? Просто выложили бы исходники на гитхаб и всё. Зачем мне как дебилу перепечатывать с книжки? Что в башке этих идиотов творится?
368 2754299
>>54240
Чего ты ругаешься? Обычно, в книге есть ссылка на сайт, где можно все исходники из этой книги найти.
369 2754780
>>53454

>начнет прорабатывать букварь


твой уровень абстракции близок к инфантильному, скриптоманя. Это почти что магическое мышление.
370 2754784
>>54780
Ты в своей абстракции уже преисполнился?
371 2754940
двач простой вопросесли я использую символ которого нет в аски и меняется кодировка, получается каждый символ кодируется уже не одним байтом а двумя?
372 2754949
>>54940
В утф8 переменный размер, тот же аски это его подмножество с теми же кодами.
373 2754954
>>54949
это значит меняется? или нет?
типа не может же быть что бы одни символы кодировались одним байтов, а другие двумя (или может)?
374 2754961
>>54954
Может, именно так и есть.
375 2755028
>>54961
типа когда я пишу char var
откуда он знает сколько памяти выделить? (один или два байта)
я ведь ещё не записал в него никакой символ...
376 2755064
>>55028
Там отдельные типы и функции, которые с этим работают, обычные вроде latin-1.
sage 377 2755148
>>55028
Копай в сторону uchar16_t, uchar32_t, wchar.
378 2755152
>>55148
Извиняйте, парни, что случайно саганул.
379 2755169
>>54949
Так, стоп. Переменный размер в каком смысле? Вот есть например японское предложение(условно), каждый символ будет(так же условно, я не знаю сколько там конкретно байт на символ используется) 2 байта, но тут вдруг в этом предложении встречается слово, написанное на английском, то есть умещается в 1 байт каждый символ. Это слово английское тоже будет на каждый символ 2 байта занимать, или тут будет какая-то вуду магия и в данном случае будет уже 1 байт? То есть половина предложения из 2 байт, а другая из 1?
380 2755200
>>55169
Ну почитай вики, штоле. Там битмаска, которая кодирует длину последующего символа. Суть та же, что в компрессии - самые ходовые символы (аски) занимают минимум в один байт, самые залупные и нинужные больше.
https://ru.wikipedia.org/wiki/UTF-8#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F
381 2755223
>>55200
просто это не совсем стыкуется с тем что я читал до этого.
вот например я инициализирую переменную char, но пока не присваиваю ей никакое значение.
Для неё выделяется ровно 1 байт (или ровно два байта)
количество байт не может увеличиться или уменьшится после присвоения. Если в тексте есть символы не из аски, то компилятор заранее как то должен об этом узнать и кодировать всё двумя байтами. Если нет, то и смысла в двух байтах нет и на всё выделяется только один байт.
\Что из этого неверно?
382 2755231
>>55223
Я же говорю, там другой тип wide char, он резервирует больше, что-то не используется, очевидно.
383 2755236
>>55231

>там


где
384 2755254
>>55236
В стандарте.
385 2755297
Как можно получить доступ к видеокарте чтобы отрисовывать пиксели? Я хочу для своих нужд написать простейшую графическую библиотеку, чтоб она точки да линии рисовала. Находил только гайды по SDL, но мне лень её изучать, хочу свою написать.
386 2755318
>>55297
SDL этим не занимается, насколько мне известно. Это грубо говоря обертка для openGL
387 2755321
>>55297
А так надо смотреть исходники mesa наверное. И кстати тебе действительно легче свою написать, чем изучить готовое, годами проверенное решение? оптимистично
388 2755467
>>55297
пихнуть на шину байты?
image.png30 Кб, 275x183
389 2755666
аноны
а вот такой вопрос
допустим есть какие то данные (похеру пусть числа будут) как их организовать чтобы поиск по ним был максимально быстрый?

с одной стороны самый быстрый поиск проходит по б-три, но с другой стороны есть префетч сортированных массивов
ну так и что быстрее то в итоге?

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

блять у меня реально зогошиза с этой хуйни начинается, храдварщики сознательно откатывают технологии на 50 лет назад иил чо?
390 2755675
>>55666

>храдварщики сознательно откатывают технологии на 50 лет назад иил чо?


Какие еще "технологии", лол?
Все "технологии" были созданы для обхода костылей железа. И половину проблем, которые решают "технологии", можно было решить, отказавшись от x86 в свое время, но срыночек и нужные связи выблядков из intel порешали , поэтому имеем, что имеем.
391 2755677
>>55675
Алсо, нет ничего удивительного, что выкидываются костыли, когда проблему решают на фундаментальном уровне.
392 2755682
>>55675
>>55677
а при чем тут костыли? бинарные деревья какой костыль железа обходят? за тайм ты делаешь шаг по массиву или шаг по поинтеру, а теперь хардварщики начитерили и за тайм ты либо делаешь шаг по поинтеру либо 10 шагов по массиву

какие костыли то? мне кажется ты путаешь
393 2755693
>>55675

>проблемы можно было решить, отказавшись от x86 в свое время...


>"Весь старый мир мы разрууууушим! До основааанья, а затееем! Мы наш, мы новый мир построооим! С чистогоооо листаааа!"


Слыш, тупое говно, это называется деградация, взять и заруинить достижения прошлого, откатившись в болото недоразвитости. Переписывальщики херовы, каждого такого пидараса надо клеймить как дегенерата и больше ни к чему не подпускать, кроме работы дворником и мойщиком полов, да и то с осторожностью, и там умудрятся нагадить всё испортив.
394 2755698
>>55693
Шиз, деградация - это когда еще в 90х годах ты знаешь о том, что твой продукт говно и продолжаешь его пилить. Вот сейчас инцелам полная пизда, потому что лимита по нанометрам достигли, а расширяться больше некуда, архитектура говно, о чем, повторюсь, знали еще в конце прошлого века и другие компании решали эту проблему, но срыночек порешал.
395 2755700
>>55698
слыш хардарщик билять хватит говно мне в жопу заливать атвичай пачиму ультрасовременные бинарные деревья с логарифмическим биг оу работают медленнее чем скуфидонские массивы с линейным биг оу

а ну к стенке становись, из за тебя проебываем алгоритмы
396 2755710
>>55700

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


Ты же сам ответил на свой вопрос постом выше. На одинаковой железной базе выбор правильного алгоритма или структуры данных могут зарешать, но если на уровня железа есть прикольные фичи, то можешь хоть обосраться со своими алгоритмами.
Это вопрос уровня "Почему программы дидов, которые оптимизировали код сотни часов, лагал, пердел и свестел, а модный и молодежный питончик даже при сортировке пузырьком работает быстро?"
397 2755713
>>55698

>рыночек порешал


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

Как наглядный пример, посмотри на линукс. Уже 40 лет пишут графическую среду, но всё никак не напишут. Каждый раз выкидывают старое и переписывают по новой, и каждый раз становится только хуже и хуже.
398 2755716
>>55710
так я тебя и спрашиваю нахуя вы откатываете технологии взад дебилы вы дремучие рептилоиды сука с нибиру иншала вертел нибиру тваю маму рот наоборот
399 2755719
>>55716
Какие технологии назад, шиз? Раньше ты пользовался хуйней Х, чтобы обойти косяк копроархитектуры. Теперь это пофиксили и ты пользуешься Y. А все твои технологии в ИТ остановились в развитии где-то в 80-90х. С тех пор ничего прорывного и фундаментального не изменилось. Даже современные ЯП пиздят фичи из старых и малопопулярных языков и выдают за неебаца прорыв.
400 2755720
>>55719
сука ты чо меня бесишь рептилоид ты хоть раз назови блять этот косяк который обхиодит костыль в виде бинарного дерева тупая ты хуета блять дремучая заладил про костыли и пояснить нихуя не можешь выйди нахуй с треда
401 2755721
>>55713

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


Когда у меня приступы такой шизы находят, то я ставлю старую винду(хотя бы xp/vista(про линукс тех времен даже говорить не буду)) на некропеку из чулана и начинаю пользоваться. Сразу пропадают все эти манямысли про НАСТОЯЩИЙ софт дедоф. Это не более чем искажение восприятия и ностальгия.
402 2755723
>>55720

>ряяя не смейте делать процессоры быстрее


Лол.
Причина подрыва, шизло? У тебя горит попа с того, что материальный мир побеждает твою идеалистическую хуйню? Если кто-то запиливает ускорение определенных операций на физическом уровне, то очевидно, что они будут работать быстрее всего остального.
Наверное, если создадут такой процессор, который сможет нативно исполнять ФП код, то у тебя вообще анус треснет?
403 2755728
>>55723
тебе задали вопрос
ответа ты не знаешь
нахуй ты дальше пукаешь тут уебащие?
404 2755730
>>55728
Какой вопрос, выблядок? Ты кроме своего рявканья ничего не с силах сказать. Сначала удивился, что физическая оптимизация оказывается эффективней программной, а потом из-за этого порвался и начал всех рептилоидами обвинять, которые как оказалось манямирок дегенерату сломали. Воистину долбоеб.
405 2755733
>>55730
третий раз вопрос повторить?
406 2755734
>>55733
Очевидно, да. Ибо ты в каждом из своих постов что-то другое спрашиваешь.
407 2755735
>>55734
какой косяк/костыль/маняхуйнянейм архитектуры обходит алгоритм поиска в бинарном дереве?
image.png113 Кб, 221x228
408 2755738
ебаный рептилоид билять напердел в тред своих маняфантазий рака хвоста тебе уебище
409 2755755
>>55721

>я ставлю старую винду(хотя бы xp/vista(про линукс тех времен даже говорить не буду)) на некропеку из чулана и начинаю пользоваться


Перевожу на человеческий язык: дегенерат пытается запустить хром под хр, тот не запускается, бабах, говно нинужно кал, виндоус11 фарева, во имя святого гугла, аминь

Какое там искаженное восприятие, когда биологический урод без мозгов, у которого восприятие реальности отсутствует за пределом одноклеточной браузеропараши и насасывания корпорации-барину.
410 2756376
>>55721
Э, слыш. У меня 98 на Р4 моментом грузится. Почему современный пука так не может, пока не прикупишь еба-ссд?
изображение.png9 Кб, 298x132
411 2756420
Я правильно понимаю, что в такой структурке, если я буду выделять память динамически под data, то у меня при выводе contents будет выыводиться адрес, смещенный на 8 относительно наачла структуры?
412 2756489
>>56420
На sizeof(int)
413 2756857
пачаны есть у кого реализация getchar()?
уже весь stdio.h перерыл не могу найти реализацию
414 2756989
Педерасты, объясните, почему сысоев выбрал размещение sentinel где-то в левом месте а не в самой структуре ngx_rbtree_t. Т.е. у него sentinel лежит всегда в каких других местах. Какой в этом смысл?
416 2756993
>>56990

>https://github.com/bminor/musl/blob/master/src/stdio/getchar.c


найс троленг

>>56989
сысоев к доске!
417 2756994
>>56993
Педераст, проходи мимо, если не шаришь. Этот тред для серьёзных дядек
418 2756995
>>56994
ты давай не обзывайся младший инженегр говна
419 2756996
>>56993
Причем тут троленг? Я тебе скинул вполне доступную реализацию getchar, дальше можно самому найти все что надо. Думаешь в glibc ты что-то найдёшь? там написано все так, чтобы любопытные глазки ТОЧНО НИЧЕГО не смогли понять, вот и гпл весь
420 2756997
>>56996
меня интересует реализация гетчар а не его дефайны оберток над обертками так что это был траленг с твоей стороны
ладно толку от вас все равно нет пойду дальше копать
421 2757116
в цикле для i желательно указывать char вместо int? что бы типо занимало на три байта меньше, или нет разницы?
422 2757119
>>57116
В беззнаковый чар можно впихнуть всего 255 значений, поэтому, если твой цикл меньше 255 итераций, то можешь и чар использовать.
423 2757142
>>57116
смотря как создавать счетчик
если создаешь вне цикла - можешь задумываться о размерах памяти
если создаешь внутри фора - похеру локальная переменная будет уничтожена сразу как только цикл закончит работу

unsigned char i;
for(i = 0; i< 256; i++){}

for(long long i = 0 ; i < size; i++){}
424 2757180
>>56995
Ты тупой, если е читаешь чужие исходники и не умеешь их понимать. Исходинки великих людей. Замолчи и выйди из треда. От тебя толку нет. Ты ничего полезного в тред не приносишь
425 2757218
>>57180
Скрипто-макакыч, ты стиль общения поменял, что ли? Теперь ты хочешь казаться самым полезным аноном этого треда?
426 2757257
>>57218

>Скрипто-макакыч


Докажи, что ты не скриптомокака, глянь исходники величпйщего nginx'а, уверенно занявшую свою нишу от скромного автора, который даже не пиарил его. Потому что код - гениальный. Или ты вопросы только увроня char не char можешь пояснять?! Я же сказал, если ты мимо - то иди назуй просто, не отвечай на сообщения, которые тебе не нужны. Нахуй такие гниды как ты засираете инет своими комментыми нулевыми?
427 2757264
>>57257
Пояснить не могу, потому что я только учусь. А ты, уёбок, если хочешь что-то серьёзное узнать, то разговор надо начинать не с ёбнутых обращений, а просто с хорошо поставленного вопроса; тогда, возможно, аноны сочтут, что ты достоин ответа.
428 2757274
>>57264
Если ты только учишься, тогда хуле встреваешь в разговор. А моё обращение отсеивает дебилов, которые ждут на дваче (да и ваще в инете) этикета. А вопрос простой, хуле sentinel для красно-чёрного дерева расположен не в самой структуре дерева ngx_rbtree_t
429 2757286
>>56489
пасибо
430 2757289
да просто игнрьте этого даунидзе девопса
пришел тут срать в тред своей хуетой заместо того чтобы начеркать себе юмл диаграммы
такие тупездни достойны только информационной изоляции
431 2757299
Пидорасы со своим срачем не по сабжу тред вайпают суки
432 2757300
>>56857
алсо макросы гетчара и путчара вкомпилены намертво и голой реализации в стдлибе не будет
реализацию можно было бы найти в исходниках гцц или силанга, но мне лень
кажется прочитать сигналы на ножках проца гораздо проще, чем ковырять исходники компилера

на случай если анон захочет сам реализовать кбхиты
433 2757301
>>57300
зачем библиотечная функция в компиляторе?
434 2757305
>>57301
для переносимости программного обеспечения на другие платформы
инфа отсюда
http://wwwinfo.jinr.ru/~dushanov/book/c/6.htm
435 2757376
>>57301
>>57305
вообще
это HAL ядра, тот самый нативный кусок позволяющий остальные части ядра, такие как например ретранслятор адресов или диспетчер процессов сделать более переносимыми

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

однако такие танцы мне не нужны, я не форкаю ядро и не пишу свое, поэтому не стал сильно вчитываться

так что буду колдовать на асмовставках свой кбхит да я знаю что на стаковерфлоу лежит готовая реализация кбхита свой гетчар/путчар свои потоки
b61da83787ecf9a296be4abe66fcc808.jpg29 Кб, 500x500
436 2757437

>2k23


>bool

437 2757550
Двач, какой тип переменных использовать для указателей? Лонг или инт
438 2757557
>>57550
void*
439 2757586
>>57550
size_t
440 2758226
>>57116

> типо


Пфффф
441 2758228
>>57437
enum{false,true};
В каждом файле.
442 2758748
Есть прога с байтоеблей. Она падает в какой то момент. Дебагер не подключается по причине того, что исполняемый файл слеплен из разных исходников. Для дебага хочу писать
printf ("text\n"); fflush(stdout); но программа падает и ничего не выводит
443 2759228
двач, допустим я через принтф несколько строк вывел
как вернуть всё на первую строчку и запробелить что бы всё типа удалилось (обьясните, как обьяснили бы своей училке по русскому)
444 2759278
>>59228
Скорей всего только стирать все. Одну строку можно перезаписывать \r.
445 2759314
>>58228

>enum{false, true};


>int i = 2;


>if (i == true) printf("anon molodez);


>else printf("anon durak);


ыыы

Лучше уж так
#define false 0
#define true !false

мимо поумничал
1688854195177.jpg76 Кб, 807x935
446 2759319
>>57550
uintptr_t
447 2759346
>>50913
Да, скуффиксы.
448 2759356
>>59228

>бойся 228 когда пудришь носик


ты печатаешь в консоль символы туда где стоит каретка |
есть юникод управляющие символы последовательности секвенции как удобнее \b вернуться назад на 1 символ и \r вернуться в начало строки
есть анси если твой терминал умеет жрать анси
есть написанные на основе этих штух библиотеки, например curses https://www.ibm.com/docs/ru/aix/7.2?topic=concepts-curses-library
ну и конечно же есть ответы в гугле )
449 2759401
>>59356
допустим текст 300 символов
тогда надо наспамить 300 раз /b?
450 2759441
>>59401
Просто попробуй. Ни один стандарт такого не гарантирует.
451 2759791
a[52514],b,c=52514,d,e,f=1e4,g,h;main(){for(;b=c-=14;h=printf("%04d",
e+d/f))for(e=d%=f;g=--b2;d/=g)d=db+f*(h?a:f/5),a=d%--g;}

Какими байтиками нужно манипулировать, чтобы терминировать луп тогда когда захочется?
452 2759804
>>59791
байтиками пупы
453 2759816
>>59791
ладно хрен с тобой поведусь на твой траленг
делай
- goto
- EXIT(1)
- return 0
- raise(15)
454 2759829
>>59816
В чем траленг?
455 2759837
>>59829

>ололо сам моряч как остановить цикол форе


>не траленг

456 2759840
>>59837
Что тебе не понравилось?
457 2759848
>>59840
ходить босяком
458 2759852
>>59848
Ладно. подожду более компетентного специалиста.
459 2760054
>>59791
А g у этого тралля всегда равно мусору? Збс, конечно, циклы, но чему равно g?
460 2760056
>>60054
Забей!!! Это пост инцелла, у которого при розыске g, эта самая g стремится к бесконечности.
461 2760062
>>60056
Сук в голос...
Я понимаю, что у инцеллов g при любом раскладе стремится к бесконечности, но мне интересен ответ самого автора цикла.
допустимое число функций. Аноним 462 2760116
Добрый день.
У меня теоретический вопрос.
В результате реверса специально сделанных программ мне удалось прийти к предположению, что число функций в c в рамках одной компиляции ограничено.
К примеру пусть имеется такая программа:
int f1(){}
int f2(){}
int f3(){}
...
int fN(){}
int main(){}

Теперь вопрос:
Какое наибольшее значение N в такой ситуации? Я правильно понимаю, что какой-нибудь gcc не будет работать при достаточно большом N?
image.png7 Кб, 625x53
463 2760123
>>60116
Во-первых, первоклассному траллю, на мой взгляд, мешает сажа пикрилл один.
Во-вторых, кол-во функций всегда можно загнать в константу ОСи плюс один шурупишь о чём я?
В-третьих, могу сделать смелый вывод - ты наиглупейшая скриптомакака, которая пытается траллить тред умных ребят, а потому...шёл бы ты отсюда подальше, дебич, пока обоссаны, у тебя, только карманы за щеками
464 2760190
>>60054
При чем тут тролль?
>>60056
При чем тут инцел?

Тут старперы любят вонять, как они байты ебут, не то что сейчас молодежь в своих джаваскриптах, а по итогу даже чужой год прочитать не могут.
465 2760196
>>60123
Умный, подскажи как модифицировать код, чтобы можно было указать число итераций тут>>59791.
466 2760198
>>60116
Ограничено размерами стека скорей всего.
467 2760211
>>60190

>Тут старперы любят вонять, как они байты ебут


Ахахах, узнаю почерк "любимого" скриптомакаки! g чему равно?
>>60196
Ещё раз, дебильнейшая скриптомака, у тебя второй цикл имеет условие:

>g=--b2;d/=g


А дальше сам цикл равен:

>d=db+f*(h?a:f/5),a=d%--g;}


В котором неясно что такое "g"!!!
Так же как и неясно, что такое g из первого цикла и из, как я понимаю, констант, что ты хотел ввести в программу:

>a[52514],b,c=52514,d,e,f=1e4,g,h;


>{for(;b=c-=14;h=printf("%04d",


e+d/f))

Так о чём ты хочешь ещё узнать, дебич? Ты пытаешься троллить в стиле майндфак??? Но из-за твоей тупости у тебя это не получается, скриптомакакыч. Хотя, то, что ты задал интересно с точки зрения внимательности, следовательно, "когнитивки".
468 2760216
>>60211
Почему тогда все работает?
469 2760220
>>60211
Там просто два умножения и макаба заменила их италиком. Смотри где начинается итаилик и где заканчивается.
470 2760221
>>60216
Пиздос! Потому что в где-то в программе "объясняется" что такое g, Либо, работает не так, как изначально планировал ты, когда писал программу.
471 2760223
>>60221
Не понятно, что ты имеешь в виду.
472 2760226
>>60223
Я имею ввиду, что ты конч!! Какое ещё двойное умножение, блять???? У тебя явное деление на g. Короче, дебич, кидай код на пастебин, где нельзя будет обвинить макабу.
474 2760233
>>60231
Ахахахах, какая же предсказуемая скриптомакака, которую взяли за жопу!!!!
475 2760235
>>60233
Что смешного?
image.png9 Кб, 597x117
476 2760243
>>60235
Не, сорян! На пастебине этот код имеет немного больше смысла, чем на дваче, но всё же это хуита. Чему равен пикрилл?
image.png17 Кб, 582x83
477 2760260
478 2760263
>>60123
1) Если ответа не знаешь, не пиши.
2) Смотри пункт 1).
image.png18 Кб, 722x77
479 2760266
>>60260
Здесь тоже мусор находится.
D в этом коде вообще ничего не присваивается. Единственное что можно предположить, что какой-то конченый компилятор занулил стековую переменную(что очень маловероятно), к тому же в коде в функции main() типа нет, 89 стандарт какой-то.
Тролляка со своей говно laba1.c завайпал тред, поздравляю
480 2760270
>>60266
А, ну всё верно, d это и не стековая переменная, ей 0 изначально объявлен
481 2760275
>>60266

>D в этом коде вообще ничего не присваивается.


Равна нулю.

>main() типа нет


int не обязательно писать.
482 2760276
>>60275

>Равна нулю.


Каким образом?
483 2760277
>>60275
В текущем стандарте обязательно
484 2760279
>>60276
Таким что это статичная переменная, которая инициализируется нулём. Это факт, база
485 2760282
>>60277
Текущий вышел пару недель назад.
486 2760382
вот вам не лень разбирать какой то кал говна

запомните мрази
плохой код с хорошим неймингом - говнокод
хороший код с плохим неймингом - кал говна
487 2760446
>>60190
А причём тут байтоебля? Там же просто нечиьаемый говнокод какой-то.
изображение2023-07-10142812567.png191 Кб, 1920x1080
488 2760538
бля, кодить на винде, да ещё и в виме, ебать я крутой
image.png18 Кб, 510x231
489 2760546
Здравствуйте. Нашел одну программку(https://github.com/henrypp/memreduct/tree/master), ради интереса захотелось разобраться в исходниках и вижу тут такое(пик1), в проекте идет какой-то относительный путь, видимо, текущего проекта(не работал под вижлой), но на гитхабе то этих исходников нет, я если загружу эти исходники, то у меня не будет этих файлов, которые используются в программе. Как ее собирать-то тогда? бред какой-то
490 2760551
>>60546
бля, хуй знает. почитай на странице репозитория, может там какие-то зависимости есть
491 2760604
>>59791
Анон, а что ты имеешь в виду под байтиками, на которые ты хочешь влиять? Очевидно, что влиять ты можешь, отталкиваясь от кол-ва итераций, где "1" это переменная b, которая у тебя уменьшается на 14 в первом цикле, а "2" это уже введённая мною переменная, которая считает кол-во итераций во вложенном цикле.
А вообще твой внутренний цикл выглядит так - пикрилл один. Участки кода, которые я выделил, зависят от переменной g, поэтому ты можешь ею манипулировать, чтобы не вводить доп. переменную. И, кста, у тебя какая-то бестолковая первая итерация (можешь глянуть на пикрилл один) на переменную d.
492 2760605
>>60604

>А вообще твой внутренний цикл выглядит так - пикрилл один.


*пикрилл два
быстрофикс
493 2760650
>>60604
Разобрался. Не b, а с. b нужна для второго цикла.
>>60446
Обычный код безо всякой смуззи хуйни.
494 2760667
>>60650
Указание типов и соблюдение разметки это смузи хуйня чтоли?
495 2760683
>>60667

>Указание типов


Отсутствие типа это указание инта

>соблюдение разметки


Это не Питон.
496 2760687
>>60650

>Не b, а с. b нужна для второго цикла.


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

>>60667

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


Да ладно тебе! Это было весело. Если бы я вчера самогоном не нахерячился, то всё уже вчера решил бы (заместо того, чтобы писать вчера тут пьяную хернь), а так этот код мне сегодня даже снился в каком-то лютом, пьяно-угарном сне.

>>60683
Анон, давай ещё что-нибудь подобное неси сюда.
497 2760704
>>60667
смузихлебы были папущины
интересно когда перекат
498 2760722
>>60683
При чем тут питон, когда речь о читаемости. Ты же, что бы ответить на пост, воспользовался гринтекстом для разметки. Почему это не стоит делать в коде для читаемости?
16019882052961.mp41,3 Мб, mp4,
704x576, 0:04
499 2760759
>>60704

>смузихлебы были папущины

500 2760764
>>60722
Потому что в случае двача, разметка имеет свое поведение.
501 2760789
>>60764
не хочу хвастаться, но я юзаю Си в связке с питоном
502 2760881
>>60789
я юзаю си а в руке питон
503 2760887
>>60764
Ты либо тралишь, либо просто виляешь жепой до последнего, ну дело твое.
504 2760945
>>60881
хорошо хоть не СиШарп
505 2760949
>>60945
джавашарп фуфуфу
506 2760957
>>60887
Закономерное врети смузихлёба.
507 2760967
>>60949
сыглы. норм пацаны ебашат на си и мыслят системными вызовами
508 2760969
>>60949
сыглы. норм пацаны ебашат на си и мыслят системными вызовами
509 2761142
Подскажите , пожалуйста, есть ли в C перегрузка функций?
Я раньше думал, что нет в чистом C перегрузки, однако сегодня узнал, что функция open() имеет два набора параметров:
int open(const char pathname, int flags);
int open(const char
pathname, int flags, mode_t mode);

Это как-то макросами сделано или тут какой-то совсем иной уровень знания C?
510 2761149
>>61142
да, макросами. в С нет перегрузки функций, эта фича, как и многие другие, были добавлены только в С++
511 2761627
Есть ли ограничение на размер открытого файла в си?.
Я так понимаю, что если off_t может иметь число значений от 0 до 2^(32)-1, то всего можно адресовать в файле 2^(32) байт=2^(22) КБ=2^(12)МБ=4 ГБ.
Я прав или где-то ошибаюсь?
512 2761680
>>61627
Во-первых, "сикать" можно многократно от текущего положения указателя. Во-вторых есть всякие lseek64, llseek.
513 2761681
Я, правда, не проверял вышесказанное. ) Теоретически ответил.
514 2761732
>>61627
это вроде пределы для адресной архитектуры памяти при 32битном машинном слове так что полагаю анон с сиком64 вырулит ситуацию
16887439373881.jpg136 Кб, 564x564
515 2761911
>>61627

> Есть ли ограничение на размер открытого файла в си?.


В Си нет. В отдельных функциях типа fseek есть.
516 2761921
>>61911
Ограничение обусловлено только количеством разрядов или там какая-то конкретная цифра есть?
517 2761938
>>61921
Количество разрядов + особенности библятеки и ОС. Тебе никто не гарантирует, что файловая система поддержит файлы до 12345 байт.
518 2762677
что именно определяет тип переменной?
image.png2,6 Мб, 2048x1365
519 2762680
>>60704
чо против смузи имеешь?
520 2762691
>>62680
да я и сам люблю хлебнуть кефирчика с ягодами под макарошки с сосисками
ой прости, переведу на ваш
да я и сам люблю полакомиться смузи под напоритан
521 2762692
>>62677
слово
522 2762698
>>62692
Божье
523 2762707
>>62698
Допустим я произнес божье слово int.
Что оно определяет для переменной (кроме размера выделяемой памяти)
524 2762709
>>62707
то как по дефолты будут декодироваться биты в памяти, в данном случае как знаовые целочисленные
525 2762730
>>62707
Грубо говоря, какие операции имеет смысл выполнять.
526 2762734
>>62730
А зачем тогда нужны спецификаторы, если тип уже все определил?
527 2762735
>>62730
да и ето то жи, флоаты вроде на отдельном матядре штампуются
528 2762740
>>62734
какие спецификаторы?
спецификатор области видимости сообщает компилятору область видимости
спецификатор регистровости сообщает компилятору желание присобачить переменную непосредственно на регистр
спецификаторы знаков сообщают как следует читать старший бит
спецификаторы длины сообщают компилятору о модификациях длины байт для чтения записи данных
чо там еще есть?
529 2762746
>>62740
Я имел ввиду %d %c %f
Не знаю как они называются
530 2762763
>>62746
это "гнезда" для форматного ввода/вывода чтобы туда подставлять переменные
я не копал реализации форматных вводов/выводов, но думаю там что то по типу войд поинтера который кастуется к типу который вычисляется из форматной строки например %d вычислит что нужно кастануть к (int*) типа того
531 2762866
>>62734

>если тип уже все определил


В языках выше уровнем тип учитывается автоматически. В си этим управляет программист.
532 2762891
>>62746
Форматные специкаторы.
printf не знает тип переданных переменных, он видит только кусок памяти на вершине стека, где эти переменные одна за другой + выравнивание. scanf там видит только ряд указателей на что-то.
533 2763092
>>62891
Понял, спасибо
534 2763593
#include <stdio.h>
int main(){
int b = 0;
char a[] = "Hello world";
while ( &a != "/0"){
printf("%c",a);
b++;
}
return 0;}

че не получается, что за ошибка
535 2763610
>>63593
4 ошибки
536 2763694
>>63593
попробуй так:

#include <stdio.h>

int main()
{
char a[] = "Hello world!";
short b = sizeof(a)/sizeof(char);

for(short i=0; i<b; i++)
printf("%c",a);

return 0;
}
537 2763698
>>63694
*в printf a вместо а
538 2763700
>>63694
эм... крч хз не отоброжается почемуто, поставь квадратные скобки с i
539 2763724
>>63694

> short b = sizeof(a)/sizeof(char);


Правильно sizeof a - 1
540 2763747
>>63724
Что бы не засчитывать \0?
А почему нет?
541 2763821
>>63593

>while ( &a != "/0"){


while( a != '\0' )

>printf("%c",a);


printf ("%c",a);

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

printf("%s", a);
puts(a);

без всяких там вайлов и проверок на символ конца строки
к тому же например компилятор считает две строки записанные друг за другом одной строкой а твой алгоритм так считать не будет
542 2765297
Вот такой вопрос назрел.
Функция ведь где то хранится, правильно? Ее так сказать исполняемый код загружается в рам? Тоесть она сама по себе занимает место в раме? А если функцию реализовать макросом? Макрос так же занимает место в раме? Имеет ли смысл переписывать функции макросами вообще? Часто встречаю фул листы макросов в юниксовых микропрограммах, которые заменяют простые двустрочные функции. Зачем это сделано? А если например больше строк замакросить? В чем профит так сказать?
543 2765299
>>65297
Могу ошибаться, но таким образом ты инлайнишь код, чтобы не вызывать каждый раз функцию. То есть, этот макрос просто подставляет записанный код на место его использования.
544 2765300
>>65299
Тобишь нет хождения по памяти в другой сегмент и теоретически код быстрее? Так что ли?
545 2765369
>>65300
Как бы да, но таким образом код занимает больше памяти, потому что каждый раз вставляется на месте использования макроса.
546 2765377
>>65369
Тоесть выбор либо жирнее по РАМ и быстрее, либо тоньше и медленее? Правильно я понял?
547 2765399
>>65377
Да, но мб позже кто прошаренее придет и лучше пояснит.
548 2765409
>>63724
так почему а-1?
549 2765413
>>65409
Потому что в строке есть символ конца строки.
Слово из 5 букв Hello если записывать посимвольно имеет длину 5 байт, а если как строку то 6 байт.
550 2765414
>>65409
потому что sizeof возвращает размер массива в байтах, а строка это массив символов, ограниченных нулем. Размер строки заранее известен на этапе комплияции, так, строка "Hello world!" на самом деле является "Hello world!\0"
551 2765415
>>65413
а почему его нельзя считать?
552 2765417
>>65415
Потому что Стетхем запретил. Вопросы?
553 2765418
>>65399
>>65377
Да нечего тут объяснять. Вот цитата из книги Ван Гуйа про программирование на ассемблере, из которой можно понять, что макросы выгоднее тогда, когда есть очень большое кол-во вызовов одной и той же ф-ции, следовательно, код становится объёмнее, но зато производительнее:

При многократном использовании в программе одного и того же набора ин
струкций можно создать функцию и вызывать ее каждый раз, когда необхо
димо выполнить эти инструкции. Но для функций характерно снижение про
изводительности: при каждом вызове функции поток выполнения переходит
к вызываемой функции в некоторой области памяти, а после ее завершения
возвращается обратно в вызывающую программу. Вызов функции и возврат
из нее требуют определенного времени.
Чтобы избежать подобных проблем с производительностью, можно вос
пользоваться макрокомандами (или просто макросами – macros). Как и функ
ция, макрос представляет собой последовательность инструкций. Макросу
присваивается имя, и когда нужно выполнить этот макрос в коде, вы просто
указываете его имя, возможно, сопровождаемое аргументами.
Важное отличие от функции: во время ассемблирования везде, где в исход
ном коде встречается «вызов» макроса, NASM заменяет имя этого макроса
на набор инструкций, записанных в его определении. Во время выполнения
не происходит никаких переходов и возвратов, потому что NASM уже вставил
машинный код во всех необходимых местах.
Макросы не являются функциональным свойством языка ассемблера Intel,
но эта функциональность предоставляется NASM (или другой версией про
граммы ассемблирования). Макросы создаются с помощью директив препро
цессора, и NASM использует макропроцессор для преобразования макросов
в машинный язык и вставляет инструкции машинного языка в соответствую
щие места в коде программы.
Макросы позволят улучшить скорость выполнения кода, но они увеличива
ют объем кода, потому что во время ассемблирования инструкции из опреде
ления макроса вставляются в каждую локацию, где используется макрос.
553 2765418
>>65399
>>65377
Да нечего тут объяснять. Вот цитата из книги Ван Гуйа про программирование на ассемблере, из которой можно понять, что макросы выгоднее тогда, когда есть очень большое кол-во вызовов одной и той же ф-ции, следовательно, код становится объёмнее, но зато производительнее:

При многократном использовании в программе одного и того же набора ин
струкций можно создать функцию и вызывать ее каждый раз, когда необхо
димо выполнить эти инструкции. Но для функций характерно снижение про
изводительности: при каждом вызове функции поток выполнения переходит
к вызываемой функции в некоторой области памяти, а после ее завершения
возвращается обратно в вызывающую программу. Вызов функции и возврат
из нее требуют определенного времени.
Чтобы избежать подобных проблем с производительностью, можно вос
пользоваться макрокомандами (или просто макросами – macros). Как и функ
ция, макрос представляет собой последовательность инструкций. Макросу
присваивается имя, и когда нужно выполнить этот макрос в коде, вы просто
указываете его имя, возможно, сопровождаемое аргументами.
Важное отличие от функции: во время ассемблирования везде, где в исход
ном коде встречается «вызов» макроса, NASM заменяет имя этого макроса
на набор инструкций, записанных в его определении. Во время выполнения
не происходит никаких переходов и возвратов, потому что NASM уже вставил
машинный код во всех необходимых местах.
Макросы не являются функциональным свойством языка ассемблера Intel,
но эта функциональность предоставляется NASM (или другой версией про
граммы ассемблирования). Макросы создаются с помощью директив препро
цессора, и NASM использует макропроцессор для преобразования макросов
в машинный язык и вставляет инструкции машинного языка в соответствую
щие места в коде программы.
Макросы позволят улучшить скорость выполнения кода, но они увеличива
ют объем кода, потому что во время ассемблирования инструкции из опреде
ления макроса вставляются в каждую локацию, где используется макрос.
554 2765436
>>65418
Ну а вот применительно к современным процам как оно? Однообразные инструкции префетчатся на кеши или так только сортед байты умеют делать?
555 2766064
>>65436

>Ну а вот применительно к современным процам как оно?


А хз! Надо эксперементнуть! Написать простенькую программу, которая будет вызывать овер9000 раз одну и ту же ф-цию, а потом ту же прогу, которая подставит овер9000 раз один и тот же макрос в код, и запустить эти проги через какую-нибудь утилиту вроде time.
556 2766065
>>66064
То же об этом думал. Но замер времени на эвм необъективный когда прога исполняется в авм слое. Объективные замеры могут быть на слое самой ОС.

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

> пориджи задротят

558 2766098
>>66083
это тредик морей, а не питухонов
559 2766105
>>66065

>надеясь на то что проц параллельно не будет тратить такты на какой то другой процесс.


Ну тут же математика, которая позволяет просто вычесть, либо прибавить кол-во тактов.
560 2766162
>>66105
Я имею в виду, что у той же утилиты time кол-во тактов, которая она тратит на запуск программы всегда одинаковое, т.е. этими тактами можно пренебречь, суть же в том, что time запустила процесс (записала куда-то время запуска), а после того, как процесс вернул управление time вычла из времени окончания процесса время начало процесса. Правда, я не знаю точный алгоритм этой утилиты, но логика подсказывает, что алгоритм должен быть подобный, т.к. в такой реализации эта утилита не лезет в сам процесс и не мешает его тестировать. Если кто-то знает как робит time, то поделитесь инфой, ибо мне самому это интересно.
561 2766184
>>66162
Да блин просто прочти какие нить доки по time.h все ноги оттуда растут и никакой волшебной палочки нет. Как я уже писал замеры на авм слое необъективные.
562 2766195
>>66184

>никакой волшебной палочки нет


А хотя.. А вот что насчет UTC? Она ведь где то просчитывается параллельно. Или нет? Понятно что если в ОСи стоит синхронизация с интернетом то UTC пингуется и возможны веббаунд шумы в вычислениях, но поидее она так же параллельно должна считаться на камне, только вот на каком? Ну неужели на центральном?
563 2766196
>>66195
Чёт ты, по-моему, перебарщиваешь! Даже, если программу запускать без замера, то время же всё-равно процессор будет просчитывать, поэтому этой твоей заморочкой тоже можно пренебречь.
564 2766206
>>66196
Ну тогда у меня только одна идея. Вкомпилить тестовый кусок в ядро для замеров. Только так можно дать объективную оценку скорости выполнения.
565 2766213
>>66206
Я тебя поддерживаю! Мне уже безумно интересно какой код быстрее.
566 2766634
блять, епта, дорогие сэры, откройте уже для себя BPF и замеряйте сколько влезет
567 2766690
>>66634

>BPF


Блять я читая этот поток воды их жопы на хабре надеялся что ты что то умное принесешь. Тьфу ты.
568 2766720
>>66213
Я нашел ответ без трогания ядра посредство kmload например.
Отдельные инструкции (по крайней мере на х86_64) не фетчатся на кешлинии. Зато инструкции функций фетчатся на кешлинии, но если хочется максимальной оптимизации их надо выравнивать по кешам проца. Ну дальше то вы сам знаете.

Крч вердикт такой.

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

спасибо
569 2766764
>>66720
Спасибо, но я, если честно, ничего не понял! Что выгоднее то: функции или макросы?
570 2766765
>>66764
Если на процах с кешлиниями - функции быстрее макросов, массивы быстрее связных списков.
Если на процах без кешлиний - макросы быстрее функций, связные списки (ака б-три) быстрее массивов.
571 2766779
>>66765
Анон, спасибо!
572 2767240
>>66690
причем тут bpf и хабр вообще. задача какая нахуй, твердо и четко?

>Вкомпилить тестовый кусок в ядро для замеров


нахуй что-то вкомпиливать в ядро для объективности замеров, вы ебанутые?
573 2767275
>>67240
Да уже все выяснили, обтекай.
574 2767321
>>67275
Анон, спасибо!
575 2770725
чуханы, перекатывать буем?
576 2770895
>>70725
Сам и перекати, чухан.
577 2775243
В общем аноны, у меня трабол.
Пару дней уже пишу аналог cal/ncal потому что мне ваще посрать на его функции по выводу григорианского календаря или юлианского. Мне нужны заметки по датам вот и все. Но я столкнулся с рядом проблем.

Проблема номер 1 - как бы проще вытянуть из файла структурки? Я пробовал fscanf но этот пидор не возвращает EOF хоть вот обоссысь. Гавно какое то. Я пробовал fgets и потом раскладывать строку по структуре в том числе при помощи atoi() и всякое такое, но это пизда дрочь ебаная, шаг в право шаг влево сегментейшен фаулт.

И вообще вот поскажите если я fgets прочитал в условный char str[], то как мне положить строковый литерал куда нить в другое место, чтобы потом из структуры по тупому чар поинтер на это место поставить и забыть?

Проблема номер 2 - я заебался бороться с АНСИ стандартом. Вот я разметил себе два поля слева и справа одно для календарика на месяц (уже распечатал все красиво) и для всяких там тасков. Но когда я пытаюсь вернуть каретку наверх чтобы напечатать правый блок у меня тупо затираются уже напечатанные строки. Тоесть был например напечатан календарик на 10 строк, делаю MoveUp(8) и остается 2 напечатанных строки календарика. Блять!

Крч есть идеи?
578 2775375
>>75243
Fread
579 2775384
>>75375
Не подходит. Там по структуре должна лежать строка произвольного размера. Числа числа числа флаги и строка.

Так что fgets самый норм варик с последующим разбором.

Лучше подскажи, вот если например я положу байты из char str[] в локальную хуету char str_copy[], то после удаления локальой хуеты там останется литерал? Ну если я туда поинтер загоню он найдет этот кусок или кусок то же исчезает?
580 2775402
>>75384
Хотя чот я туплю, можно же салоцировать просто кусок байт какого нужно размера и сразу заебшить на него поинтер.

А как в итоге два текстовых блока напечатать? Опять собирать супердлинную строку и за раз ее ебашить путсом? Бля вот я капец как не хочу этот прием юзать, но пока не вижу решений. АНСИ неадекватно кареткой управляет.
Снимок экрана 2023-07-21 в 12.56.21.png217 Кб, 1278x400
581 2776012
Ну и в чем я не прав?
Я не понимаю где блять косяк то? Алоцирую, разбираю строку на детальки (это работает заебись), переключаю поинтер на некст, некст не алоцируется.

ПАЧИМУ БЛЯТЬ
582 2776028
>>76012
Потому что переприсваиваю. Блять я тупой пизда. Лучше бы я в психолухи пошел.
583 2777106
есть какой нибудь однострочный метод определения ширины консоли? по символам всмысле. да я в курсе там буферы хуюферы, подключи курсес и не парься хуярься. а есть вот 2 строки ебаных мне больше ничо не надо кроме как знать ширину по символам в момент захода в мейн
584 2777950
>>77106
Похоже я тут единственный постер.

#include <sys/ioctl.h>
//macro
#define _getTermSizestruct winsize w;ioctl(STDOUT_FILENO, TIOCGWINSZ, &w)
#define COLUMNS(w.ws_col)
Снимок экрана 2023-07-22 в 20.02.10.png126 Кб, 1510x158
585 2777951
>>77950
Отступы проебались. Пик релейтед на юниксах.
586 2780348
>>41910

Как решаешь проблему написания "подобных" структур данных?

Я сам предпочитаю Си остальным языкам, но в программах то и дело приходится реализовывать множество списков/стеков/очередей/..., которые мало чем отличаются между собой. Естественно само написание доведено до автоматизма, но иметь десяток похожих методов "push" - сомнительная практика. Можно конечно макросами обернуть, но выглядит это не очень.

Имхо, шаблоны в C++ являются самой полезной фичей, которую добавил Страуструп. Причём тот их вариант, который описывается во втором издании "Cpp prog lang" уже достаточен.
587 2780933
>>80348
Ды хазы, как по мне макросы легче читать, чем шаблоны.
588 2781991
>>41910

>«си с классами» —


Кал говна. Дальше не читал.
589 2784166
Какой конпилятор самый лучший?
590 2787762
>>84166
GCC/Clang
image.png8 Кб, 336x51
591 2792311
Есть вопрос по поводу порядка байт. В памяти переменная u будет представлена как 0xddccbbaa, почему при сдвиге вправо на 16 бит мне выдает 0xaabb, как если бы это было big endian?
592 2792937
>>92311

>В памяти переменная u будет представлена как 0xddccbbaa


Проверь на всякий случай.
593 2792944
>>92937
А, не, нет сымслв. бит шифты не зависят от эндианов.
594 2793303
>>92311
Пиздец. Не могу понять чему ты удивляешься. Двинул вправо осталась только левая часть. Пачиму так двачик?

Может быть ты путаешь операции и представление байтов на шине/регистрах/в рам?
595 2793313
>>93303

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


Дальше не читал, как и ты, видимо.
596 2793319
>>93313
Ну так ты почитай. Или хочешь тебе образовательный материал притащу в видивоформате, если читать для тебя сложно.
Тред утонул или удален.
Это копия, сохраненная 4 августа 2023 года.

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

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