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

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

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

Пожалуйста, пользуйтесь 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 помогает читать сложные сишные декларации.
Прошлый: >>2713428 (OP)

как же вы заебали Edition
2 2771440
ну и кто из вас придумал * использвать одновременно для разыменовывания и объявления указателя? признавайтесь, уроды
3 2771808
>>771440
Это не продолжение ли предыдущего треда с умопомрачительными примерами работы со строками в циклах с очень неожиданными итераторами? Лучше бы на двачах звёздочка без проблем ставилась. Вот уж где зашквар. Здесь же айтишники одни сидят. А то приходится вот это - ★ ставить... Или я чего-то не знаю? )
4 2771825
Я вот до поры до времени не знал, что это -
int★ value, value; // - указатель и экземпляр, а не 2 указателя...
Вот это действительно подлянка. Потому что в куче примеров по инету пишут как попало. После этого стал писать звезду рядом с именем всегда, чтобы визуально отражало сущность творимого.
int ★xlink, x = 5; xlink = &x;
5 2772140
Блять какой же странный язык без готовых библиотек и функций как в питоне. Вот например ввод пользователя - откуда блять из головы у меня должно вылезти fgets stdin.
6 2772333
>>772140
Учебник тебе должен про обвязку рассказать. Это вроде POSIX. Терминал, ну. Есть ещё stderr для всякого дебага, чтобы вывод не засорять, потому как обычно его по конвейеру дальше часто передают, другим утилитам.
7 2772363
>>772140
Так его делали чтобы ядра операционок писать, там изначально нужна была работа со структурами и жонглирование указателями.
8 2772380
>>772363
В первых версиях структур не было. А когда они появились, то поля были общими. Именно поэтому у структур в UNIX часто встречается префикс связанный с ее именем. Зато не нужны были union, ведь если ты определил поле A первым в структуре, то теперь оно будет во всех структурах помещается автоматически на offset:0
9 2773959
Вот есть у меня цепочка функций, по большинству передается const state указатель. В одной из функций беру неконстантный указатель на поле стейта через каст (очень нужен кусочек памяти, а он там есть свободный). Чем это чревато?
10 2774280
>>772140

>откуда блять из головы у меня должно вылезти fgets stdin


Это стандартая библиотека C (stdlib). Соответственно, читай доки к stdlib. Например:
https://www.tutorialspoint.com/c_standard_library/c_standard_library_quick_guide.htm

Помог анону — задай вопрос сам:

Допустим, есть у меня функция send_char(char c), которая отправляет символ в UART. Как к ней прикрутить какую-нибудь printf-подобную функцию, чтобы удобно печатать всякие строки с форматированием?

Знаю, что можно malloc'ом выделить память, напечатать в неё через sprintf(), а потом побайтово отправить результат, но есть ли варик как-нибудь обойтись без промежуточного выделения памяти (и без ломания stdout, а то я видел, как народ в нём что-то переопределяет с этой целью)?
11 2774353
>>774280
fprintf(ТВОЙ_ФАЙЛ, ТВОЯ_ХУЙНЯ, ТВОЯ_ХУЙНЯ_РАЗМЕР);
12 2774354
>>774353

>ТВОЯ_ХУЙНЯ_РАЗМЕР


А это же принтф, тогда без него.
13 2774369
>>774354
Спасибо, анон. А как превратить send_char(char c) в ТВОЙ_ФАЙЛ? Наверное, это ключевой вопрос.
15 2774504
>>774456
Мне это надо не на Линуксе, то есть работать через /dev/tty* в моём случае не варик. У меня код работает на голом железе, а send_char — функция, которая пишет прямиком в регистры.
16 2774597
Вот здесь пример, как чел берёт stdout и переопределяет внутри него указатель на функцию (put)(), чтобы печатать в UART AVR'овского микроконтроллера. https://wiki.loliot.net/docs/mcu/avr/avr-printf/ Наверное, надо как-нибудь его адаптировать для работы с произвольным FILE и скармливать его fprintf'у
17 2774604
>>774504
https://github.com/mpaland/printf#streamlike-usage
Попробуй это, возможно подобные функцию уже есть в твоей силибе.
глупый вопрос 18 2775486
У меня крайне глупый вопрос.
Вот такой код:
#include<stdio.h>
int main(int v, charv)
{
printf("%d\n",stdin);
}
Почему у меня выводит большое число?
Разве это не дискриптор, который есть в самом начале у программы(а потому его значение не должно ведь быть огромным)?
19 2775697
>>774604
Годный проект, остановился на нём. Спасибо.
sage 20 2775769
>>775486
это не дескриптор, это указатель
https://en.cppreference.com/w/c/io/std_streams
Screenshot2023-07-2205-16-33.png50 Кб, 810x166
21 2777113
Вот накачал я книг этих, которых советовали, штук 10. Ни в одной из них внятно не написано как работать с .dll и .so файлами. Даже нигде не написано, как загрузить библиотеку и заюзать её в сях. До сих пор гуглю, мне только выскакивают LoadLibrary() из винапи и dlopen() из dlfcn.h. Ну вроде dlopen() стандартный способ, щас буду проверять.

Удивительно - вообще 0 упоминаний об этом в книгах, что не так с ними? В файлах любой проги на С написанной покопаться если, то там будут тонны этих .dll и .so, но в книгах почему-то про это забыли нормально написать. А это явно база, классика, и это знать надо.
22 2777119
>>777113
Си это универсальный мультиплатформенный язык, а .dll и .so это конкретные платформы Windows и Linux, поэтому эти вещи не попадают в контекст языка. Тебе надо искать книги "Программирование на <платформанейм>". Для винды это Рихтер, "Windows для профессионалов", разжевано дальше некуда, если осилишь, будешь супер-хакером визардом творящим чудеса.
23 2777129
Почему консольные утилиты на сях в линуксе такие сложные?
8000 строчек loc на сях. Как мне такое осилить?
24 2777147
>>777129
потому что их овер 40 лет разрабатывают (гну до линукса существовал) и овер 40 лет в списках рассылки просьбы добавить очередную опцию от очередного скриптописателя на баше.
25 2777239
>>777119
Получается, что, чтобы изучить стандартную библиотеку Си, нужно также читать эти книги "Программирование на <платформанейм>"?
26 2777255
>>777239
Чтобы изучать что-либо достаточно это и делать. А вот чтобы писать программы надо изучать платформу под которую пишешь, ты ведь пишешь реальную программу под реальное железо, а не фантазируешь в вакууме.
27 2777261
>>777255
Умничать можно и с меньшим кол-вом воды. Мне просто интересно как лучше подойти к стандартной библиотеке Си, чтобы изучить все (либо просто понять что делает та или иная ф-ция), потому что в википедии как-то совсем всё скудно описано, да и в других статейках, что я встречал не так чтобы всё подробно расписано (например как у Столярова про stdio.h), поэтому и интересуюсь, мб, у вас есть какая-то имбовая книга, либо статья, которая расставит все точки над и.
дедушка 28 2777357
>>777261
Чтобы изучить фсе, начни со старых источников, вроде книжек кернигана или мануалов к старым юниксам. Так ты узнаешь, что действительно лежит в основе бибятеки С. Дальше полирни это чтением старых (простых) исходников, только не подвиндозного кала со примесью хуй86.
29 2777374
Вопрос такой: могу ли я средствами библиотеки unistd сделать вывод на консоль?
Я знаю, что могу использовать scanf из stdio, однако интересно, можно ли такое сделать через unistd.

У меня есть догадка, что нужно что-то вписать в какой-то файл, однако я не имею уверенности, что это так.
30 2777417
>>777357

>вроде книжек кернигана


"Unix. Программное окружение" вроде этой?

>Дальше полирни это чтением старых (простых) исходников


А это как искать?
31 2777685
Не советую читать исходники. Бред какой-то. Нужно делать маленькие тренеровочные программки своими руками, в том числе и с помощью готовых КОРОТКИХ примеров из учебников и статей, расширяя их функциональность и сравнивая с другими такими же примерами. Просто читать исходники для образования - дичь! Можно разве что обратить внимание на стиль программирования. Но заниматься таким "реверс-образованием", анализируя чей-то готовый код - то ещё извращение. Самому надо, я считаю; по возможности, конечно.
32 2777748
>>777685
NIH дебил закукарекал. Неумение читать код признак безмозглого имбецила, таких вообще нельзя допускать до компьютеров, кроме как в браузер тыкать одним пальцем.

Единственное и правильное обучение - форкаешь чужую программу и делаешь изменения. Так же как единственный геймдев начинается вовсе не с написания своего движка, а с модов к существующим играм. Кто не умеет читать и использовать чужое, тот и свое не сможет сделать, тупое говно отродье тупого говна.
33 2777778
>>777748
хорошие книжици https://build-your-own.org/
34 2777789
зашел сказать что у вас самый ламповый тред в /pr
35 2777865
>>777778
а хули тут так дорого, 30$ почти за книжку в 100 страниц. хуй дойдет в рф, в интернете не спиздить. мертвый материал.
36 2777900
>>777865
Все есть
37 2777915
>>777417
Я щас качаю исходники на арче вот этой функцией, которая у меня в .bashrc:
function getsrc()
{
asp export $1 && \
pushd $1 && \
makepkg -do --skippgpcheck && \
pushd src
}
По идее для любого пакетного менеджера такое должно быть.
Правда, я скачал так glibc и нихуя не понял даже приблизительно откуда include <stdio.h> забирает тело функций, ведь в stdio.c почти нихуя не написано. И makefile там неебических размеров который тоже нихуя не понять сразу.

Ещё иногда просто git clone делаю с гитового репозитория.
38 2777931
>>777900
ладно, для редиса есть на сайте, для компилятора нашел на каком-то турбобите как в 2008. пока хватит.
39 2777953
>>777915
Понял, анон, спасибо!
40 2778024
А как вообще ебануть что-нибудь наподобие DOOM2 ?
41 2778219
>>777778
Да, хорошие книжки, но они нужны всего лишь для тех, кому интересна эта тема, а вовсе не для обучения нубов программированию путем пропаганды идеологии NIH. Такая пропаганда воспитывает только дегенератов, и только дегенераты её продвигают и считают верной. Данные книжки тут ни при чем, проблема в людях, и конкретно в данном треде, этих самых дегенератах.
42 2778222
>>778024
Он весьма и весьма продвинут в техническом плане, это тебе не ебануть за вечерок.
43 2778343
>>775769
ты будешь в шоки, но в хай левл языках к анонам прилипло слово дескриптор, что сутью своей отражает поинтер на адрес где начинается описание хуйни
44 2778349
>>775486
stdin это указатель на экземпляр структуры FILE описание которой есть в stdio.h

сишник в этом плане очень гибкий, ему похуй откуда ты читаешь/куда пишешь делаешь прост новый FILE экземпляр и заполняешь структурку данными например через fopen() эта функция сразу салоцирует новый экземпляр и заполнит структуру если фал найдет

типа FILE * myFile = fopen();

myFile теперь такой же "дескриптор" то бишь поинтер на экземпляр FILE куда можно писать и откуда можно читать.

только юзать надо будет функции где в аргумент ты пихаешь поинтер на FILE например fread() иначе будешь читать/писать в stdin stdout по дефолту

из вышесказанного - stdin это указатель/поинтер/дескриптор
printf("%d",stdin); печатает адрес stdin в десятичном виде
45 2778356
>>777113
давай вкратце расскажу
есть статичные библиотеки (функций, но лучше будет сказать машкодов) и динамические библиотеки (функций/машкодов)

эти обе хуеты сами из себя представляют скомпиленные из сырцов объектные файлы .o которые уже запакованы в библы .dll .so

например так gcc -shared lib.o lib.so

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


ну и вот у тебя например появилась статик библа в которой есть машкоды описания функции huyjopa()
далее ты ебашишь какой то хеловорлд где тебе понадобилась твоя huyjopa

делаешь что то вроде
main(){
huyjopa();
return;
}

а значит надо линкануть откуда взять описание как huyjopa работает
gcc myapp -L lib.so
или типа того опять же погугли команды линковки гцц я руками ничо не собираю

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

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

надеюсь понятно расписал как это работает
sage 46 2778383
>>778356

> функций, но лучше будет сказать машко


Библиотека содержит таблицу символов и секции с кодом/данными.
Символы могут ссылаться внутрь секций или на абсолютные адреса.
47 2778406
>>778383

>таблицу символов


эксель?
48 2779119
>>777748

>NIH


Шта?
50 2779122
>>777748
Как читать коды, которые не понимаешь? Код низкоуровневый, нужно понимать эту предметную область. Мне интересна эта либа https://github.com/uNetworking/uSockets
51 2779123
>>777931

>для компилятора нашел на каком-то турбобите


Дай ссылку, я не нашел.
52 2779130
53 2779206
>>779120
Вот за это спасибо, анонче!!
54 2779233
что по поводу данного курса скажете?
https://stepik.org/course/73618/syllabus

у меня лично жопа сломалась, но я питоно-скрипторебенок
Снимок экрана 2023-07-24 в 11.29.14.png27 Кб, 398x236
55 2779288
>>779122
говнокод какойто, нахуй сходи со своим интересом
Снимок экрана 2023-07-24 в 11.43.31.png5 Кб, 90x50
56 2779302
>>779233

>что по поводу данного курса скажете?


я стёк, кря
57 2779349
>>779288

>говнокод


Обосновать сможешь?
58 2779358
>>779349
ты не поймешь
59 2779468
>>779358
Значит не можешь. Что и требовалось доказать.
60 2779506
>>779468
ты не понел
61 2779551
>>779506
Я и не должен понимать дебилов. Обосновать не можешь, потому что нечем.
Смех.webm233 Кб, webm,
424x346, 0:01
62 2779582
63 2780244
Пишу свое ядро ОС и бутлоадером. Как в системе сборки cmake настроить компиляцию и линковку ассемблерных файлов вместе с файлами C++, а также задать кастомный скрипт линкера и слинковать с ним бутлоадер?
64 2780245
>>780244
А еще, как здать ассемблер? Имею в виду, программу ассемблера.
65 2780291
>>780244
>>780245
Ээээм... Отдельным тагретом прописываешь прогон твоего ассемблерного кода через нужный тебе ассемблер. Потом указываешь этот таргет, как пререквизит к основному таргету и линкуешь там при компиляции полученные object-ы.
66 2780299
>>780291
Можно поподробнее? Командами симейка. Как это делается?
67 2780303
>>780299
да хуйни любым скриптовиком который знаешь
башскриптом собери например, чо ты симейк дрочишь если не знаешь его команд?
68 2780306
>>780303
Я дрочу симейк, чтобы разобраться в нем для работы
0.png44 Кб, 555x455
69 2780317
>>780306
У меня такой симейк скрипт. Почему boot не собирается?
70 2780379
Все эти opengl с++ либы после компилирования приложения создают два окна - одно консольное, другое с opengl выводом. Тем не менее любая игрушка открывается в единственном окне. Как мне сделать, чтобы консольное окно не открывалось и не висело в фоне?
71 2780380
>>780379
зарой его
72 2780389
>>780379
Было такое в пердокомпиленной программе, не игре, но тоже вылазило паразитное консольное окно. Пробовал ебаться с опциями компилятора, не помогло, в итоге плюнул и вставил в начало WinMain строчку скрывающую это поганое окно.
ShowWindow(GetConsoleWindow(), SW_HIDE);
73 2780466
>>780317
Можете помочь со сборкой такого простого проекта? У меня уже спортивный интерес собрать его симейком. Руками из обжектов бинарь собирается (хотя, наверное, в неправильном формате), а симейк его собрать не может

https://gitflic.ru/project/aoizora/operating-systems

:-1: error: /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/libgcc_s.so.1: error adding symbols: file in wrong format
74 2780472
>>780466
Гидра показывает, что libboot.a это эльф файл, внутри него start.s.o с моим кодом и системными секциями. Вроде нормальный формат, что линкер на его ругается?
75 2781532
Итак я закопался в какой то хуйне и не могу решить простейшую задачу. Поэтому прошу помощи.

Сап моряч, есть одна задача.

Дано: две строки текста произвольного размера и набора символов (русские англицкие буковы цифоры управляющие анси последовательности все в перемешку).
Задача: запринтить каждую строку в свой блок. Один блок слева, затем пару пробелов как разделитель экрана и затем блок справа.
76 2781536
>>781532
UPD:
Каретку нельзя двигать при помощи АНСИ, запринтить надо без этих фокусов.

Причина ограничения: SetCurPos ставит каретку не учитывая что в консоли могут быть уже напринченые строки от других программ - не подходит. MoveCurUp стирает нижние строки при прыжке каретки наверх - не подходит.
sage 77 2781764
>>781532
C u r s e s
U
R
S
E
S
78 2782025
>>781764
Хуюрсес. Алгоритм давай.
79 2783053
Как же приятно байтобить, ммм.
Можно считать бинарную последовательность, а потом ебать ее как душе угодно. Хочешь вывести значение переменной типа short как два символа? Да, пожалуйста, просто скастуй нужный тип к указателю, прибавь смещение и разыменуй. И многое другое...
В общем, пока что годно.
мимо скриптомакака
Снимок экрана 2023-07-26 в 23.45.22.png24 Кб, 250x72
80 2783137
>>783053

>пока что годно


Ну тк. А ты говно накидывал, ай ай ай.
#define zero 0
#undef zero
image.png17 Кб, 897x95
81 2783144
>>783137

>. А ты говно накидывал


?

>#define zero 0


>#undef zero


Так не работает, потому что в fwrite первым аргументом нужно передать указатель на область памяти откуда будут браться значения.
82 2783159
>>783144
Ааа вот чо за зеро такое. Окей.
Пойду ковырять свои вайдчары.
83 2783391
>>780379
У вас в типе исполняемого файла установлена консольная подсистема.
Для консольной подсистемы Windows автоматически будет создавать консоль (либо берёт родительскую). Чтобы такого не было, нужно задать оконную подсистему в опциях линковщика. В makefile добавь
Для консольной подсистемы
LDFLAGS+=-subsystem console
Для оконной подсистемы
LDFLAGS+=-subsystem windows
(или вручную пропиши)
84 2784606
Напоминаю, что Си навсегда останется каловым языком из 1970х, если в очередном обновлении не избавится от юзлес хедер файлов.
85 2784745
>>784606
Что такое хедер-файлы?
86 2784774
>>784606
Зачем кастрировать инструментарий? Не нравится тебе инклюдить хидеры, не инклюдь.
87 2784777
>>784774
Э нет, пидор, для начала пофикси очередность декларации, а потом я смогу не инклюдить хедер парашу. Как это сделано в языках следующего поколения и которые создавались для людей, а не животных.
88 2784779
>>784777
Директивы фиксят. Не пойму с чем ты не справился. Можешь раскрыть свой бугурт?
89 2784782
>>784779
Я хочу инклюдить cpp файлы без хедеров в любом порядке. С++ этого не позволяет сделать, чем путает ньюфага и заставляет копаться в унитазе полном ошибок.
90 2784796
>>784782
Инклюдь без хидеров. В чем твоя проблема то?

int main(){
#include "huyjopa.cpp"
return 0;
}
image.png78 Кб, 251x201
91 2784805
>>784782

>ем путает ньюфага и заставляет копаться в унитазе полном ошибок
>jza


вспомнился мемасик
92 2784830
>>784796
))))))))
93 2784849
>>784830
Можешь хоть жипег заинклюдить, если у тебя в жипеге коды текстом лежат)))))))))
94 2784855
>>784849
)))))))
Съеби даун
95 2784856
>>784855
А нито ты заинклюдишь баивую картиначку в тредик?)))))))
96 2786218
Привет моряч!

Видали чо могу? Меняю конст ансигнед инт по желанию левой пятки. Блять как побороть эту хуйню и почему это возможно?
97 2786333
https://pastebin.com/PpJLRuUq

Анон, подскажи, пожалуйста, почему в тестах постоянна появляются дополнительные элементы в конце строки? Запускаю этот код у себя на линуксе с компиллятором gcc и всё норм, но вот запускаю на кодеворсе, и там какой-то мусор в конце строки.
Снимок экрана 2023-07-28 в 22.12.53.png20 Кб, 670x58
98 2786335
>>786333
Предполагаю твои плавающие баги связаны с параллельными вычислениями.
99 2786339
>>786335
Нет, анонче, не помогло.
100 2786342
>>786339
Ну а второй вариант - ты где то поинтером вышел за пределы и пишешь в строку всякий мусор декодируя это в символы.
Но параллельные вычисления это канеш зло, инкрементни до записи, любитель писать все в одну строку.
101 2786351
>>786342
Ладно, анон, спасибо! Завтра тогда продолжу пердол, сейчас уже спать пора.
102 2786416
>>786342
А что не так, кстати, с параллельными вычислениями? Компилятор то всё равно это раскладывает на машинные коды, а на них это выражение ничем не отличается от того, если ты перенесёшь эти действия на две разные строки. Ну да, возможно, порядок немного изменится, если в представленном примере увеличивается значение, которое лежит по адресу el_in_str, потом предыдущее значение прибавляется к адресу str, после чего увеличенному адресу присваивается значение el_in_arr; то, если мы перенесём инкримент el_in_str на следующую строку, то сначала значение el_in_str будет прибавляться к адресу строки, затем присваиваться элемент из el_in_arr, и после этого будет увеличиваться значение el_in_str и заносится по месту хранения этой переменной. Но суть не меняется - выполняются одни и те же действия.

Или тут дело в том как у них организованы тесты? Т.е., мб, там совсем не участвует компилятор, т.е. мой код не переводится в машинные кода?
103 2786421
>>786333
А модешь само задание прислать?
image.png40 Кб, 1049x436
104 2786424
>>786421
Лови
105 2786427
>>786421
Если использовать, кстати, ф-ции из string.h, то всё норм получается. Но я пока их не хочу использовать - по совету Столярова, чтобы лучше понимать, что такое строки в Си.
106 2786431
>>786427

>что такое строки в Си.


Массив char-ов c '\0' на конце?
107 2786434
>>786424
Забыл ноль в конец строки приписать.
108 2786435
>>786416
На твоей машине не отличается, а на другой отличается. Как и байтсдвиги на разных машинах реализованы по разному, как и касты типов на разных машинах реализованы по разному.

Это база по K&R C lang
109 2786439
>>786431
Ну да, это то просто! Но вот, когда начинаешь решать подобные задачки, то и начинаешь вникать во всю эту арифметику указателей, во все эти массивы чаров и т.д.

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

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


А эти различия в каких рамках проявляются? В рамках одной модели/линейки/архитектуры/...?
111 2786443
>>786434
Точняк!!!!!! Анон, спасибо!!! Долбанные массивы чаров с '\0' на конце.
112 2786444
>>786439

> Ну да, это то просто!


Если это просто, то почему ты не смог найти ошибку в своём решении? М?
113 2786446
>>786431
Не обязательно чаров. Там могут лежать вайдчары или вайдинты или вообще мутированные вайдинты которые хавает petchar() например.

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

Чот сегодня день базы. Только что провел ликбез своему патрону по этой хуйне.
114 2786450
>>786440
У меня сбор статистики скудный. На интеле сигнде бит перезаписывается, на арме нет. Вот и вся моя статистика. Покопай гугол. Разница архитектур обозначает разницу в опкодах, которые соответственно по разному делают вещи.
115 2786452
>>786444
Потому что только вникаю во все эти нюансы. Это же так просто, анон! Тут пока руку на таких ошибках не набьёшь, то такие элементарные действия не войдут в привычку.
116 2786458
Вообще на Сях тяжело писать что-то большое после высокоуровневых языков. Приходится переизобретать ООП, структуры данных, алгосы, которые обычно лежать в стандартной библиотеке тех же плюсов. Я вообще не понимаю как ядро линуса пишут и как этот говогкод работает. Одно дело небольшая утилитка, а другое дело кодовая база в миллионы строк.
117 2786460
>>786458
Там, наверное, невероятно высокий уровень комментариев.
118 2786462
>>786458
Да ничо тяжелого нет. Дольше просто. И часто есть вилка выбора пихать вычисления на стек или не пихать. В плюсах такой вили не будет, насрет в стек конструкторами деструкторами и не спросит даже.

Я могу только понять нытье за отсутствие стрингов как типа (ну и булевых констант). Но это дело привычки на самом деле.
119 2786466
>>786462

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


НИНИУЖНА, особенно для минималистичного и топорного языка как Си. Строки - это как структуры данных, под каждую ситуацию нужна свои.
В ту же Аду несколько видов строк не от хорошей жизни добавили, поэтому пусть лучше оставят базовый функционал, а юзеры свои велосипеды под задачу пишут.
120 2786502
Насколько хорошо владеет языком Си СЕО корпорации "Майкрософт"?
image.png61 Кб, 279x181
121 2786552
>>786218
Я починил баг с изменением значения константы.
Виноватыми оказались касты типов при установке отдельных битов внутри байта. Решение: переписал безтиповым макросом, нет каста типов - нет проблем.
122 2786592
>>786424
>>786333
Вот попытался что-то наговнокодить: https://0x0.st/H28D.c
На пекарне и в браузере работает.
123 2786597
>>786592
Алсо, с бОльшим количеством слов тоже работает.
image.png4 Кб, 609x28
124 2786598
125 2786599
>>786592
Бля я так и не понял чо вы делаете. Каких то сферических коней в вакууме. Ну окей надо вам слеить строки ну юзаните sprintf() зачем по байту перекладывать.
126 2786605
>>786599

>Бля я так и не понял чо вы делаете


Там задание выше по треду. Плюс, анон не хочет вызывать сторонние функции.
127 2786606
>>786599
upd
Например через макрообертку va_args, пихаем в макро массив слов, внутри фором клеим управляющуюу строку для sprintf, аллоцируем память, передаем управляющую строку поинтер и va_arglist в спринтф, проходим фором меняя нули на пробелы

решил в псеводокоде

>>786605
sprintf это стандартная печать
128 2786610
>>786606
Анон учится и хочет вручную такие вещи пописать, чтобы со строками разобраться, а ты ему уже вариадики суешь.
129 2786614
>>786610
бля забыл такую хуйню - спринтф сам аллоцирует сколько надо по печать строки в массив, так что можно просто (следите за руками) напринтить в поинтер со здвигом равным длинне строки слова -1

типа

char * str = "";
for tralivali
sprintf(str+shif, "%s ", words);
puts(str);

да вариадики я для себя подумал, чисто мозги подразмять
Снимок экрана 2023-07-29 в 04.07.00.png123 Кб, 1246x328
130 2786618
>>786614
Вот как раз есть похожий мультипликатор строк навелосипеженый, можно его доработать под прием массива слов и решение готово.
131 2786623
>>786618
Первая же строчка с комментом кричит "Говно!".
Надо делать так, что сначала вызываешь эту функцию в пассивном режиме, она ничего не делает и только возвращает размер необходимого буфера. Потом этот буфер сам создаешь и вызываешь функцию снова, уже с этим буфером, и она его заполняет результатом. А такая самодеятельность с выделением неизвестно чего внутри функции, а потом попытка это отмазать комментом "НЕ ЗАБУДЬТЕ ПОДТЕРЕТЬ ГОВНО ПОСЛЕ МЕНЯ", ну вы поняли.
132 2786626
>>786623
Да мне просто лень было контрол це контрол вэ делать для другого алгоритма и я накодил это, так что чо ты ругаешься, это же не либа какая.
133 2786644
>>786626
Такое работает для хеллоуворлда из двух функций. В реальной же программе ты тут же сам забудешь и получай текущую память.
134 2786667
>>786416
Потому что все эти твои ++ читать неудобно. Я не хочу рыть многостраничне мануалы в поиске ответа какой из этих ++ выполнится первым, правый или левый, и какие у них побочные эффекты.
Во‐вторых, между краткостью и понятностью я всегда выберу понятность. Я в своём коде всегда использую Value += 1.
В‐третьих, вы всерьёз думаете, что компилятор, умеющих такие оптимизации как раскрутка цикла, распространение констант, удаление общих подвыражений, вынос инварианты — он не умеет оптимизировать ++ слева или справа?
135 2786672
>>786614
Анон, спасибо! Буду иметь ввиду, что так можно делать. Но проблема в том, что каждое слово нужно отделить пробелом, а тут я так понял можно посчитать длину всей строки и её сразу же передать sprintf.

>>786667

>Во‐вторых, между краткостью и понятностью я всегда выберу понятность. Я в своём коде всегда использую Value += 1.


Да, понял, анон! Я просто не думал, что я буду кому-то показывать этот код, но из-за этого '\0' в конце строки, я чёт взгрустнул вчера под конец дня и решил спросить анона.

>он не умеет оптимизировать ++ слева или справа?


Я не сомневаюсь, что он это умеет, я просто не понимаю, что здесь оптимизировать, ведь в машинных кодах это и так всё до невозможности просто выглядит.
.png84 Кб, 1074x902
136 2786737
Решил я значиться изучить си.
Но у меня немного ООП головного мозга.
Собственно. Я тут хочу получить фидбек насчет организации своего кода.
Так вообще кто-нибудь пишет на Си?
Я просто не очень много смотрел примеров чужого кода сишного. Придумывал на ходу. Вот примерно такой стиль придумал.
Думаю суть понятна. Объектов у нас нет, пусть будет структура, а ей сразу определяем как указатель будет обзываться, чтобы постоянно звездочку не дописывать. С о всякими функциями которые надо так же передать в другую функцию - делаем typedef для описания сигнатуры, в потом ссылку на функцию помечаем через прификс d (от delegate)

Ну и функции - так же, чтобы типа сэмулировать неймспейсы и стандартную структуру ООПшную - типа имя модуля, имя подмодуля, типа имя объекта, и собственно - сама функция. Что типа "статичное" - не принимает в себя поинтер на объект, что типа делает что-то с объектом - последним аргументом - поинтер на объект и типа обязательно обзываем его self, ну, типа чтобы сэмулировать привычные this.

Собственно. Я уже сказал. Хочу фидбек по такой вот организации кода. В мире Си - пишет так кто-нибудь? Или мне как в растах-питонах опять надо перестраивать свой майндсет и пытаться как-то иначе все это дело делать?
137 2786754
>>786737
Да тайпдефы это база, но ровные пацаны указатели в право выравнивают.
138 2786867
>>786644
Это и есть кусок из двустрочного хеловорлда.
139 2786871
>>786737
Просто закинь в ридми свою нотацию по неймингу и не парься.
Не знаю алиасы на поинтеры мне не нравятся. Будто чел и жабы пришел и на звезды смотреть не может.
140 2786886
>>786754
Звезды вправо для сойжаков, звезды влево для труолдов. Бикоз звезда относится к типу. uint8_t* тип.
141 2786912
>>786886
>>786871

Ладно, я хуйню сморозил. Ставьте звезды где вам нотация пишет их ставить и ебаште те алиасы которые нотация позволяет.
Если у вас по неймингу uint8_t ⚹p то так и будет нормально.
Если у вас по неймингу typedef uint_8t⚹ uint8_ptr то так и будет нормально.

И ебаните уже в шапку двачезвезды ⚹⚹⚹
142 2786933
>>786886

>Звезды вправо для сойжаков, звезды влево для труолдов.


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

>int⚹ a, b, c;


работало для всех одинаково.
143 2786936
>>786933
Нет не должна. Вот например тип куда ты кастуешь (int⚹).
В юниксах вообще олдовый АНСИ стайл с обратной совместимостью. Например

int
main()
{
return 0;
}
144 2786953
>>786933
Я вот считаю что звезды это отличная тема для обсуждений и она не раскрыта.

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

Вот несколько примеров

int⚹ func(int⚹ ptr){}
int ⚹func(int ⚹ptr){}
int⚹ p, ⚹ b;
int ⚹p, ⚹b;
a = (int⚹)c;
a = (int ⚹)c;

Сами выбирайте себе звездную нотацию. Я выбрал не парится и ставлю в центре int ⚹ ptr
145 2786989
>>786933
Этот прав. Между звездой и именем типа всегда пробел.
image.png1,8 Мб, 1920x1080
146 2787054
А что если ⚹p это составное имя? Ну типа (⚹p) то же самое что (аа) только аа мы не можем разделить на сущности потому что аа не составное имя, а ⚹p можем потому что составное.
Снимок экрана 2023-07-29 в 18.40.44.png75 Кб, 420x410
147 2787172
>>786933

>Алсо, такого типа данных как указатель не существует


Пошел ты нахуй, пес. Если не существует тогда почему этот код с пика не работает? Жду маневры.
148 2787212
>>787172
И чего ты подорвался?
Код с пика не работает потому что в Си семантика некоторых операторов зависит от контекста. И в данном случае разрабы Си и компилятора сделали так, что при обьявлении указателя ты никак не присвоишь ему значение по значению. оп, каламбур
Если написать

>int ⚹p;


>⚹p = 10;


или

>int i = 10;


>int ⚹p = &i;


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

>int⚹ a, b, c;


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

>int ⚹(⚹p) = 10;

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

>Алсо, если указатели это такой же тип данных, то почему


>int⚹ a, b, c;


>не работает?



По тем же причинам по которым мой пик не работает.

Объявляй каждый свой инт на отдельной строке
int ⚹a;
int ⚹b;
int ⚹c;

>и почему я не могу сделать так?


>int ⚹(⚹p) = 10;


А что ты тут пытался сделать? По твоей шизотеории ты пытаешься в инт положить инт, но опять что то пошло не так, да?
150 2787272
>>787229
Я начал писать пасту, но потом подумал нахуй оно мне надо? Ты просто тупой, иди на хуй.
инб4: пук срень, ряя, ты слился
151 2787279
>>787272

>ты слился


Ну так по факту же.
имаге.jpg832 Кб, 1822x1105
152 2787570
>>781764
Доделал первую часть без хуюрсесов.
Буду допиливать флажки покраски буковок и пульну этот лагоритм в основной проект. Хуй саси
153 2787572
У меня возникла мысль что флаги не нужны. Я все флажки засунул в 1 байт чара и чекаю там биты на приедмет труфэлса. А нахуй? Можно ведь просто сделать если чар = 1 делай это если 2 делай то, что по сути избавляет от вичислений быта и многократных проверок на истинность.
Булы не нужны. Пруфмивронг.
154 2788184
Начинаю дрочить литкод.
155 2788274
Подскажите чмоне, который только жс по видео из ютьба изучал что делает код:
uint8_t buffer
size_t name = strlen((char
) buffer);
Буфер из файла в нем сначала иду слова, потом цифры и так несколько раз

По идее, это длинна фразы, пока байты можно трактовать как буквы, но я не понимать тогда как это работает
156 2788324
>>788274
Если буфер это поинтер на насигнединты тогда нэйм это длина строки буффер в байтах записанная в память длинны сайз_т байт
Если проще - буферр это строка, нейм это длина строки в байтах (а не в символах).
157 2788338
>>788274
Кстати говоря

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

Другое дело когда ты именно символы считаешь (например только печатные а в строке еще и непечатные), тогда конечно это другой разговор, в строке могул лежать не английские буквы длинной по два байта или непечатные символы по 5 байт например.
158 2788352
>>788338
Или стрлен проводит анализ байтов на предмет вайдчара вайдинта? Я смотрел реализацию в своей библе и у меня там топорный вайл. Это мне в штаны насрали или так она и реализована у вас?
159 2788391
>>788338

>Кстати говоря


Как узнать размер строки по поинтеру? Только проходя вайлом до нулевого байта. Так что ответ такой:

Для
type_t ⚹ str = "string";
size_t len = strlen(str):

Для
type_t str[] = "string";
size_t len = sizeof(str);
160 2788460
>>788391
Обосраля.
161 2788469
>>788460
А что не так?
162 2788601
>>788391

>Только проходя вайлом до нулевого байта.


UTF-8 сложнее, нужна библиотека-парсер каждого символа.
163 2788603
>>788601
Ну и конечно у wchar_t многие символы имеют в составе нулевой байт.
164 2788607
>>788603
>>788601
Ткни пальцем на нулевые байты я не вижу.
https://wiki.iarduino.ru/page/encoding-arduino/
Может ардуиновика врет, но тут табличка утф8
165 2788623
>>788607

>>wchar_t


Ткни пальцем я не вижу.
166 2788624
>>788623
Такс... Если

>wchar_t многие символы имеют в составе нулевой байт


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

???
167 2788628
У меня есть домыслы что кодировка вайдчаров походит на кодировку анси секвенций. У анси 27...какиетобайты...109, тобишь ловишь обратный слеш (27) и пока не будет 109 мы все еще читаем байты анси секвенции. Наверное в вайдчарах так же, тогда вообще не проблема. Типа я знаю байт входа и байт выхода - налепил обработчик и готово.
Animation1.gif1,5 Мб, 1067x564
168 2788634
>>788624

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


Прямо.
wchar_t это UTF-16LE, нативная кодировка ядра и прочих подсистем Windows. В Windows любые обращения со строками к системе преобразуют эти строки в UTF-16LE (wchar_t), поэтому проще всего и лучше всего сразу писать программы в wchar_t (т.н. юникодные программы), чтобы не срать говном преобразований туда-сюда. Исключение только печать в консоль терминала cmd.exe которая wchar_t не поддерживает из за легаси-совместимости, здесь требуется преобразовывать текст.

Что касается представления текста, недавно как раз вышла программа для дебилов, смотри анимированную гифку.

>вайдчар


wide char = wchar_t
Фиксированный размер в 2 байта (в винде стандарт), просто тот же char, но широкий. Вроде есть и длиннее, в 3 байта например, но зачем оно надо я не знаю, в основном не надо ни для чего.

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


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

Секвенции нужны только для мультибайтовых символов, чтобы отличать их от символов другой длины. В wchar_t все символы одинаковые, никаких секвенций не нужно и их нет, просто пробегается по массиву как с char, поэтому в wchar_t у каждого элементарного символа ASCII есть нулевой байт, им просто не нужно 2 байта, второй получается лишний с нулевым значением.
169 2788696
>>788634
Двач - образовач! Спасибо, анон!
170 2789169
>>787212

>Алсо, если указатели это такой же тип данных, то почему


>>int⚹ a, b, c;


>не работает?


Потому что синтаксис у указателя это звёздочка перед переменной, поэтому вот это работает:

>int a, b, *c;


это говорит о том, что мы объявили три указателя, которые должны могут указывать на целочисленные переменые.
171 2789221
>>789169

>>int ✱a, ✱b, ✱c;



✱быстрофикс
172 2789331
>>788634

>в винде стандарт


Смешно звучит, учитывая что винда не поддерживает ни один страндарт целиком.
173 2789339
>>789221
Я вас умоляю, вы так говорите будто такая запись
int ⚹ a, ⚹ b, ⚹ c;
или такая
int⚹ a,⚹ b,⚹ c;
не работает.

Да даже вне деклараций например
int⚹ p = &a;
⚹ p = 1;
174 2789359
>>789339
Работает, почему эти записи не должны работать? Я говорю, что эта запись

>>int⚹ a, b, c;


не будет создавать три указателя. Ну и те записи, которые ты перечислил, тоже лучше не употреблять, ибо принято звёздочку ставить прям перед переменной без всяких пробелов. Просто с эстетической точки зрения это выглядит более опрятно, и сразу же объясняет то, что та или иная переменная есть указатель.
175 2789379
>>789359
За это и начался спор. Что например при декларе переменных читабельнее ставить у переменной, а при декларе прототипов при типе.
Например

int ⚹myfunc(unsigned ⚹ , char ⚹); Менее читабельна чем
int⚹ myfunc( unsigned⚹ , char⚹ );
176 2789390
>>789379

>int ⚹myfunc(unsigned ⚹ , char ⚹); Менее читабельна чем


Для меня наоборот второй вариант менее читабельный.
Хз, как это объяснить, но когда я вижу первый вариант, который ты считаешь мене читабельным, то мне сразу понятно, что myfunc должна вернуть указатель. А когда читаю второй вариант, то мозг как бы на мгновение останавливается и начинает вспоминать, что это означает. Мб, конечно, дело привычки, но всё равно более эстетично выглядит первый вариант, когда звёздочка прям перед переменной.
177 2789400
>>789390
А почему твой мозг считает что должна вернуть указатель на переменную, а не указатель на функцию например, ведь звездочка у имени функции стоит а не у имени переменной?

Я просто пытаюсь понять почему у вас паттерны "сщуность ⚹сущность" обрабатываются проще чем например "сущность ⚹ сущность"
178 2789411
>>789400

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


Указатель на ф-цию? Ф-ция должна вернуть указатель на определённую область памяти, в которой это ф-ция производила какие-то действия.

>сущность ⚹ сущность


Да просто, потому что это похоже на умножение.

>сщуность ⚹сущность


А это есть указатель.
Просто, когда ты пишешь

>int ✱a


то тут нет сомнений, что это указатель на целочисленную переменную а.
А когда ты пишешь

>int ✱ a


то это будто ты умножаешь int на а, что мозг первым делом отвергает, потому что это бред.
179 2789425
>>789411

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


Ну а вот например так если
...
result = printf;
return result;
}

>>сущность ⚹ сущность


>Да просто, потому что это похоже на умножение.


>>сщуность ⚹сущность


>А это есть указатель.


Что насчет a ⚹b? Понимаю что без деклараций не разобраться что есть а что б. Но я намекаю на то что это так же может быть умножением и так же может быть поинтером как и a ⚹ b как и a⚹b и даже a⚹ b
Добавим сюда декларации typedef int a; и это поинтер
Добавим другие декларации int a,b; и это умножение
180 2789434
>>789425

>result = printf;


>return result;


>}


А здесь что не так? В result будет записан какой-то мусор, и этот мусор будет возвращён.

>Понимаю что без деклараций не разобраться что есть


Ты же сам ответил - всё зависит от деклараций, но когда задекларирован указатель, то читать проще, когда звёздочка перед переменной.
181 2789446
>>789434

>В result будет записан какой-то мусор


Почему ты считаешь что будет записан какой то мусор?

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


С этим я не спорю. Я спорю с тем что есть формат деклараций прототипов а именно
[ тип возвращаемого значение ] пробел [ имяфункции ] скобкаоткрылась...
а в ваших декларациях имя функции со звездочкой
вы же потом не пишите кол как ⚹myfunc() правильно?

Что то я устал разжевывать очевидное.
182 2789462
>>789446

>Почему ты считаешь что будет записан какой то мусор?


Запусти код, который ты написал и сам всё увидишь.

>вы же потом не пишите кол как ⚹myfunc() правильно?


Вот ссылка, которая тебе поможет:
https://metanit.com/c/tutorial/5.11.php#:~:text=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%20%D0%BD%D0%B0%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8E%20%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%20%D1%81%D0%BE%D0%B1%D0%BE%D0%B9,%D0%BD%D0%B0%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8E%20%D1%8F%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F%20%D0%B5%D0%B5%20%D0%B8%D0%BC%D1%8F.

myfunc это и так указатель, получается, что ты хочешь получить масло масленное.
183 2789472
>>789462
Ты решил меня потроллить тупостью? Резулт в том примере вернет указатель на принтф. Указатель на принф по твоему мусор что ли?

>myfunc это и так указатель, получается, что ты хочешь получить масло масленное.


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

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

Опять же вернемся к стандартным поинтерам

>int ⚹p;


В данном случает поинтер это р а не ⚹р и вот почему
р++ - двигаем поинтер на sizeof(int), а не ⚹p++ - двигаем поинтер
p = arr[30] - устанавливаем поинтер, а не ⚹p = arr[30]

Из всего этого есть один вывод простой
p это переменная типа int ⚹.

Я закончил.
184 2789490
>>789472

>Я закончил.


Молодец!
185 2789882
Вопрос про сокеты и объем передаваемой строки.

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

Есть ещё один момент: так как с советами на линуксах я знаком, но не знаю, что есть в windows.
186 2790407
>>789882
Да, есть. Не больше двух гигабайт.
sage 187 2790529
>>789400
Дело привычки. Деды через пробел.
188 2790815
>>770768 (OP)
1. Язык Си это часть языка С++?
2. Если это так, то зачем тогда учить отдельно Си? Можно выучит С++ и знать одновременно два языка(Си и С++).
189 2790826
>>790815

>1. Язык Си это часть языка С++?


Нет.
190 2790976

>int a, b, c, d, e, g, h;


Откуда у вас вообще возникла идея объявлять все переменные в одной строке? Начитались книжек из 1970‐ых годов? Это плохая практика.
В современном мире объявлять переменную следует не в заголовке функции, а как можно ближе к тому месту, где она будет использоваться. И желательно сразу с инициализирующим значением.
2023-08-02 05.43.28.jpg24 Кб, 485x381
191 2790977
Кто нибудь из вас замечал, что форы на цисках работают по шаблону дувайл, а на рисках по шаблону вайл? Как вы думаете отработает ли фор с пика при условии что maxsymb это не 0?
192 2790978
>>790976
Поддвачну. А вообще идеальным вариантом будет объявлять переменную на своем уровне стека и если нужно делать проброс через поинтер на предыдущий уровень.
193 2790997
>>790977
Да, отработает.
194 2791258
>>790976

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


Нет. Неудобно оценивать размер стека. Смешивается декларативное и императивное.

> И желательно сразу с инициализирующим значением.


Нет. Отвлекает от декларативного.
image.png213 Кб, 604x341
195 2791974
Сап моряч.

Тематика вопроса не совсем по сям но все же. Объясни как мне (архитектурно) состряпать пир ту пир приложуню? я понимаю как законнектить две машины в локалке, но я не понимаю как законнектить две машины в глобалке. Там же динамические айпишнегы провайдер дает. Сегодня антон был под одним айпишнегом, завтра под другим. И как антона найти тогда? На какой айпишник коннект кидать? Я не понимаю.
196 2792105
>>791974
Никак. При первом запуске "на холодную" требуется централизованный сервер. Потом уже известные узлы можно хранить в кэше, но кэш со временем протухает и снова потребуется сервер.
197 2792107
>>792105
Я вот глянул курс лекций по сетям и у меня такой вопрос. Если я посылаю пакет на бродкаст (255.255.255.255) в котором например есть еще порт моей приложуни питупи и какая то инфа (ну например с моим айпишнегом в локалке провайдера плюс какая то идентификационная хрень по типу "это я") - то ведь этот пакет получат поидее вообще все в интернете, правильно? Или нет? Ну и значит этот пакет получит Антон на том конце мира и сможет закешировать какие нить данные и послать уже запросик на коннект. Ну и поидее в обратную сторону так же сработает. Или нет? Я ничего не понимаю...

Ну например такая схема
Если дозвон до старого айпишнего ничо не дал - нет узла, узел не тот, там нет порта и тд и тп значит это не антон
Шлю бродкаст "АНТОХА ОТЗОВИСЬ" или "АНТОХА ЗВОНИ СЮДА"
И либо мне прилетает айпишнег антона и я конекчусь, либо антоха шлет коннект до меня и там рукопожатия писюнов тыры пыры в жопе дыры

Крч подкиньте идею, я не оч понимаю. Есть еще какой то опенфлоу и сдн (не днс).
198 2792110
>>791974

>Там же динамические айпишнегы провайдер дает


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

>И как антона найти тогда


знать его айпишник. если поменялся, то узнавать заново

>Если я посылаю пакет на бродкаст (255.255.255.255)


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

>подкиньте идею, я не оч понимаю



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

>состряпать пир ту пир приложуню


может начать со знакомства с peer-to-peer протоколами? мм, как такая идея? вообще я удивляюсь тому, что с абсолютно нулевыми начальными вводными по сетям ты полез писать ptp приложение на С. похвально, подпишусь на блог.
199 2792116
>>792107
Широковещание в интернете не работает, только в локалке.

Еще раз, для дебилов - НИКАК, нужен централизованный (известный всем желающим подключиться) сервер который сообщит им адреса.
200 2792220
>>770768 (OP)
Собрал либу в Вижуал Студио, работает не правильно, собрал в ГЦЦ, работает правильно, куда копать? Оптимизацию отключил.
201 2792315
>>791258

>Нет. Неудобно оценивать размер стека. Смешивается декларативное и императивное.


Какой ещё размер стека, поехавший. Компилятор в целях оптимизации все твои переменные может заменить на константу, либо засунуть в регистр, либо переиспользовать под другие цели.
Если тебе нужно руками управлять стеком, тебе нужно на ассемблере писать.
202 2792577
>>792110

>необходимо знать ip-адрес дальней стороны


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

Ну а существует ли такой же проброс вопроса для Антона? Ну как ты спрашиваю в локалке "АНТОНЫ ЕСТЬ"? Все молчат спрашивам на уровне нашего шлюза знают там антона или нет?

>может начать со знакомства с peer-to-peer протоколами? мм, как такая идея?


По-твоему мне надо быть инженером технологом пищепрома чтобы бутерброд себе сделать?

>похвально, подпишусь на блог.


Подписывайся конечно.
203 2792610
>>792577
Неправильно, аналогия такая - надо скачать рецепт бутерброда бесплатно без смс, чтобы вместо бутера из говна и мочи увидеть как нормальные люди делают бутерброд из ветчины и хлеба.
204 2792626
>>792610
Аналогия такая. У меня есть ветчина и есть хлеб. И я пытаюсь выснить как их сложить чтобы получился бутерброд.

Так все таки, могу я как то у всяких там главных узлов отвечающих за выдачу айпишнеков спросить какой айпишник дали антону сегодня?
205 2792645
>>792626

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


наверное. что за узлы, кстати?
image.png358 Кб, 551x630
206 2792655
>>792626

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

16827610240690.mp41,4 Мб, mp4,
1080x1920, 0:08
207 2792661
208 2792693
Чел, который пытается p2p приложуху запилить, можешь поступить иначе - раздавать сразу на все айпишники мира. Получается, что, если сегодня у Антона один адрес, а завтра другой, но ты, что сегодня, так и завтра раздаешь инфу на все айпишиники в мире, получается, что никак ты не промахнёшься, если у Антона завтра сменится айпишник. а так, конечно, тебе бы матчасть подучить.
209 2792707
>>792693
Я так и думал сделать, но говорят бродкасты работают только в локалке. Да и прям на все айпишники мне не надо пои идее. Мне надо мультикастить на анотонову локалку, физически он из локалки никуда не переедет, просто сменит айпишник. Та что почается если под старым айпишником не антон надо врубить мультикаст пока не нащупается антон. Я вот так думаю.
210 2792731
>>792707

>но говорят бродкасты работают только в локалке


ну а зачем броадкаст? пройдись по всем белым айпишникам в цикле, их не так много на самом деле.
211 2792733
>>792707

>пока не нащупается антон


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

>>792731
Надо подумать над этой идеей.
213 2792748
>>792741
Так они шифрование используют, чтобы понять к тому антону ты подключаешься или нет, это самое, что не наесть про коннекты.
214 2792757
>>792748
Мне кажется достаточно апишнека и порта + фразы приветсвия
Если это не антон у него не будет порта открытого. Если это челик слушающий сеть со всем открытыми портами - у него не будет фразы приветсвия.
215 2792761
>>792757
Ну я тебе примерно об этом и толкую.
216 2793242
>>792315
Дурачек, char tmpbuf3[MAXBUF] колпилятор никуда не соптимизирует. Эта хуйня должна быть на видном месте. А для всего остального незачем делать исключение. Объявления только в начале блока, и желательно в порядке убывания размера.
217 2793382
>>793242
Вот почему даунам нужно со школы вбивать паскаль, мужик был умный, знал что делал. А если сразу дать нормальный язык, они начинают лепить через жопу, мозгов своих понять нет, таких только дрессировать, сразу, потом будет поздно.
16888192678120.mp423 Мб, mp4,
576x1024, 0:48
218 2793399
>>793382
Не пойму в чем суть претензии то? Каждый волен выбирать как ему использвать инструменты языка. Сишник позволяет декларировать новые сущности на каждом слое стека, так хули этим не пользоваться? Еще учитывая что выходя со слоя стека не надо следить за памятью и она автоматически считается освобожденной вотличие от кучи - вообще же супер (ну если без статиков). Если мне вот надо безтайповый своп сделать макросом то как мне его сделать то ты предлагаешь? Задекларировать глобалку и через нее свопать? А почему бы не задекларировать локалку на стеке и свопнуть через нее, а потом удалить локалку при выходе со стека?

Крч мимопроходил нихуя не понял чо тут деды друг друга деснами грызут.
219 2793438
>>793399

>декларировать новые сущности на каждом слое стека


Этот прав! Плюс надо учитывать, что каждая ф-ция должна выполнять одно действие и быть компактной, чтобы не держать в голове овердохуя переменных, когда читаешь код, следовательно, само название ф-ции, а следом и декларирование переменных, при чтении кода, должно сразу давать представление о том, что за алгоритм здесь применяется. А если декларировать переменные хаотичным образом, то получается, надо саму ф-цию разбивать на "блоки", что ломает представление о значении ф-ции.
sage 220 2793462
Функции надо разбивать на функции, тогда все переменные легко будет объявить в самом начале.
221 2793505
>>793242

>Дурачек, char tmpbuf3[MAXBUF] колпилятор никуда не соптимизирует


Про оптимизацию «распространение констант» первый раз слышим? Весьма наивно полагать, что такие штуки могут происходить только с переменными а с массивами не могут. Компилятор может выкинуть весь твой тмпбаф3 и заменить его константой, как написано в этой статье https://habr.com/ru/articles/272269/

>Эта хуйня должна быть на видном месте


На видном месте — это когда видно где объявлено значит там используется. А когда приходится бегать глазами в заголовок блока, начало функции или вообще прокручивать — это не видно.

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


Зачем? Если для выравнивания, то это относится только к полям структур. Одиночные переменные компилятор выравнивает автоматически.
222 2793817
Поясните за IDE чтобы видеть адреса в памяти, хочется смотреть что происходит в риал тайм.
223 2793907
Пидорасы твари суки не предупредили про перекат, ненавижу вас, сишник хуже пидораса!
224 2793916
>>793907
Ответственность за перекат в новый тред лежит на аноне.
225 2794107
>>793438
Речь не совсем о функциях шла. Функции это лишь часть стекового механизма.

>>793817
Не знаю таких ИДЕшек, но принтф %p поможет

>>793907
Согласен, перекат кривой как код ОПа.
226 2794393
>>793817
Начиная примерно с 2010 года в ОС адреса памяти не реальные, а виртуальные, живи теперь с этим
227 2794482
>>794393
А где почитать можно.
228 2794494
>>794393
Какого нахуй 2010, это уже как 300 лет виртуальные адреса.
229 2794595
>>794393
В клубе все реально, а не виртуально
Наша жизнь игрушка, а судьба фатальна
230 2794606
Как хорошо владеет языком Си СЕО корпорации "Apple"?
231 2794609
>>794606

>пок пок как халашо владеит писюном гей калпалации "Апож"?

232 2794782
>>793817
Да любая современная IDE вроде студии.
Даже VSCode можно научить показывать адреса переменных: ставим плюйгины «Hex Editor» и «MemoryView».
233 2794803
>>792315

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


В реальности Clang любит захуячить твою переменную в стек, даже когда ты специально кодил так, чтобы в регистрах место оставалось. Стек, по крайней мере маленький, работает со скоростью регистров. Не знаю, как сделано, может у процессора есть кэш стека.
234 2795144
>>794803

> Стек, по крайней мере маленький, работает со скоростью регистров


Хладные истории.
235 2795147
>>795144
Сколько че ни делал интринсиках SSE2, Clang все время норовит в стек запихнуть, хотя специально экономлю регистры. GCC нет, но быстрее оно не работает.
236 2795271
>>795144
А что не так? К стеку доступ константный, всегда знаешь где что лежит. Единственное ограничение это оперативка наверное.
237 2795411
>>795271
Работает оно настолько быстро, что там скорее всего никаких обращений к оперативке вообще нет. Может в начале, если это например цикл, из нее читается, а в конце пишется. А при долбежке в цикле выглядит как обращение через rsp, но на самом деле используются какие-то теневые регистры.
238 2795456
>>795411

>теневые регистры


Власти скрывают.
239 2795905
Спасибо, парни. Не думал что байтоебы такие веселые ребята.
240 2797461
>>795147
>>795271
Инсрукция может прочитать два регистра и записать третий. За такт таких инсрукций выполняется две и больше. Итого 6 и больше обращений к регистрам. А сколько обращений к памяти за то же время может быть?
241 2798277
Почему шланг такое говно?

Почему гцц смог уместить все в 20 строк, а ебаный шланг размотал эти 20 строк на 60 строк, да и еще зачем-то векторизацию(SSE 128 бит регистры) применил. Старый шланг таки вообще до 200 строк говно размотал.
242 2798278
>>795147
>>798277
Шланг говно кстати.
243 2798301
>>798277
Тебе ращвернули цикол на 4 или даже на 8, если там упакованные умножения не просто так. Почему? Ты сам сказал шлангу, что хочешь отпимизацию по скорости под хуй сосе.
244 2798452
>>798277
Чел, хороший компилятор делает Intel, это база, запомни. Никто из серьёзных ребят не компилирует шлангом. В крайнем случае можно майкрософтским компилятором. Шланг и говноцэцэ для мозолеедов, это средства для онанизма, а не компиляторы.
245 2798478
>>798452
Ахахухаха.
246 2798697
>>770768 (OP)
мразь на ОПЕ
почему все на английском для новичка?
гнида
247 2798795
Сколько примерно времени от почти ноля знаний до нормальной работы?
248 2798810
Подскажите а лучше ли сишка++ в плане работы чем например жава? Да сишка вроде как "профессиональнее" но на жаве работа есть и будет всегда потому что востребованность намного выше. Конкуренция тоже выше но это так же значит что легче будет уйти на новое место. По сишке вижу платят больше но вакансий намного меньше, поэтому и спрашиваю. И конечно же не имею понятия насколько "сложнее" сишка++ по сравнению с жавой.
249 2798822
>>798795
Без высшего образования работы на плюсах нет. Если студент, на третьем курсе ищи интерном место.
>>798810
Работа на крестах собачья, сложная, неблагодарная, плохо оплачиваемая. Не связывайся.
250 2798844
>>798822

> Без высшего образования работы на плюсах нет. Если студент, на третьем курсе ищи интерном место.


Не один раз сталкивался на плюсовых проектах с людьми без высшего образования. Другое дело надо иметь скиллсет, чтобы самостоятельно уметь изучать от и до. А у многих без университета и настояния какого-то подгнившего профФессора с кафедры до бошки какие-то моменты не доходят.

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


Если не умеешь себя продать - то все будет именно так, согласен.
251 2798846
>>798822

>Без высшего образования работы на плюсах нет


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

https://hh.ru/vacancy/84720366

Вот не последняя компания и вышка тут не нужна и таких 90% на рынке труда
252 2798848
>>798277
Ты вроде сам включил О3 оптимизации, а потом имеешь претензии к компилятору. Это глупо.
253 2799043
>>798848
Так гцц +- одинаковый код генерирует. А вот шланг
254 2799047
>>799043
Шланга, вот такая вот шланга.
255 2799074
>>799043
Не задавался вопросом, что вероятнее всего clang имеет другие оптимизации врубленные на уровне О2 и О3 в отличии от gcc? Например, подрубает принудительно -march=native там, не?
Странно после этого писать что какой-то компилятор говно, а какой-то нет. Это все равно что называть говном clang, потому что он не gcc.
256 2799120
Ебать вы тут все долбаебы

Мимо формошлеп JSON-грузчик
280к в месяц даже не знаю базу алгебры за 6 класс
257 2799203
>>798846
Это вакуха для формошлёпа на Qt-дрисне. В 99% будет микроэлектроника или какая-то очень специфичная предметная область где ты охуеешь, или гейдев, или хайлоад в яндексе.

> вышка тут не нужна


А ты откликнись, это подразумевается.
49037761bd1de8ad619e193f785d101a65ac3616b2da1a7da404e82b608a105a.jpg550 Кб, 1920x1080
259 2799227
Анон, что посмотреть или почитать по Makefile? Указатели понятнее блдж. Желательно на англ.
260 2799229
>>799227
Справку, она у них охуительна, ну и любую доступную книгу на выбор пару глав вступления
261 2799230
>>799229
ойбля, с CMake перепутал, но всеравно, дропай Мейк и вкатывайся в СМейк
262 2799255
>>799230
Нестандартная дрисня. Сначала make.
263 2799263
>>799255
Ньюфаня в трхеде, ясно
264 2799274
>>798277
Мне думается, что шланг юзает SIMD инструкции. Попробуй получить значение 2^64 и вывести его, если шланг выведет 18446744073709551616, а гцц 0, то вот тебе и ответ, почему шланг юзает 128 битные регистры.
BD728F53-04FD-4086-879A-D4DCCBA41CBA.jpeg15 Кб, 575x106
265 2799390
CC=gcc
CFLAGS=-c -Wall -Werror -Wextra

LDFLAGS3=
EXE3=../../build/Quest_3
SRCS3=\
../data_libs/data_io.c\
../data_libs/data_stat.c\
../data_module/data_process.c\
../yet_another_decision_module/decision.c\
main_executable_module.c\
sort.c
OBJS3=$(SRCS3:.c=.o)

LDFLAGS4=
EXE4=../../build/Quest_4
SRCS4=\
../data_libs/data_stat.c\
../data_module/data_process.c\
../yet_another_decision_module/decision.c\
sort.c
OBJS4=$(SRCS4:.c=.o)

STAT_SRCS=../data_libs/data_stat.c
STAT_OBJS=$(STAT_SRCS:.c=.o)
STAT_LIB=data_stat.a
LDFLAGS5=-L. data_stat.a
EXE5=../../build/Quest_5
SRCS5=\
../data_libs/data_io.c\
../data_module/data_process.c\
../yet_another_decision_module/decision.c\
main_executable_module.c\
sort.c
OBJS5=$(SRCS5:.c=.o)

DYN_SRCS=\
../data_libs/data_stat.c\
../data_module/data_process.c
DYN_OBJS=$(DYN_SRCS:.c=.o)
DYN_LIB=data_process.so
LDFLAGS6=-Wl,-rpath,.
EXE6=../../build/Quest_6
SRCS6=\
../data_libs/data_io.c\
../yet_another_decision_module/decision.c\
main_executable_module.c\
sort.c
OBJS6=$(SRCS6:.c=.o)

all : build

$(EXE3) : $(OBJS3)
$(CC) $(LDFLAGS3) $(OBJS3) -o $@

$(EXE4) : $(OBJS4)
$(CC) $(CFLAGS) -DFLAG main_executable_module.c -o main_executable_module.o
$(CC) $(LDFLAGS4) $(OBJS4) main_executable_module.o -o $@

$(EXE5) : $(OBJS5)
$(CC) $(LDFLAGS5) $(OBJS5) -o $@

$(EXE6) : $(OBJS6) $(DYN_LIB)
$(CC) -o $@ $(OBJS6) -L. $(DYN_LIB) $(LDFLAGS6)

.c.o :
$(CC) $(CFLAGS) $< -o $@ //это

build : $(SRCS3) $(EXE3)

build_with_macro : $(SRCS4) $(EXE4)

$(STAT_LIB) : $(STAT_OBJS)
ar rc $(STAT_LIB) $(STAT_OBJS)

$(DYN_LIB) : $(DYN_OBJS)
$(CC) -shared -o $(DYN_LIB) $(DYN_OBJS)

build_with_static : $(STAT_SRCS) $(STAT_LIB) $(SRCS5) $(EXE5)

build_with_dynamic : $(DYN_SRCS) $(DYN_LIB) $(SRCS6) $(EXE6)

clean :
rm -rf $(EXE3) $(EXE4) $(EXE5) $(EXE6) $(OBJS3) $(STAT_LIB) $(DYN_LIB)

rebuild : clean build

run3:
$(EXE3)
run4:
$(EXE4)
run5:
$(EXE5)
run6:
$(EXE6)

анон, поясни как работает этот makefile, особенно где стоит коммент «это».
и пикрил, например. Почему obj5 вызывается?/объявляется? Два раза? Что происходит при первом вызове?
BD728F53-04FD-4086-879A-D4DCCBA41CBA.jpeg15 Кб, 575x106
265 2799390
CC=gcc
CFLAGS=-c -Wall -Werror -Wextra

LDFLAGS3=
EXE3=../../build/Quest_3
SRCS3=\
../data_libs/data_io.c\
../data_libs/data_stat.c\
../data_module/data_process.c\
../yet_another_decision_module/decision.c\
main_executable_module.c\
sort.c
OBJS3=$(SRCS3:.c=.o)

LDFLAGS4=
EXE4=../../build/Quest_4
SRCS4=\
../data_libs/data_stat.c\
../data_module/data_process.c\
../yet_another_decision_module/decision.c\
sort.c
OBJS4=$(SRCS4:.c=.o)

STAT_SRCS=../data_libs/data_stat.c
STAT_OBJS=$(STAT_SRCS:.c=.o)
STAT_LIB=data_stat.a
LDFLAGS5=-L. data_stat.a
EXE5=../../build/Quest_5
SRCS5=\
../data_libs/data_io.c\
../data_module/data_process.c\
../yet_another_decision_module/decision.c\
main_executable_module.c\
sort.c
OBJS5=$(SRCS5:.c=.o)

DYN_SRCS=\
../data_libs/data_stat.c\
../data_module/data_process.c
DYN_OBJS=$(DYN_SRCS:.c=.o)
DYN_LIB=data_process.so
LDFLAGS6=-Wl,-rpath,.
EXE6=../../build/Quest_6
SRCS6=\
../data_libs/data_io.c\
../yet_another_decision_module/decision.c\
main_executable_module.c\
sort.c
OBJS6=$(SRCS6:.c=.o)

all : build

$(EXE3) : $(OBJS3)
$(CC) $(LDFLAGS3) $(OBJS3) -o $@

$(EXE4) : $(OBJS4)
$(CC) $(CFLAGS) -DFLAG main_executable_module.c -o main_executable_module.o
$(CC) $(LDFLAGS4) $(OBJS4) main_executable_module.o -o $@

$(EXE5) : $(OBJS5)
$(CC) $(LDFLAGS5) $(OBJS5) -o $@

$(EXE6) : $(OBJS6) $(DYN_LIB)
$(CC) -o $@ $(OBJS6) -L. $(DYN_LIB) $(LDFLAGS6)

.c.o :
$(CC) $(CFLAGS) $< -o $@ //это

build : $(SRCS3) $(EXE3)

build_with_macro : $(SRCS4) $(EXE4)

$(STAT_LIB) : $(STAT_OBJS)
ar rc $(STAT_LIB) $(STAT_OBJS)

$(DYN_LIB) : $(DYN_OBJS)
$(CC) -shared -o $(DYN_LIB) $(DYN_OBJS)

build_with_static : $(STAT_SRCS) $(STAT_LIB) $(SRCS5) $(EXE5)

build_with_dynamic : $(DYN_SRCS) $(DYN_LIB) $(SRCS6) $(EXE6)

clean :
rm -rf $(EXE3) $(EXE4) $(EXE5) $(EXE6) $(OBJS3) $(STAT_LIB) $(DYN_LIB)

rebuild : clean build

run3:
$(EXE3)
run4:
$(EXE4)
run5:
$(EXE5)
run6:
$(EXE6)

анон, поясни как работает этот makefile, особенно где стоит коммент «это».
и пикрил, например. Почему obj5 вызывается?/объявляется? Два раза? Что происходит при первом вызове?
266 2799759
>>799203

>Это вакуха для формошлёпа на Qt-дрисне


Будто что-то плохое, зарплата хороша

>В 99% будет микроэлектроника или какая-то очень специфичная предметная область где ты охуеешь


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

>или гейдев, или хайлоад в яндексе.


Нахуя мне эти единичные случаи?

>А ты откликнись, это подразумевается.


А я откликался и только додики с заводов требуют вышку
Вот еще пример хорошей компании не требуется вышка
https://hh.ru/vacancy/82573527

требуют хорошую алгоритмическую базу, но это можно получить без вышки в 2023 году
267 2800090
>>799759

>только додики с заводов требуют вышку


Удвоил данный тезис.
268 2800110
>>799274
Нет. В функции int, а он и там и там 32 бита.
269 2800242
>>800110
Да, я вижу, что и там и там int! Я просто подумал, что мб ты сам додумаешься, что нужно просто расширить до ансайнед лонга, чтобы проверить теорию о SIMD инструкции, но не судьба, поэтому подсказка: расширь до ансайнед лонга и проверь.
270 2800258
>>800242
Можно вообще поступить как белые люди, а не как мы пытаемся сделать - sizeof(unsigned long long), и сравни это значение у gcc и у шланга.
271 2800331
>>800242
>>800258
я вот не ебу чо там за инструкции такие вычурные, но может быть у чела просто шина 64 бита и силанг нативно в лонгах считает чтобы не женглировать байтами
мы же вообще ниху не знаем вводных по железкам, но при этом пытаемся построить какие то выводы

крч несерьезно все это
272 2800441
>>799390

>Почему obj5 вызывается?/объявляется? Два раза?


obj5 нигде не вызывается. Твой $(obj5) — это переменная, её нельзя вызвать, это не функция.

>$(CC) $(CFLAGS) $< -o $@ //это


$(CC) — переменная, в которой содержится имя исполняемого файла компилятора
$(CFLAGS) — параметры компилятора
$<— это тоже переменная, в ней содержится имя первой зависимости
$@ — в этой переменной содержится имя цели
273 2800469
>>800331
Ну поэтому для начала sizeof(), а потом копать дальше, если будет какая-то разница, ну либо не будет никакой разницы (тогда можно грешить на оптимизацию шланга).
274 2800478
>>799759

>>или гейдев, или хайлоад в яндексе


А для этого что нужно подтянуть? Или в какую сторону развиваться?
275 2800705
>>800478
Учишь фреймворк который написал яндекс
учишь фреймворк который написан под игры
формошлепишь по фреймворку
276 2800785
>>800705
И что, и это всё? И для хайлоада даже асм не нужон? И не нужны алгосы с математикой? Чёт ты мне здесь прохладные какие-то заливаешь в уши.
277 2800876
>>800785
Ты девопс для хайлода?
Алгосы нужны базовые
Математика базовая 1-11 класс

Если нужен человек с хорошей математикой, то это пишут очень четко в вакансии

https://hh.ru/vacancy/82829548

Так устроен рынок, а кто тут пишет обратное - это теоретики не выходившие на рынок 5 и более лет
278 2800944
>>800876
И какая зп у этого типа? Это какой-то супермен им нужен, не меньше.
279 2801022
>>800944
Такая же, ты сам выбираешь идти в проект потеть с математикой или идти в обычный

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

вот и думай
280 2801440
>>800944

>какой-то супермен им нужен


Это заблуждение. Ты просто не знаешь вузовской математики и тебе кажется это чем-то космическим.
На самом деле то, что они требуют, решит любой студент 2-3-го курса технического ВУЗа в период сессии.
В математике не возникают новые фреймворки каждые 3 года. Там всё настоялось уже 100 лет, этому умеют учить. В математике реально достаточно вдумчиво прочитать один учебник и прорешать в нём задачки, чтобы шарить в этом раз и на всегда, на столетия вперед.
281 2801701
>>801440
Жопоглаз, ты почитай что на скринах написано. Им нужен не студент, а ветеран С++, Питона, гений науки-решатель нестандартных научных проблем (то есть любых проблем, что работодателю захочется). Им нужен ёбаный господь бог всесильный - затычка во всех дырках, обязанный делать всё и виноватый во всех недоделках, а зарплата - МРОТ.
282 2801728
>>801701
Я понимаю для чего им нужно решать нестандартные научные проблемы (как бы нефтесервисные компании ушли из России, а потому и кпд у скважин резко снизился), но мне всегда представлялось, что людей, способных решить подобные проблемы плюс продвинуть вперёд технологический уклад страны, нанимают не на hh, а, примерно, как Маск рассказывал, как он переманивал у Гугла типов для OpenAI; либо идут, допустим, в МФТИ и там просят профессора заняться этой проблемой. А тут, блять, hh!!! Это, конечно, показывает уровень менеджмента, которые тупо не могут допетрить, что люди с нужными им качествами с вероятностью, стремящейся к нулю, сидят на hh и ждут подходящую для них вакансию, у подобных суперменов уже и так всё на мази до конца их жизни, и единственный способ их нанять это чем-то заманить.
283 2801731
ебать вы тут конспирологи политологи
а между тем это просто техническая вакансия для закрытия таски у хрюнделя
никто на нее не пойдет по понятным причинам, а дурака который пойдет сама хрюндель отсеит как долбоеба конченного
дефолтно в штат никто не требуется, а хрюндель должен чем то заниматься на работе кроме фильтрации чая через почки, поэтому шлепают такие вот технические вакансии
развели срачь на ровном месте
284 2801732
>>801731
Ну либо так.
285 2801742
>>801732
Тогда получается, что это дебса >>800876 надо гнать ссаными тряпками отсюда, потому что он нам сюда принёс какой-то виртуальный кал.
286 2802065
>>801742
Я практик, человек который проработал не в 1 десятке компаний (меняю работу раз в год), а твои коллеги сидят на 1 месте по 15 лет и даже не понимают как устроен рынок в 2023

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

Тут 1 чел закончил 2 вышки и форсит что вышка нужна,
Другой выучил пайку радиодеталей и форсит что это база
третий выучил немецкий и форсит что только с немецким есть будущее в СИ
287 2802983
В чем разница между С/С+/С++?
Нет не в количестве плюсов в конце, это я уже знаю.
288 2803262
>>802983

>В чем разница


В парадигме, С++ это ООП
289 2803273
простите за базовый вопрос, только учусь, но нагуглить почему-то ответ не получается
вот у меня есть проект, в котором есть файл cmakelists.txt я его пропускаю через cmake, создавая "MinGW makefiles", потом значит из MinGW использую утилиту сборки mingw32-make и получаю приложение
а если мне требуется сменить компилятор на Clang, то какие шаги будут с ним, чтобы из того проекта с cmakelists.txt получить приложение?
290 2803288
>>803273
Не знаю, как именно в cmakelist и mingw, но для утилиты make в линуксах нужно просто сменить компилятор в условиях makefile. Скорее всего и у тебя должно быть что-то подобное.
291 2803292
>>803273
set(CMAKE_C_COMPILER clang)
292 2803300
>>803262
Эот хорошо или плохо?
cmake.png8 Кб, 495x348
293 2803304
>>803288

> но для утилиты make в линуксах


я в винде

> set(CMAKE_C_COMPILER clang)


так мне не как написать файл, а как скомпилировать уже готовый проект

cmake он на пике что должен для clang делать?
в каталоге LLVM/bin я не нахожу аналог mingw32-make, поэтому и спрашиваю как в нем эта цепочка происходит
294 2803309
>>803300
А дрочить это хорошо или плохо? А анальный секс это хорошо или плохо? А классический секс это хорошо или плохо? А БДСМ и makedome это хорошо или плохо?
Это ни хорошо и ни плохо, это всего-лишь различные взгляды на утоление своих похотливых хотелок.
295 2803388
>>771440
Ну дык логика объявления типов в Си такова, что ты клеишь операторы (скобки, звездочки, []) к имени ровно в таком порядке, в каком их надо будет применить, чтоб получить ту простейшую хрень на выходе слева (int, double, struct psina и т.д.)
296 2803396
>>802983
Что еще за C+? TempleOS чтоли?
297 2803416
>>802983
требуется разработчик C/C++/1С/C#
298 2803424
>>790826
Ну, исторически Си появился раньше, а С++ изначально был его расширением, чего не скажешь о последних стандартах, но по-прежнему уделяется внимание тому, чтоб легаси можно было как-то поддерживать/мигрировать, поэтому условная обратная совместимость есть, и нестрого говоря Си можно назвать подмножеством C++. Но...

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

Во-вторых, в C++ есть фичи, которые служат настолько исчерпывающей альтернативой многим сишным подходам, что мешать их в одном коде концептуально не по-пацански.

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

Алсо, иногда Си пригодится даже более непосредственно. Например, когда работаешь на крестах с какими-то системными либами. Там, где вступает в дело пресловутая "условная совместимость" языков.
299 2803425
300 2803447
>>803309

>А дрочить это хорошо или плохо? А анальный секс это хорошо или плохо? А классический секс это хорошо или плохо? А БДСМ и makedome это хорошо или плохо?


Да.
301 2803448
>>803416
Согласен. Подписываю контракт не читая.
302 2804291
>>803424

>Как минимум в работе с аллокатором.


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

int x = 10;
int y = x++;
х станет 11 но у останется десяткой

Почему так? Моя простая житейская логика ломается об эту операцию. Ведь у должно стать 11 потому что задается х=10 и потом прибавляется 1.
304 2804556
>>804550
Это нердовский шорткатик для сокращения количества строчек, лол.
305 2804565
>>804556
Ну я уже разобрался что у сходу делает мат операцию и говорит системе что х теперь будет 11. Шорткат да но хуйня какая то, если я хочу чтобы переменная что то делала с другой переменной я лучше это отдельно сделаю. А то пройдет неделя и я забуду нахуй что я там накодил и почему нихуя не работает.
306 2804573
>>804550
int y = ++x;
если хочешь сначала вычислить инкремент до всех остальных операций но это неточно я не проверял
307 2804580
ну и в крайнем случае для управления приоритетом операций есть скобки (вот эти вот)
308 2804584
>>804565
Так и есть, кто-то любит ввернуть такое и радуется, кто-то пишет в умных книжках, что лучше многословнее, но однозначно. Вечная хуйня.
309 2804586
>>804565
Так и есть, кто-то любит ввернуть такое и радуется, кто-то пишет в умных книжках, что лучше многословнее, но однозначно. Вечная хуйня.
310 2804591
>>803416

>c 1978 никак до D не дойдут.


ле_маркетолог_фейс.жпег
311 2804595
>>804584
>>804586
да тут нет никакого разночтения
эти сахара однозначно читаются, тут дело скорее в том что ++ это самостоятельная инструкция вычисления, а паравозики присваиваний хороши только без вычислений

например
int a = b = c = d = 1;
это читабельный паравоз и все тут предсказуемо

int a = b = c = d = d + 1;
это читабельный паравоз с непредсказуемым результатом

у анона второй вариант и поидее надо просто поставить скобки для приоритета вычисления над присваиванием
int a = b = c = d = (d + 1);
ну или короткая запись
int a = b = c = (d++);

но конечно всегда лучше отдельно сделать инкремент, чтобы потом не дебажить свой говнокод
d++;
int a = b = c = d;
312 2804622
>>804595
я бы даже добавил что в языке конечно как бы и присутствуют постфиксные и префиксные операции как раз для разрешения таких вот случаев, но на практике префиксы я почти не вижу потому, что нахуя в голове хранить таблицу приоритетов, когда можно отдельной строкой двинуть счетчи или поинтер и не забивать голову всякой хуйней как скриптомакаки всякие
313 2804991
>>770768 (OP)
Все привет в этом чате. У меня проблема -- я тестировщик, которому временами нужно немного править с/c++ программы, в основном внутренний инструментарий конторы. Из всех знаний по оным языкам -- ОДНА прочитанная книга про С (синяя такая, не помню автора) в уневере, пару фэйловых попыток начать изучать c++ по белой книжке с волной (Страуструп). Могу дебажить код в gdb. знаю про valgrind и fuzzing. Короче анон, я тут что бы учиться программировать -- профессиональным разрабом я уже не стану может это к лучшему.
Спасибо за тред.
314 2805320
>>804991
Пупсик, вопрос то в чем?
315 2805346
Как у сишки с рабочей нагрузкой и зарплатами? На работе очень ебут, по сравнению с остальными языками? Платят лучше или примерно одинаково?
316 2805378
>>805346
зависит от того как ты себя продал
можешь в мыле ебашить за миску риса, а можешь и хуи пинать за наносеки
так что умение себя подать/продать не менее важная хуйня чем профскилы
317 2805436
>>805346
ну язык простой, поэтому мозгоебли почти не бывают
дают задание, пилишь его дня три, попивая кофеек офисный и заедая сибасом на обед
попердел пару дней в кресло, скидываешь работу на отдел тестирования и пошел на следующий круг
зп 240к
318 2805508
А на C есть что то вроде браузерной консоли как в жаваскрипте? Ну, если код на ходу нельзя менять без компиляции, то хотя бы чтобы можно было туда команды посылать и получать результаты выражений.
319 2805511
>>805508
бля ты чо не знаешь философию Си? если тебе нужен какой то велосипед - сделай его сам, хуйлан
320 2805523
>>805508
google plain c repl
321 2805531
>>805523
О, спасибо.

>>805511
Это я потом
322 2805641
О великие мастера C.
Я хочу разобраться.

Как мне сделать функцию, которую можно вызвать потом и она продолжится с того места где остановилась.

Единственное решение что я могу придумать - это извращения с конечными автоматами, типа:

void foo(fooCtx ctx){

switch(ctx.state){
case 1 : // чет на этот шаг
break;
case 2 : // чет на этот шаг
break;
case 3 : // чет на этот шаг
break;
}
}

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

Пожалуйста, поделитесь мудростью.
323 2805647
>>805641

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


Чигобля?
324 2805665
>>805647
Ну. Вот в шарпе, допустим, есть вот такая конструкция:

IEnumerable<int> GetInts(int count){
for(int i = 0; i < count; i++)
yield return i;
}

Ну так вот. Каждый раз, когда я буду обращаться к GetNext() - меня перебросит в метод GetInts и выполнение продолжится с того места где был прошлый yield return.

Т.е. я могу вот так вот сделать:

IEnumerable<object> DoSomething(){

var now = DateTime.Now;

while(now.AddSeconds(10) >= Datetime.Now)
{
yield return null;
}

// какой-то полезный код.

}

Ну а сверху я вот такие вот "подзадачи" где-то храню и обхожу. И все в одном потоке.

А вот как на си подобное сделать - я не понимаю.
324 2805665
>>805647
Ну. Вот в шарпе, допустим, есть вот такая конструкция:

IEnumerable<int> GetInts(int count){
for(int i = 0; i < count; i++)
yield return i;
}

Ну так вот. Каждый раз, когда я буду обращаться к GetNext() - меня перебросит в метод GetInts и выполнение продолжится с того места где был прошлый yield return.

Т.е. я могу вот так вот сделать:

IEnumerable<object> DoSomething(){

var now = DateTime.Now;

while(now.AddSeconds(10) >= Datetime.Now)
{
yield return null;
}

// какой-то полезный код.

}

Ну а сверху я вот такие вот "подзадачи" где-то храню и обхожу. И все в одном потоке.

А вот как на си подобное сделать - я не понимаю.
325 2805675
>>805647
Сишники прямо как скрипткидс https://en.cppreference.com/w/cpp/language/coroutines
326 2805676
>>805665

>А вот как на си подобное сделать - я не понимаю.


Никак, я такую шляпу первый раз вижу, пиздец шарподауны ебанулись. Сохраняй состояния, используй глобальные переменные.
327 2805681
>>805675
Так а нахуя это нужно то? Ебани потоков, нет говно какое то нужно в язык тянуть
328 2805686
>>805676

>глобальные переменные


ну точно скрипткидс
Эта хуита для конкурентности придумана, чтобы даже на одном ядре несколько задач выполнялись, хотя бы попеременно.
329 2805691
>>805686

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


Ты наверное pthread не осилил?
330 2805692
>>805686

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


Ты наверное pthread не осилил?
331 2805693
>>805681
Потоки не гарантируют, что задачи будут в один временной промежуток выполнены. У тебя может фактически в один момент одно ядро работать по разным системным причинам.
332 2805705
>>805693
В обще по хую, уноси свое не нужное
333 2805707
>>805693
Т.е с потоками основной примитив это pthread_join делать
334 2805708
>>805681
Ну. Я же написал. Вот у меня контролллер. Какой-нибудь дешевый китайский ARM.
В моем распоряжении только одно ядро.
Мне надо выполнять какие-то задачи. Собственно, какие-то задачи типа чтения с подключенных датчиков - могут долго выполнятся. А надо еще чтобы сверху кто-то подключился и забрал то что уже собрано.
Если программа будет ждать, пока с датчика не соберутся данные - она так и повиснуть может навечно, если это какой-нибудь датчик который отсылает данные снизу вверх при изменении значения.
А ведь работы много разной. Еще надо к какому-нибудь NTP серверу подключиться и часы подстраивать. Нужно проверять дискретные входы-выходы и фиксировать их состояние в журнал и т.д.
И хотелось бы, чтобы на одном потоке, чтобы 1. Не возиться с блокировками и прочим доступом к разделяемым ресурсам. 2. Чтобы у устройства ресурсы просто так не кушать.
335 2805716
>>805708

> Вот у меня контролллер


Ну так он прерывания дергает и прочая железячная специфика там, поток заснул и ждет пока его железо дернет, ты не туда копаешь короче.
336 2805717
>>805708

>Ну. Я же написал. Вот у меня контролллер. Какой-нибудь дешевый китайский ARM.


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


>Мне надо выполнять какие-то задачи.


Используй ассемблер, в частности инструкции SIMD(single instruction, multiple data). Не знаешь асм - копай в свойства компилятора, чтобы он задействовал simd инструкции, либо делай ассемблерные вставки в Си.
337 2805729
>>805716
>>805717
Чет я не уверен в этом всем.

Хотя я наверное придумал, как можно что-то похожее сделать.

Думаю организую EventLoop и на его базе вот такую логику построю.

Типа
// events.h

typedef void event_handler(void& context);

void event_enqueue(event_type e, event_handler& handler, void& context);
event event_dequeue();

& - указатели, я все еще не знаю как в макабе звоздочки ставить чтобы не курсивом выделялось.

и в основном приложении - буду их обрабатывать.

Просто громоздко как мне кажется получится. Но раз аноны которые за си шарят говорят, что просто продолжить с того места где остановился - нельзя, видимо только так.
338 2805733
>>805729
Возьми многороточную либу https://libuv.org/
Нода на ней работает, быдешь перед тянками хвастаться
339 2805737
>>805733
Та мне не перед тянками же хвастаться.
Просто я прикладной кококодер, которого перекинули на железячный проект, а там все на си и надо с нуля писать.
340 2805744
>>805729

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


Используй рекурсию. Это же очень похоже на рекурсию.
341 2805892
ля притащили какую то ебалу в тред
ну хочешь велосипедить ебани себе отдельным тредом прослушку сокета блять и дергай оттудова сигналы если стандартный механизм прерываний для тебя какая то хуйня
ну а так то аноны правы ты просто описываешь стандартные прерывания, ты чота делал хуяк сискол, твой процесс уснул и ждет когда его разбудят после сискола в этот момент врывается мамка одмина со своим жирным процессом и ты превращаешься в зомби
342 2805903
>>805665

>А вот как на си подобное сделать - я не понимаю.


Чего тут понимать, делаешь так же как в шарпе сделано. Изучаешь вопрос и делаешь. Ну или можешь подождать пока за тебя сделают какой-нибудь boost::yield. Удачи.

Видишь ли, у тебя концептуальная ошибка. Си это не абстрактный скрипт как шарп, где под капотом делают что угодно, Си это реальный язык железа, ассемблер. Пока в инструкциях процессора не появится твой yield, его не будет и в Си, не может быть. Всё остальное реализуется на Си, а не в Си, то есть ты либо реализуешь сам, либо ищешь уже написанную библиотеку.
343 2806016
>>805903
Так на ассемблере я бы просто положил в стек адрес следующей инструкции и нужные аргументы и сделал ret. А потом бы достал из стека следующую инструкцию заполнил регистры и продолжил бы с того места где остановился. Никаких проблем в ассемблере с этим нет.

А в си - я так просто это сделать не могу, как я понял.
344 2806028
>>806016
похоже на рекурсию
ебни асмовставки епта
345 2806042
>>806016
Ты не понимаешь как работает компьютер, железо, поэтолму не понимаешь акк работает си, потому что это одно и то же, а ты тупая скрипто-макака.

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

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


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

Ты сформулируй по-человечески то, что тебе нужно. Либо напиши алгоритм на псевдокоде, только так, чтобы мы все поняли, что этот твой алгоритм должен выполнять.
347 2806099
>>806060

>можно для этого создать массив


или статиком объйвить переменную
статики пробрасываются по уровням стека
348 2806134
>>806099
Можно и список создать, и дерево, тем более, если организовывать рекурсию, и неизвестно изначально сколько данных нужно хранить. Всё зависит от того, что ему нужно в итоге получить.
349 2806155
>>806134
да, увы, анон измельчал и не может даже сформулировать чо он хочет сделать, если уж человеки не понимают, то как машина может понять?

а вот такой вопрос у меня назрел
разве нет способа ретурна из макроса не используя глобалку?
ну если учитывать что int a = {printf("huy pizda"),3}; тут а будет 3, то оборачивая такую хуйню в макрос через оператор запятая у меня выходит только глобалку на место тройки подставлять, а без глобалки туда ретурн как то можно воткнуть?
350 2806179
>>806155
Ну, объявить макрос с параметром, а когда вызsвваешь макрос, то указываешь то, что нужно подставить на место этого параметра. Типа такого:

#define MACROS (VAR) \
a = {pprintf("huy pizda"),VAR};

Вызов макроса делается так:
MACROS(3);
351 2806194
>>806179
да ну не так топорно же
я хочу что то по типу
#define MACRO(var) {тут чота делаем,тут результат вычислений}

int a = MACRO(char); например

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

я вот спрашиваю есть ли вариант без глобалки такое провернуть?
ясен хуй это макрос не однострочный по типу
#define sum(a,b) (a+b)
а многострочный со своей там логикой вычислений и ветвлениями
352 2806209
>>806194
Анон, я тебе тут не помощник, потому что сам не особо шарю в макросах, но Столяров упоминал конструкцию с do {} while(условие) в теле макроса, возможно, это тебе поможет.
353 2806307
В шапке есть какие нибудь тестики чтобы проверить себя? Там напиши то-то или так то. У меня фантазии нет, только аутизм.

Ну и сразу же спрошу есть ли какой нибудь степ-бай-степ гайд по вкатингу. Самую основу уже выучил, синтаксис и типы даных, конвертеры всякие делал, рандом и базовый матан делал. Все на пару строчек но азы показало.
Дальше вроде бы надо про арреи и указатели, наверное.
354 2806325
Учусь в спираченом вижуал студио 22 года, немного перегружена но работает.
355 2806333
Ленивый залётный хуесос на связи. Подскажите, мне нужна хэш мапа. Мне надо самому искать код с функцией (не реализовывать же самому), делать с ним файл и это использовать или в дефолтной библе что-то?
356 2806334
>>806325
кодю в джини единственный недостаток - хоткеи только в энг раскладке работают
ебал в рот эти студии с велосипедами из говна, то блять она не знает чо такое джава хотя секунду назад знала, то нахуй кнопка компила пропала и хуй ее назад поставишь ай билять как же сука я заебался с этим всем

мечтаю завязать лайтовый тулчейн из текстовиа шелскриптов и консольки в одной хуйне, большего то и не надо
357 2806342
>>806333
upd: может не так выразился. Банальный словарь, где ключом будет восьмибитный число (0b00000001 например), а значение - строка. У вас такое есть?
358 2806353
>>806342
у кого у вас то? ты тут один все написано на си блять, ищи решение на стаке
359 2806358
>>806353
"У вас" имелось в виду из коробки. Ладно, понял, пошёл искать.
360 2806364
>>806358
ну ты не дал длину строки так что я затрудняюсь сказать есть ли такое изкаробки
но если строка коротенькая и убирается например в 8 байт тогда твоя хэш мапа это просто массив дщнгов или даблов, как хочешь
если строки произвольного размера тогда я бы юзнул массив поинтеров на строки, но тогда ты либо юзаешь однобайтный ключ как индекс массива, либо восьмибайтный как адрес строчки, но строчки будут произвольно длинны
361 2806366
>>806364

>дщнгов


лонгов
быстрофикс
362 2806371
>>806364
Это будет алфавит. Я перепутал,
ключ - char ('a', 'b', etc),
значение - числа (0b00000001, 0b00000010 etc).
363 2806372
>>806371
ассоциативные массивы в простонародье
я всегда обхожу эту тему стороной, но вроде изкаробки есть
я просто не понимаю практического применения
какой даун будет вытаскивать число через строковые ключи, когда есть например перечисления с нормальным синтаксисом?
364 2806375
>>806371
upd:
строки это числа - можешь в эту сторону подумать и понять что это снова обычный массив получается
365 2806380
>>806372
Ну смотри. Я ебусь с МК и лсд дисплеем. В дисплей, если по простому, данные записываются передачей определённых чисел. Я передаю один uint8, который обозначает определённый char в дисплее, и дисплей отрисовывает этот char.
Я хочу сделать словарь/ассоциативный массив/похуй что, что даст возможность получать по ключу значение (тот самый uint8), что бы передавать в функцию строку, а функция будет бежать по этой строке и по значению знака доставать из словаря значение для отправки в дисплей. Вот такое хочу сделать.
366 2806389
>>806380
да делай, флаг тебе в руки
повторяю, буковки это числа, вообще все это числа, это просто биты, а как ты их декодируешь дело десятое
например

int a[100] = {0};
a[97] = 1;
if( a['a'] ) printf("huy pizda");

все работает потому что 'a' = 97 побитовое представление сам вычислишь если тебе надо.
367 2806398
>>806389
Вроде понял. Благодарю.
368 2806515
>>805708
Polling
Gnillop
369 2806526
>>806325

>немного перегружена


>немного


Ты еще говноподелия от ДжетБрейнса не видел, вот там пиздец адов
370 2806728
Недавно наткнулся на Zig и ахуел:
- Легкий в понимании и с современным синтаксисом
- Структуры с функциями больше никакого дроча с организацией кода/объектов/мимикрированием под ооп
- Ошибка как возвращаемое значение никаких непонятных стактрейсов, точно видно что и где упало
- Comptime - настоящий убийца препроцессора и то, как должно было выглядеть развитие препроцесооров
- Есть асинхронщина из коробки, не привязанная к имплементациям ОС
- Встроенное тестирование ждал хоть какого то адекватного тестинга пож системщину джва года
- Своя кросс-билд система пока make, cmake, пакетный менеджер уже пилится
- Встраивается в сишный код хоть сейчас начинай частями переписывать свою байтоёбщину
И много чего еще.

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

Или я просто поддался хайпу?
371 2806731
>>806526
Я видел, WebStorm, иде-шка для javascript. Сначала кринжанул с уродливого мыльного ненативного васянского гуя с инопланетным устройством и кравиатурными комбинациями для алиенов, после аккуратной красивой студии реально противно. Но потом посмотрел на vscode и увидел то же самое, только намного хуже, и главное функционально нихуя не работает, а WebStorm анализирует любой файл и тут же выводит структуру, подсказки, всё на свете. А потом открыл в нём страницу от гугла с мегабайтами обфусцированной жс-портянки и WebStorm тут же всё отформатировал, буквально мгновенно и можно тут же скроллить и смотреть, без лагов даже (хотя проц в фоне пердит). Итого, совершенно волшебное чудо, летает как ракета, и работает как никто другой. Единственная придирка - мыльные шрифты, ну стандартная линупсо-эппло-гейпараша сделанная с расчетом на 4к мониторы, а на меньшее плевали.
372 2806736
>>806372

> ассоциативные массивы в простонародье


> я просто не понимаю практического применения


например, у тебя есть игра, в ней есть монстры, которые имеют id и оно как раз будет строкой, т.к. ты не можешь заменить его числом, потому что если пилить на такую игру еще и моды, то там такой ад начнется, поэтому используют id строковые, бывает как просто имя того самого монстра типа "red_dragon"
373 2806737
>>806728

> Как бородатые байтоёбы на это смотрят, что говорят?


Да, лучше, но долго будет отвоевывать себе пространство
Опять же уже есть готовый rust, который уже давно готов и уже отвоевал себе часть ниши, поэтому зигу будет еще сложнее
374 2806738
>>806728

>только без боли и с нужными вещами


зигодоун спокундрий, если у тебя жопа болит от сишки пиши на питухоне
375 2806739
>>806736

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


окей зумер
376 2806761
>>806731

>всё отформатировал


Все что угодно может форматировать код, всегда эту залупу отключаю.

>vscode


В 100 раз лучше ДжетБрейновского говна
377 2806775
>>806736
Зачем строкой, есть же GUID, это обычное целое беззнаковое число, только 128‐битное. Уникальность гарантирована, причём так, чтобы пересчитать все атомы во вселенной.
378 2806782
>>806761

>>vscode


>В 100 раз лучше ДжетБрейновского говна


А теперь пруфани. Как в vscode сделать для html файла со свтроенным javascript: автоформат текста, intellisense, всплывающую справку по всем функциям, анализ кода с сообщениями где не так. Со скриншотами, а лучше видео или анимашку.

В WebStorm всё из коробки работает, а в твоём "в 100 раз лучше" что? Нинужно? Пук? Спасибо за внимание.
379 2806786
>>806728
У тебя подход неверный! Циг хорош, но чтобы его по достоинству оценить, ты должен столкнуться с проблемами в системном программировании, которых лишён этот самый циг. Это как после кодинга на асме ты пересаживаешься на Си и ощущаешь всю мощь и изящество Си, ведь, по сути его и создавали для того, чтобы не кодить огромные системы (UNIX) на асме.
С цигом и растом та же ситуация - если ты не пердолился с проблемами, которые возникают при кодинге на Си и плюсах, то как ты поймёшь весь "кайф" кодинга на языках, которые призваны решить проблемы Си и плюсов?
380 2806794
>>806526
Видел, там еще хуже. Поэтому плюнул сразу же как увидел что его рекомендуют. Дауны спецом газлайтят я клянусь.
381 2806796
>>806782

>javascript


у вас вроде был отдельный топик, что вы тут делаете со своими языками сценариев для покраски кнопочек?
382 2806914
>>806782

>для html файла со свтроенным javascript


Ебать ты поехавший. Сам ищи, плагин какой нибудь для VS нужен
383 2807210
>>806914
Ну вот видишь, говно твой vscode.
Если честно, я его пробовал только за название, думал будет выглядеть как студия, а оказалась та же самая страшенная вебня как и жидбрейны. Только у тех оно хотя бы работает, а это даже не работает. Вот и всё.
384 2807221
>>806914
И касательно цитаты, я открывал и чистые жс-файлы (плагин для обсидиана) и тоже всё мертво, тупо блокнот голый, ни та что не реагирует, хотя плагин вроде установил этот линтер-хуинтер, но толку ноль. Зато предложил копилот, а потом гордо отрепортил что рахам не положено, мусорное дерьмо.
385 2807232
>>807210
Работает. Просто ты не сумел настроить.
Тебе нужно поставить несколько плюйгинов:
C/C++ раскрасит весь сикод и позволит отлаживать программы, устанавливать точки останова мышкой
Hex Editor — чтобы смотреть бинарные дампы
Makefile Tools — чтобы собирать проекты утилиткой make
Memory View — чтобы смотреть память программы
image.png13 Кб, 438x199
386 2807234
Недавно начал изучать Си, и у меня встал вопрос по возвращению массива, так вот, в чём разница между обычный массивом и указателем на пике?
387 2807235
>>807232

>Hex Editor — чтобы смотреть бинарные дампы


мне проще делать objdump > dump.txt

>Memory View — чтобы смотреть память программы


а это нахуя?
мимо
388 2807236
>>807234
в том что массив хоть и использует механизм указателей сам таковым не является (почти цитата из K&R)
389 2807238
>>807235

>мне проще делать objdump > dump.txt


Чтобы во время отладки можно было навести мышку на переменную или указатель и во всплывающей подсказке увидеть её содержимое.

>Memory View — а это нахуя?


Чтбы смотреть память по адресу прямо во время отладки. Например, что функции в стэк кладут.
390 2807242
>>807238
для этого я использую макросы на дебаг которые срут в консольку этими данными прям в рантайме
щас бы 500 приложений в тулчейне иметь чтобы обойти стандартный притф(интересующая хуйня)
391 2807251
>>807232
Так он ЖС ковыряет, а плугин на ВС не додумался поискать
392 2807258
>>807242

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


О вкусах говна не спорят, но иногда приятно ебануть бряк и через мышку посмотреть, а макросопердолинг это такое.
393 2807259
>>807242
Мало того, что это засорение кода, которое требует перекомпиляции на каждый чих, так ещё и не выводит всю структуру целиком, а только отдельные переменные или поля. О выводе стека вызовов остаётся только мечтать.
Ну и макросы эти не работают в ситуации когда нужно отловить изменение памяти по адресу (поставить точку остановка).
394 2807267
>>807259
Ну а чо, заебись, на моей старой пеке v8 5 часов собирается, как раз 2 макроса можно за день вставлять.
395 2807268
>>807259
так я микросервисное пишу у меня компил 0 наносек
о выводе изменений не понял тебя и про стуктуру то же непонял
может ты не знаешь как макросы работают? там для дебага достаточно вставок, в том числе имена полей, имена функций в которых крутишься
я еще таймштампы запилил простенькие чтобы чекать профайлинг без профайлинга

кароч чо я тут с вами вожусь, ковыряйте мышкой, я так то не против
396 2807274
>>807267
работать не пробовал?
397 2807276
>>807274
Пробовал, мне не понравилось. Пилю свои проджекты.
398 2807497
Епты, какие макросы? Какие плагины? gdb и тысячи оберток для него для кого придуманы?
399 2807528
>>807268

>о выводе изменений не понял тебя


Кто‐то или что‐то записал в память по адресу. В этот момент нужно чтобы программа остановилась. Я хочу знать какая функция это сделала, распечатать стек вызовов, посмотреть регистры процессора и всё такое прочее.

>про стуктуру то же непонял


struct student {
char firstName[50];
char lastName[50];
};
struct student s;

Не работает:
printf("%s", s);

А в отладчике print s работает.
400 2807530
>>807497
Одна из этих обёрток называется VSCode + C:\>C++. Всё нормально с плюйгинами.
image.png407 Кб, 1024x850
401 2807537
>>807530

>C:\>C++

image.png85 Кб, 300x168
402 2807546
>>807528

>Не работает:


>printf("%s", s);


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

>Я хочу знать какая функция это сделала, распечатать стек вызовов, посмотреть регистры процессора и всё такое прочее.


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

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

посерьезнее будь
404 2807580
>>807558
Чёт не понял. Каким образом возможность отладчика распечатать все поля структуры одной инструкцией print s говорит об архитектуре программы?
405 2807583
>>807580
об архитектуре программы говорит то что ты вынужден смотреть колбэк всех хуйней на стеке и пырить на регистры в поиске виновника которы поменял поля твоей структуры, чо ты тупишь то ептубля, уже на пальцах приходитсся пояснять
406 2807595
>>806786

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


Пердолился. Жаль, что тогда я думал СЛОЖНА ЗНАЧИТ КРУТА, пиздец.

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


Именно в этом я и пытался хоть что то делать, правда под винду. Дрочил на чистый си и чистую сборку + winapi, в итоге ахуел какое это говно.

>>806737

>Опять же уже есть готовый rust, который уже давно готов


Уже подумывал на него пересесть, стоит ли обмазываться? Хочу его пощупать тк для фронта то же хорош благодоря билд тулам и wasm

>>806738
СЛОЖНА ЗНАЧИТ КРУТА, ДВУРУЧНИК ДЛЯ ГОСПОД, МАГ ДЛЯ ЛОХОВ
407 2807596
>>807595

>СЛОЖНА ЗНАЧИТ КРУТА


попробуй скратч, говорят он попроще
408 2807603
>>807595

> хоть что то делать


Что именно? Хотел прикрутить пару кнопок на WinApi?
409 2807624
>>807603
Сделал оконное приложенире со всеми необходимыми внутренностями + не мало контьролов + запросы к wmi
410 2807657
>>807595

>огда я думал СЛОЖНА ЗНАЧИТ КРУТА, пиздец.


>СЛОЖНА ЗНАЧИТ КРУТА, ДВУРУЧНИК ДЛЯ ГОСПОД, МАГ ДЛЯ ЛОХОВ


Лол, что сложного в Си?
411 2807662
>>807657
Пардон, имел в виду не сам язык а структуру проекта/кода из за блядского винапи
412 2807663
>>807662
выходит я зря тебя обсирал, полагая что ты очередная формошлепная скриптомакака не осилившая простейший лоулевл язык? вот ты черт, больше так не делай
413 2807674
>>807657
Simple != Easy
414 2807683
>>807657

>Лол, что сложного в Си?


Всё сложно. Сам язык простой, но он в таком виде бесполезен. Для использования Си надо знать железо и ОС, вот тут-то и возникает сложность, макаки этого не знают, ведь макакины языки это всё магия, там знать ничего не нужно кроме самого языка, а в Си наоюорот, абсолютная необходимость знать то, чего макаки не знают, это непреодолимая сложность для них.
415 2807689
416 2807694
>>807583
Мне, в отличие от тебя, хотя бы не нужно ни исходный код программы править, ни перекомпилировать, ни возиться с макросами и фпринтфами, чтобы посмотреть происходящее в реальном времени.
417 2807739
>>807583

>нинужно


Нужно, нужно.
https://www.youtube.com/watch?v=XTZVbmz7LpY
418 2807956
>>807694
мне не нужно смотреть происходящее в реальном времени ведь я полностью контролирую процесс лол
>>807739
я не буду смотреть, плюсы - говно, давно известный факт
419 2808212
>>807674
Так сишка и простая и легкая.

>>807683

>сё сложно. Сам язык простой, но он в таком виде бесполезен.


Ну т.е. происходит подмена сложности предметной области на сложность языка. Если заменить Си на язык Х, то нихуя в общем-то не изменится.
420 2808242
>>808212
ну ващет изменится
перестанешь контролировать срачь на стеке и череду взаимных колбеков конструкторов вызывающих самих себя
но это я щитаю идет ноздря в ноздрю с изменением предметной области как раз таки, то бишь поменял сишку на ооп - сменилась предметная область с ручника на автомат, появились волшебные блобы хуйни в хуйне и все в таком роде
мимодругой анон
421 2808509
>>807956
Так у тебя программы уровня «лабораторная работа первого семестра», там и контролировать нечего, вся программа в одной main умещается.
422 2808570
>>808212
Всё изменится, ты проигнорировал сказанное про магию, а это принципиальная разница, как между черным и белым, небом и землей.

И про предметную область ты чушь спорол. Компьютер и ОС не являются предметной областью, это такой же инструмент как язык. Но в макакиных языках нет компьютера и ОС, ибо они работают в своей виртуалке, которая черный ящик, - магия не доступная и не предназначенная для изучения программистом. А на Си машина реальна и обязательна к изучению, иначе ничего не напишешь кроме бесполезного хеллоуворлда.
423 2808603
>>808509
у теб вообще программы нет лол
424 2808895
Парни, не скатывайте этот тред, пожалуйста, как асм тред в споры о хуй пойми о чём.
425 2808930
>>808895
А чем еще тут заниматься? Решать коней в вакууме с литкода что ли?
426 2808999
>>808930
Та я же не призываю совсем не спорить, просто не хочется, чтобы и этот тред скатился в бесконечный спор о хуй пойми о чём.
427 2809456
>>806775

> Зачем строкой, есть же GUID, это обычное целое беззнаковое число, только 128‐битное. Уникальность гарантирована, причём так, чтобы пересчитать все атомы во вселенной.


потому что в модах id чего-либо приходится часто использовать в скриптах, поэтому его и делают строкой с неймспейсом мода, чтобы убрать коллизии лишние
428 2810080
>>804291
Так поэтому я и топлю за изучение Си в любом случае, чтоб не было потом на плюсах

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


а было pravilno. Живых продуктов с вакансиями на Си может быть не так много, зато есть на плюсах, и есть такие, где в команде правильные традиции.
429 2810107
Да, я вижу, что и там и там int! Я просто подумал, что мб ты сам додумаешься, что нужно просто расширить до ансайнед лонга, чтобы проверить теорию о SIMD инструкции, но не судьба, поэтому подсказка: расширь до ансайнед лонга и проверь
430 2810505
Что вообще такое «учить си»? Весь язык из 30 ключевых слов состоит, что там учить‐то. За пять минут весь язык можно выучить.
431 2810519
>>810505
Си это мем. Сюда приходят всякие макаки пишущие на питоне и тому подобном, чтобы "приобщиться". Короче, попиздеть и повесить себе лапшу на уши, что они теперь не совсем опущи. А более честные себе не изменяют и просто заходят написать "си нинужон".
432 2810550
>>810505
попробуй линуксовые программы на Си поддерживать
433 2810662
>>810505
Ну чота никто в треди так и не выучил его. Многие сдались и теперь убеждают себя что это не они лошки подзаборные, а это "си нинужон".
434 2810671
>>807739
Успокойте меня что такая черная магия на самом деле используется лишь в 5% проектов на сишке и что на реальной работе будет намного проще. Иначе я хуй знает смогу ли я вообще ВКАТ
435 2810686
А вообще я уже понял что нужно смотреть как другие делают и повторять как макака пока не поймешь самостоятельно как это работает. Так решая простые задачки я иногда видел имплементации о который я просто физически не знал и знать не мог.
436 2810762
>>810671
Это развод чтобы набрать классы. В реальности на галере ты 100% времени говнокодишь хуету чтобы успеть сдать ее вчера. Набравшись опыта ты становишься синьйором помидором и твоя задача перелопатить навермишеленный до тебя говнокод во что то приемлемое. Видиво не смотред, мне похуй.
437 2810987
>>810762

>навермишеленный до тебя говнокод


навермишеленный тобой говнокод пока ты становился синьором
а потом приходит озарение "итак сойдет"
438 2811047
Вопрос от полного нуба в С. (чат гпт не помогает). Есть два кода и они работают по разному (один просто проверка ифами, другой - цикл с функцией и шаблонами). Почему так?
первый

if (temp_data & 0b10000000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b01000000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00100000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00010000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00001000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00000100) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00000010) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00000001) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

второй
#define REGISTER_DATA_0 REGISTER_PORT &= ~(1 << DS)
#define REGISTER_DATA_1 REGISTER_PORT |= (1 << DS)

#define REGISTER_SHIFT_CLOCK_0 REGISTER_PORT &= ~(1 << SH_CP)
#define REGISTER_SHIFT_CLOCK_1 REGISTER_PORT |= (1 << SH_CP)

void push_bit(int type) {
if (type) {
REGISTER_DATA_1;
}
else {
REGISTER_DATA_0;
}
REGISTER_SHIFT_CLOCK_1;
REGISTER_SHIFT_CLOCK_0;
}

unsigned int mask;

for (mask = 0x80; mask >= 0x1; mask >>= 1) {
push_bit(temp_data & mask);
}
438 2811047
Вопрос от полного нуба в С. (чат гпт не помогает). Есть два кода и они работают по разному (один просто проверка ифами, другой - цикл с функцией и шаблонами). Почему так?
первый

if (temp_data & 0b10000000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b01000000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00100000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00010000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00001000) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00000100) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00000010) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

REGISTER_PORT |= (1 << SH_CP); // SH_CP 1
REGISTER_PORT &= ~(1 << SH_CP); // SH_CP 0

if (temp_data & 0b00000001) {
REGISTER_PORT |= (1 << DS);
}
else {
REGISTER_PORT &= ~(1 << DS);
}

второй
#define REGISTER_DATA_0 REGISTER_PORT &= ~(1 << DS)
#define REGISTER_DATA_1 REGISTER_PORT |= (1 << DS)

#define REGISTER_SHIFT_CLOCK_0 REGISTER_PORT &= ~(1 << SH_CP)
#define REGISTER_SHIFT_CLOCK_1 REGISTER_PORT |= (1 << SH_CP)

void push_bit(int type) {
if (type) {
REGISTER_DATA_1;
}
else {
REGISTER_DATA_0;
}
REGISTER_SHIFT_CLOCK_1;
REGISTER_SHIFT_CLOCK_0;
}

unsigned int mask;

for (mask = 0x80; mask >= 0x1; mask >>= 1) {
push_bit(temp_data & mask);
}
439 2811055
>>810987
Ну это если ты в той же галере и на том же проекте доперделся до сеньера. Сам понимаешь что это уровень фантастики.
440 2811060
>>811047
Почему так что? Не вайпай тред.
441 2811070
>>811060
Почему я не могу заменить одну реализацию другой и что бы всё работало так же?
442 2811076
>>811070
Полагаю сепарация условий не совпадает. А ты сам то как думаешь? В первом варианте твои ифы чекают одни данные, во втором другие, так схерали эти два куска должны делать одно и то же?
443 2811085
>>811076
Почему другие? temp_data одна, или ты имеешь ввиду
mask != 0b10000000 (etc)?
444 2811093
>>811085

>Почему другие?


Автора кодов надо спросить почему. Чекай ифы. Пока не прочекаешь спать не ляжешь!
445 2811110
>>811093
Реально, я слепой далбоёб. На последней итерации мы не "хлопаем" защёлкой. Благодарю.
446 2811122
>>811070
У тебя везде пидерское сравнение в ифах по типу
if (temp_data & 0b00000001)
Если твое темпдата будет 0b11111111 то оно проскочит, нужно сравнивать
if ((temp_data & 0b00000001) == 0b00000001)
С радача пришел?
447 2811128
>>811122
Ну там и "шаблоны" кривенькие. Для перегруза есть макро ## склейка.
448 2811135
>>811122
А вот кстати философский вопрос. Что быстрее?
if( вычисляемое == невычисляемое )
if( невычисляемое == вычисляемое )
449 2811136
>>811122

>С радача пришел?


Yep. Ну сейчас вроде начинает что-то получатся. Это я эти ифы переписал в функцию и перестало всё работать, а оказывается я не заметил, что в конце происходит.
>>811128
Ну шаблонами только учусь пользоваться, увидел в видео, понравилось, что меньше простыни в функциях получается.
450 2811143
>>811135
Кокая разница?
451 2811149
>>811143
Вот я это и спрашиваю собсна.
452 2811168

>int должен быть не меньше 2х байт.


снится по ночам, как ваш код собрали компилятором, который 2 байта только предоставляет?
453 2811176
>>811168
Ничо страшного, обрастет ифдефами как взрослый кроссплатформенный мальчуган.
454 2811207
>>810762
Я еще не умею быстро...
455 2811222
как же надоело эти ошибки хэндлить
выделение памяти - хэндли нульпоинтеры, разбираешь JSON - чекай типы и проверяй отсутвие нужных структур, как вы с этим миритесь?
456 2811229
>>811222
еще бесит андефайнед символы, приходится хэндлить отсутствующие переменные
457 2811231
Подскажите а в С++ тоже нужно хуячить как можно более изотерический неподдерживаемый код только для того чтобы тебя не могли больше никем заменить, потому что никто нихуя в нем не понимает?
458 2811241
>>811231
В плюсах надо СТЛ переписывать каждый поенедельник, иначе никруто.
459 2811663
>>811222
А если выделение памяти завершится неудачей? Предлагаешь не проверять такую ситуацию? Кто должен отвечать за это?
460 2811906
А если я пройду 30 часовой курс с ютуба я могу сразу на миддла идти? Рабочего опыта разумеется нихуя.
461 2811932
>>811906
Можешь сразу нахуй идти.
462 2811982
>>811932
Кабан, спок
16924764309240.mp4315 Кб, mp4,
360x202, 0:06
463 2812474
464 2812748
Сишка умирает? Даже треды подохли. Мертвый не нужный язык.
465 2812749
Хочу написать p2p ботнет. Где можно посмотреть, как реализуется кастомный протокол поверх tcp/udp?
466 2812757
>>812749
Чо значит поверх? Ты хочешь кастомный транспортный протокол, или кастомный какой? Кастомный межсетевой, кастомный канальный?
467 2812773
>>812748
Продолжай себя утешать.
468 2812781
>>812749
По сути весь сетевой стек так или иначе кастомный. Гугли RFC декларации интересующих тебя протоколов и все увидишь. Можешь по такому же принципу предложить очередной кастомный транспортник, главное задекларировать описание по общепринятому шаблону request for comments (RFC).
469 2812828
>>812757
Ну хочу написать протокол, по которому боты будут обмениваться командами и выполнять их. Возможно, какой-то паттерн проектирования понадобится, пока не уверен. Пока думаю над двумя частями бота: протокол обмена сообщениями и исполнитель, который выполняет полученные команды. Есть примеры такого?
470 2812832
>>812828
Пример чего именно? Любой транслятор ЯП пример трансляции байтиков команд в реальное исполнение этих команд. А процессы между собой обмениваются всем известным способом - шлют байты в сокетфайл и из него читают соответственно. Кодируй этот поток как душе угодно, ты же потом раскодировать будешь.
471 2812947

>>2812926


Это сокращение от европейские геи.
472 2813079
Вопрос от нуба. Подскажите по IDE, чем пользоваться? Я пока начинаю и пишу в редакторе протеуса неудобно, пиздец, но и код я пишу не сложный. Если я установлю avr studio и подключу какую-то библу в файл, у меня будет автокомплит всего того, что есть в библе? Алсо, вс код даст всю функциональность?
473 2813091
>>813079
VSCode + PlatformIO. Если микрухи прошиваешь. Ничего удобнее не придумали пока что.
474 2813115
>>813079
Я продолжительное время юзал эклипс. Отличная тачка, только надо настройки проковырять чтобы поехала.
475 2813117
Жипити и живой пример на сайте решают одну и ту же проблему совсем по разному. Живой пример нагородил ифов и скобочек а жипити как то умудрилась без ифов
Оба варианта работают по разному тоже.
476 2813138
>>813091
>>813115
Буду вскод пробовать, там вроде меньше настраивать надо.
Снимок экрана 2023-08-20 в 19.50.43.png28 Кб, 138x138
477 2813163
>>813079
Ща кодю в джини. Потихоньку пишу свой джини с блекджеком и воркспейсами.
478 2813192
>>813117
Учи алгоритмы, дискретную математику, устройство и принцип работы компьютера и будет тебе счастье. Ты же в треде Си, в конце концов!!!
479 2813234
>>813192
Но я на крестах...
480 2813247
>>813234

>я на крестах...


Как откинешься, тогда и приступай к изучению того, что я перечислил, и тогда ты будешь нагибать гопоту.
481 2813386
>>804550

>int y = x++;


Тут сперва присваивание, а затем прибавление единицы. То есть, сперва вставляется сам x, и как бы на след. строке x = x + 1

>int y = ++x;


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

>x = x + 1;


>int y = x;

482 2813485
>>804550

>Почему так?


Если ты задиссассемблишь эту операцию, то увидишь, что первым делом переменная по адресу икса копируется в регистр (допустим, rax), потом по адресу этой переменной к ней прибавляется единица, а уже после этих действий идёт копирование значения из регистра rax по адресу игрек, т.е. идёт присваивание предыдущего значения икса игреку.
Совет на будущее: Если что-то ломает голову в Си, то дизассембли, для этого, конечно, нужно уметь читать код на асме и пользоваться дизассемблерами типа edb, radare2 (c GUI Cutter), ida, etc.
483 2813489
>>813485
Для одной операции это выглядит нелогично, но, если ты устраиваешь цикл:
for(int i = 0; i < n; i++) {
что-то происходит
с присваиванием
i другим переменым
}


То тут и становится ясным для чего нужон этот выверт - для того, чтобы переменная i присваивалась чему-то начиная с нуля, т.е. с самого первого её значения.
484 2813491
>>813485
gcc -s
всем доступный дизасемблер
485 2813500
>>813491
Можно и в гдб задиссассемблить, но, если тебе нужно задисассемблить большую и непонятную ф-цию, то тут лучше пройтись по шагам и понять, что она делает, иначе, просто читая дизассемблерный код, можно лишь сильнее запутаться. Так что лучше сразу юзать мощные инструменты, дизассембля простенькие ф-ции, постепенно усложняя себе задачу.
486 2813502
>>813500
ты сам себе противорчечишь

>если большая функция - запутаешься


>поэтому юзай мощный дизасембл для маленьких



на деле дизасембл вообще не особо то и нужный инструмент, если только ты не реверс инженер
все вопросы по нюансам сишного сахара разжевываются пока усваиваешь базу, в дальнейшем уже нет вопросов почему так нахуй, база усвоена
487 2813510
>>813502
Ладно, убедил! Действительно, для базы можно и без мощных инструментов обойтись.
488 2813550
>>813510
Можно но нужно ли? Может лучше сходу в воду? С прыжка в огонька? На коня с разбегу?
489 2813556
>>813550
Тогда бы первой программой в учебнике была бы тредсейв пир ту пир ботнет срущий хеловоррлдами.
490 2813562
>>813550
Ну, давай исходить из того, что всё зависит от источника, из которого ты черпаешь знания по языку Си, если в этом источнике тебе разжевали, почему в той или иной операции получается то, что получается, то, следовательно, не надо; если после получения инфы из твоего источника у тебя остаются вопросы, то ты можешь обратиться к другому источнику, но есть вероятность, что и там ты не найдёшь ответ на тот вопрос, который витает в твоей голове, следовательно, в этой ситуации проще самому исследовать операцию, чем перелопачивать тырнет в поисках нужной тебе информации.
491 2813598
>>813562
Ну вот я смотрю докумнтацию на сайте а там в примере вот такая хуйня

for (const char* str: {" #1 test", "\t #2 test", "#3 test"})
{
std::string line;
std::getline(std::istringstream{str}, line);
std::cout << "getline returns:\t" << quoted(line) << '\n';

std::istringstream iss{str};
std::getline(iss >> std::ws, line);
std::cout << "ws + getline returns:\t" << quoted(line) << '\n';

Вроде и несложно и по отдельности все понятно но как же это блядь сложно читать. Мне потребовалось несколько минут только чтобы прочитать и понять что оно нахуй делает, хотя по отдельности каждая строчка проста и понятна.
Да и вообще эта документация параша какая то, перемудрили до пизды.
492 2813600
Аноны, подскажите, как мне лучше поступить? Цель: у меня есть исполняемый файл (программа написанная на Си), и я хочу написать программу, в которой я хочу организовать цикл, в котором должен запускаться этот исполняемый файл энтое кол-во раз, а результат его исполнения складывать в другой файл. Что-то не могу найти инфу о работе с исполняемыми файлами.
493 2813604
>>813598

>Да и вообще эта документация параша какая то, перемудрили до пизды.


следствие парашности плюсов
страуструпа то же никто не читает за его душку
494 2813607
>>813598
Я эти ваши плюсы чёт совсем не понимаю. Обычно тут может помочь какой-нибудь дебагер, чтобы можно было бы пройтись по шагам.
495 2813614
>>813600
Я кажись понял!! Можно же открыть файл на запись и организовать цикл, который будет складывать результат в открытый на запись файл.
496 2813617
>>813600
Линух?
Гугли системный вызов execl()
497 2813624
>>813617

>Линух?


Ага

>Гугли системный вызов execl()


Спасибо!
498 2813651
Я смогу пройти собеседование если у меня есть 10 лет опыта в торговле, серебрянный язык способный уговорить сердитого отца отдать мне его девственную дочь и харизма чтобы управлять десятками людей но нет реального опыта в кодинге?
499 2813657
>>813651

>отдать мне его девственную дочь


Всё зависит от возраста этой его дочери, от положения этого её отца в обществе и от взглядов этой их семьи. Если батя какой-то большой чин в силовых структурах, придерживающийся крайне традиционных ценностей, заставляющий свои семью придерживаться этих же ценностей, и этой его дочери было от 12-15 лет, и он знал, что ты мерзкий педофил, но, несмотря на это, ты его уболтал отдать её тебе, то, получается, что ты совершил чудо, а потому ты можешь рассчитывать на что-то более крутое, чем просто формошлёп без опыта.
500 2813701
>>813657

>крайне традиционных ценностей


>дочери было от 12-15 лет


Ну так все ж довольно традиционно. Иногда и в 11 уже в брак отдавали.
501 2813745
>>813701

>Ну так все ж довольно традиционно.


Ты там из средневековья капчуешь, что ли? Сейчас 21-й век и человек до 18-ти это ещё жеребёнок, да с учётом глобальной инфантильности и обилия всего того, что нужно изучить, чтобы голова встала на место и начала думать в правильном направлении, то человек до 25-ти является ещё жеребёнком (но это уже будут традиции 22-го века).
502 2813776
>>813745
У людей в головах все еще мозги средневековья, да, ты как погромист должен знать.
503 2813804
>>813776
Не, ну, если так рассуждать, то можно дойти и до того, что люди ещё недалеко ушли от обезьян. Поэтому, чтобы не возникало такого спора, я и указал одним из условий - положение бати в обществе, ибо, с большой долей вероятности можно утверждать, если её батя достиг большого чина в силовых структурах, то это делает его как минимум очень дисциплинированным и волевым человеком. Дисциплина и воля это есть два качества сознания, т.е. это говорит о том, что батя живёт не инстинктами, а рассудком, а раз так, то, если он придерживается крайне традиционных ценностей (ходить в церковь, любить женщину, гнобить пидоров, соблюдение законов, и как следствие секс и алкоголь только после 18), то однажды вбив в свой рассудок эти самые традиционные ценности, он от них не откажется, ибо железная воля и дисциплина.
Короче, ты прекрасно понимаешь о чём я, просто строишь из себя дурачка.
16925401679310.png478 Кб, 735x488
504 2813928
Не забудьте в шапку перекатного треда влепить двачезвезды ⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹

Вот отсыпал вам нимножка.
505 2813977
>>813804

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


Чет захихикал с рассуждений домашней корзинки.
506 2814019
Аноны, подскажите

char c = 5;
printf("%d", c);

Это UB?
507 2814026
>>813977
Мань, я понимаю, что ты хочешь мне сказать, что есть чины, которые совсем не дисциплинированные и не волевые, и которые просто по блату попали на эту должность, являясь людьми безвольными. Конечно, я с тобой полностью согласен, что есть и такие чины, но этих людей нельзя считать людьми, которые придерживаются крайне традиционных ценностей, ибо они и не против гомосятины, возможно, что и любят это дело, они и не против с детьми, ибо есть и деньги и власть, они и с кайфом торчат на тяжёлых наркотиках, и перечислять их огрехи и слабости можно до бесконечности. Но я же не просто так ввёл условие о том, что этот батя должен быть крайне традиционных ценностей, просто потому что, когда ты живёшь в мире полном соблазнов, и когда у тебя есть и деньги и власть, то, чтобы придерживаться крайне традиционных ценностей, нужно обладать нехилыми яйцами и сильным и здравым рассудком, чтобы не попасть под влияние этих самых соблазнов. А таких людей немало в силовых структурах, и они как правило все дисциплинированные и волевые. Это как раз те люди, благодаря которым нас до сих пор не завоевали хохлы.
Ты же программист, почему ты не можешь читать условие задачи?
508 2814034
>>814019
Что за UB? Вообще-то он тебе выведет 5.
509 2814039
>>814034
Ну компилятор же не знает, что мне нужно преобразовать char в int. Поэтому в аргументах физически лежит char. А как он лежит уже зависит от реализации. Значит, это неопределённое поведение, так?
510 2814046
>>814039
А зачем компилятору что-то преобразовывать? У тебя в переменной лежит целое число, и ты даёшь задание вывести это целое число, которое не превышает выделенной для этого числа памяти, с чем компилятор с лёгкостью и справляется.
511 2814051
>>814046
Так char и int разного размера. "%d" ожидает int, но получает char, даже не зная об этом.
512 2814053
>>814026
Дак ты погодь, хохлам щас ядерку дадут так они сразу до сибири дойдут.
513 2814071
>>814051
Чар и инт это типы данных, которые предназначены для хранения целых чисел. Когда ты передаёшь что-то в printf, то ты указываешь спецификаторы, которые говорят о данных какого типа ты передаёшь в эту ф-цию. У тебя спецификатор %d говорит о том, что ты хочешь передать целое число, после этого ты и передаёшь это самое целое число, которое у тебя хранится в переменной с. Просто это целое число не может превышать 127, чтобы оно имело смысл.
514 2814074
>>814053
Залупу им за щеку только могут дать.
515 2814103
>>814071
Как ты тогда объясняешь существование спецификаторов "%ld", "%lld", "%hd" и пр.? "%d" запрашивает не целое число, а именно int.
516 2814146
>>814103
Тебе про типы данных почитать.
https://prog-cpp.ru/c-input-output/
517 2814147
>>814146
Здесь объясняется про спецификаторы, но про типы данных тебе нужно читать отдельно.
518 2814156
>>814146
1. Там прямым текстом сказано, что "%d" выводит int.
2. Ты не ответил на мой вопрос.
3. Ткни пальцем, где в статье ответ на мой изначальный вопрос, или объясни своими словами.
519 2814228
>>814019
>>814156
>>814147
>>814103
>>814051
>>814046
>>814039
Когда вы уже запомните...
В памяти лежат голые биты. Никаких интов чаров флоатов. Просто биты в байтах по виртуальным адресам. Все.

Ты говоришь, я буду юзать чар (читай однобайтные знаковые децималы), компилер такой - без базара. Ты говоришь положи по адресу Ц значение 5. Компилер такой без базара и пишет в адрес 0b101 (добавсь слева нули если не понятно). Потому ты говоришь выведи на экран %d компилер говорит без базара, НО %d настроен на вывод четырех байт, а ты записал в один.Происходит неявное преобразование типов, твой чар кастуется к интам (любая студия, апример эклипс, тебе бы ворнинг вывела в этом месте), тобишь компилер просто приклеивает справа нулевые байты (справа а не слева потому что порядок чтения битов и байтов обратный) и пихает в поток вывода (но вообще то это в теории, на практике реализация принтфа завязана на write() которая в сырцах компилера должна лежать, крч в стдлибе нет описания блекбокса как именно это происходит).

В общем, если подводить итоги. В памяти лежат какие то битики. Как их декодировать и что с ними делать определяют типы данных. Как их писать в память/читать из памяти определяет программист. Можешь положить в инт большое число и вывести как строку. Или записать в массив даблов текст. Надеюсь я приоткрыл вам дверцу.
520 2814241
>>814228
Вообще если разбираться, то на 32битных машинах при любой математике с выражениями меньше 4 байт компилер будет жонглировать и клеить нулевые байты к ним, поэтому если надо написать быстрый прогрух хэшей из рама по 32 битной шине - юзают инты или 4 байтные поинтеры. И по этой же причине в сишке инт кондишен. Потому что 32 битные шины данных это канон.

Крч тебе нужен 1 байт? Компилер грит без базара, грузит 4 байта, отрезает тот который нужен, клеит к нему нулевые и в от ты получил свой байт.
521 2814243
>>814156

>Там прямым текстом сказано, что "%d" выводит int.


Имеется в виду, что может выводить целое число, которое не превышает инт, т.е. 2^32. Пойми, что и чар и инт это представление целого числа, только разница в разрядности. Когда ты хочешь переменной вида чар присвоить какой-либо символ, то этой переменной присваивается не сам этот символ, а его представление в таблице аскии. Допустим:

char c = 'a';
printf("%d", c); // выведет 97
c = 97;
printf("%c", 97); // выведет 'a'
char a = '!';
printf("%d", a + c); // выведет 120

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

>Ты говоришь, я буду юзать чар (читай однобайтные знаковые децималы), компилер такой - без базара. Ты говоришь положи по адресу Ц значение 5. Компилер такой без базара и пишет в адрес 0b101 (добавсь слева нули если не понятно). Потому ты говоришь выведи на экран %d компилер говорит без базара, НО %d настроен на вывод четырех байт, а ты записал в один. Происходит неявное преобразование типов, твой чар кастуется к интам (любая студия, апример эклипс, тебе бы ворнинг вывела в этом месте), тобишь компилер просто приклеивает справа нулевые байты (справа а не слева потому что порядок чтения битов и байтов обратный) и пихает в поток вывода (но вообще то это в теории, на практике реализация принтфа завязана на write() которая в сырцах компилера должна лежать, крч в стдлибе нет описания блекбокса как именно это происходит).



Вот это хорошее объяснение.
523 2814270
Чтобы закрепился пройденный материал предлагаю анону мысленный эксперимент.

int printf(const char ⚹, ...); /⚹ или __VA_ARGLIST__ не помню как прототип описан у принтфа, но по идее линковщик без инклюда либы слинкует описание принтфа по прототипу ⚹/

d = "huy";
int main(void){
printf("%d -> %s \n", d);
return 0;
}
524 2814271
>>814243

>printf("%d", a + c); // выведет 120


Я тут чёт проебался, это будет -126, тому что 97 + 33 = 130, но чар может хранить числа до 127, следовательно дальше начинается обратный отсчёт.
525 2814274
>>814271

>до 127


Ну тащемта это то же спорный момент. Границы типов это не стандарт и на разных машинах по разному бывает. Имеется ввиду что на некоторых машинах верхняя граница выше, на некоторых нижняя ниже. В общем ты понял.
526 2814277
>>814274
Чар же всегда был одним байтом. Байт это универсальная единица измерения, поэтому чар не должен зависеть от машины.
527 2814283
>>814277
Чар и не зависит от машины. А вот способ декодирования битов из байт ой как зависит. Вон на рисках слова, к примеру, фрагментированные, полслова в начале, полслова в конце, посередине гвоздик слово данных.
528 2814292
>>814277
Ладно я фигово объяснил. Чар это один байт, он не зависит от машины, ты прав. А вот когда ты пишешь 127 или -126 это не чар, это ты уже декодировал биты из этого байта в децималы. И вот сам процесс декодирования зависит от машины. Если быть точным от процессора, от камня, от его набора инструкций и архитектуры. К римеру я не уверен сможет ли камень на ГПУ вообще раскодировать твой байт как децимал, учитывая что там матядро с инструкциями по флоатам.
529 2814297
>>814228
Когда вы уже запомните...
Никаких битов байтов в стандарте НЕТ. Есть только абстракция на абстракции, выраженная в отвлеченных терминах. Всё.
Стандарт C/C++ би лайк;
"Ой, чар это один байт, но байт это, короче, не байт, который 8 бит, а любая хуйня, главное, чтобы минимум 256 значений вмещал"
"Ой, пук пук, а я хз, что такое INT_MAX + 1, мб INT_MIN, а мб у тебя хуй отвалится, иди нахуй, короче"

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

> ты говоришь выведи на экран %d компилер говорит без базара, НО %d настроен на вывод четырех байт, а ты записал в один.Происходит неявное преобразование типов, твой чар кастуется к интам


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

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


"Четыре байта", "приклеивает справа, а не слева", "порядок чтения битов и байтов" - ты понимаешь, что в стандарте нет всей этой хуйни малафьи? Банально "порядок чтения байтов" зависит от endianness конкретного компьютера? АЛЛО, В СТАНДАРТЕ АБСТРАКТНАЯ МАШИНА!

> В общем, если подводить итоги. В памяти лежат какие то битики. Как их декодировать и что с ними делать определяют типы данных. Как их писать в память/читать из памяти определяет программист. Можешь положить в инт большое число и вывести как строку. Или записать в массив даблов текст. Надеюсь я приоткрыл вам дверцу.


В этом и проблема. Оттуда и изначальный вопрос: "я положил один байт там, где ожидается 4 байта; компилятор об этом знать не может, следовательно на выходе - рандомная хуйня". Потом оказалось по-другому: https://stackoverflow.com/a/12830110
529 2814297
>>814228
Когда вы уже запомните...
Никаких битов байтов в стандарте НЕТ. Есть только абстракция на абстракции, выраженная в отвлеченных терминах. Всё.
Стандарт C/C++ би лайк;
"Ой, чар это один байт, но байт это, короче, не байт, который 8 бит, а любая хуйня, главное, чтобы минимум 256 значений вмещал"
"Ой, пук пук, а я хз, что такое INT_MAX + 1, мб INT_MIN, а мб у тебя хуй отвалится, иди нахуй, короче"

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

> ты говоришь выведи на экран %d компилер говорит без базара, НО %d настроен на вывод четырех байт, а ты записал в один.Происходит неявное преобразование типов, твой чар кастуется к интам


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

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


"Четыре байта", "приклеивает справа, а не слева", "порядок чтения битов и байтов" - ты понимаешь, что в стандарте нет всей этой хуйни малафьи? Банально "порядок чтения байтов" зависит от endianness конкретного компьютера? АЛЛО, В СТАНДАРТЕ АБСТРАКТНАЯ МАШИНА!

> В общем, если подводить итоги. В памяти лежат какие то битики. Как их декодировать и что с ними делать определяют типы данных. Как их писать в память/читать из памяти определяет программист. Можешь положить в инт большое число и вывести как строку. Или записать в массив даблов текст. Надеюсь я приоткрыл вам дверцу.


В этом и проблема. Оттуда и изначальный вопрос: "я положил один байт там, где ожидается 4 байта; компилятор об этом знать не может, следовательно на выходе - рандомная хуйня". Потом оказалось по-другому: https://stackoverflow.com/a/12830110
530 2814302
>>814241
Ты же в курсе, что:
а) int это не всегда 4 байта;
б) int не всегда 32-битный, даже если он 4 байта?
531 2814312
>>814302
Я вкурсе. Про пункт б стало интересно, обоснуй. Еще можешь рассказать что побудило тебя написать этот пост, то что в сишке инт кондишен? Как твои утверждения это опровергают? Инты на машине это word величина. Если там 16 битная шина и камень, то инты там двухбайтные. Но все децимальные константы все равно интовые. Так что я не понял с чем именно ты споришь.
532 2814313
>>814297
Уич хардварь, макака.
533 2814322
>>814312

> Я вкурсе. Про пункт б стало интересно, обоснуй.


Байт не обязан быть 8 бит. Стандарт говорит, что:
1) char это всегда один байт
2) char не может быть меньше 8 бит (но может быть больше, см. CHAR_BIT)

> Еще можешь рассказать что побудило тебя написать этот пост, то что в сишке инт кондишен?


Не знаю, про какой ты конкретно пост (видимо, не мой), но меня не интересует, как работает си на конкретной архитектуре. Мне интереснее разобраться, что стандарт гарантирует на любой машине, а что не гарантирует.
534 2814324
>>814313
Учи стандарт, бака
535 2814336
>>814322
Почти ничего не гарантирует. Зоопарк разнообразных машин вставил свое слово в написание стандарта.

>>814324
Цель? Ты никуда не денешься от конкретной реализации конкретной машины. Смирись с этим макакич.
Снимок экрана 2023-08-21 в 20.56.27.png41 Кб, 1270x90
536 2814355
>>814322

>Байт не обязан быть 8 бит. Стандарт говорит, что:


>1) char это всегда один байт


>2) char не может быть меньше 8 бит (но может быть больше, см. CHAR_BIT)


Ну тут вот стандарт то же врет, или ты врешь.
Как насчет шестибитных чаров? Я вот пытаюсь понять зачем ты учишь стандарт языка, который напрямую привязан к железкам, а у железок нет стандарта. Глупость какая то. И как стандарт сихи описывает работу с третичной логикой (да такие компы то же были)? Крч пустая трата времени. Глянь дефайны на своей машине и кодь приложуню, не будь макакой которая срет тут нечитабельной хуетой зато по стандарту.
537 2814359
>>814336

> Почти ничего не гарантирует. Зоопарк разнообразных машин вставил свое слово в написание стандарта.


В этом и суть. В том, чтобы не допускать того, что по стандарту является неопределённым поведением. А иначе получается, перешёл с GCC на Clang - умер от уб. Ну или с x86 на ARM, тем более. Мне такое не оч нравится.

> Цель? Ты никуда не денешься от конкретной реализации конкретной машины. Смирись с этим макакич.


Ты никуда не денешься от опасностей UB и необходимости portability. Смирись с этим.
538 2814363
>>814359
в твоем примере не было уб, ты просто даун
539 2814373
>>814355

> >Байт не обязан быть 8 бит. Стандарт говорит, что:


> >1) char это всегда один байт


> >2) char не может быть меньше 8 бит (но может быть больше, см. CHAR_BIT)


> Ну тут вот стандарт то же врет, или ты врешь.


> Как насчет шестибитных чаров?


Покажи их. У тебя на скрине некий компьютер с шестибитным байтом. Где ты вычитал про 6-битный чар? На таком компьютере либо невозможна реализация Си, либо на нём char будет 12-битным. Два байта с точки зрения машины, но один "байт" с точки зрения языка. И на таком компиляторе sizeof(char) будет равен 1, а CHAR_BIT - 12.

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


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

> И как стандарт сихи описывает работу с третичной логикой (да такие компы то же были)?


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

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


А потом переносим проект на другой комплюктерн и БАЦ, БАЦ, БАЦ
Кстати, никто не запрещает использовать platform-specific и implementation defined фичи, просто делать это надо в меру, и только когда это целесообразно.
540 2814375
>>814363
В каком примере? Про принтф я и не говорил, что это уб, а спрашивал. Если ты про INT_MAX + 1, то сорян, но даун здесь ты, а не я :(
541 2814404
Хуй знает о чём вы вообще, но с точки зрения асма, когда ты в принтф передаёшь, что-то типа такого:

char c = 128;
printf("%d%", c); \\ он напечатает -128

то вывод на конечных этапах будет выглядеть так:

mov ax, byte[пер_арг]
...
syscall

где пер_арг это переданная в принтф переменная c, следовательно, в ах будет значение 0xff == 0b11111111, то есть все остальные нули, которые были переданы в принтф, чтобы преобразовать его к инту не учитываются, иначе было бы напечатано 128.
Вообще это дело связано с соглашениями о вызовах, которые требуют выравнивания по 16-ричному адресу, что связано с архитектурой х86_64.
542 2814411
>>814404

>Вообще это дело связано с соглашениями о вызовах, которые требуют выравнивания по 16-ричному адресу, что связано с архитектурой х86_64.


А не, я чёт хуиту сморозил, выравнивание нужно для rsp.
543 2814416
>>814373
Карочи классическое врети. Ставлю точку.
544 2814418
>>814404
Знаковый бит перенесется в старший байт на всех архитектурах.
545 2814430
>>814418
Да, но берётся именно байт, иначе было бы значение -2147483647.
546 2814432
>>814430
-2147483648

быстрофикс
547 2814440
>>814404

> char c = 128;


UB
548 2814445
Я не понимаю о чем вы тут спорите и вы наверное тоже не понимаете о чем говорите вообще.
549 2814447
>>814416
Какое "врёти"? Ты бы хоть прочитал для начала, что я написал. Я сказал, что существование шестибитного компьютера не отменяет того, что в Си байт не может быть шестибитным, хоть ты усрись. Если очень захочется для такого компьютера написать компилятор Си, то придётся сделать байт (char) 12-, 18-, да хоть 60-битным, но 6-ти битным он не будет, иначе это не Си.
550 2814452
>>814447
Ну выходит что чар не всегда равен байту. Опять врети?
551 2814480
>>814452
Нет, не выходит, потому что байт в стандарте это не то же самое, что машинный байт. Ты пойми, слово одно и тоже, но значения разные.
552 2814535
>>814480
Ахахах эти виляния жопой попущенного стандартодебила.
553 2814581
>>814404
Пиздос, я чёт вчера и здесь объебался, ведь -128 == 0b10000000 в двоичном представлении. Чёт вчера везде где только можно объебался.
554 2814591
>>814581
Кодить по границам типов это вообще супермразотная техника.
555 2814611
>>814591
Не знаю о чём ты, но, в принципе, типов не так много, поэтому можно и изучить их границы, а там уже на автомате будешь выбирать нужный тебе тип.
556 2814635
>>814611
Да похуй на вас. Сборище додиков. Один со стандартом носится как со святым писанием, второй кодит неподдерживаемую хуйню, которая для проца еще и неудобная. Ай билять, делайте чо хотите, макаки.
557 2814674
>>814635
Ладно
558 2815133
А я хелло ворлд сделал без ютуба, вот.
559 2815272
>>815133
Проверь теперь на наличие UB, а то мало ли.
16164794197530.mp4543 Кб, mp4,
1280x720, 0:03
560 2815318
561 2815339
>>815133
Покажи!
image.png281 Кб, 1024x520
562 2815354
563 2815409
>>815354
Денис, ты? Я твой одноклассник.
564 2815424
https://www.youtube.com/watch?v=yfppUS0b0P8
Как будет безопасно?
565 2815511
>>815424
Вайлом по гетчару разбирать поток?
566 2815545
>>815424
Блин чот я не туда думаю. Наверное трабл в том что чар[10] и в него тупа могут пульнуть строку длиннее и записать в какой нить служебный сегмент всякую бяку. Но эт в теории, чот я не уверен в такой возможности.
image.png205 Кб, 702x535
567 2815562
568 2815571
>>815562
На стр. 291 не оч. описана проблема переполнения буфера. Об этом лучше почитать у Криса Касперского, либо в какой-нибудь другой книге по безопасности или в той, где описываются различные виды атак и всяких там мальварей, троянов, и т.д. и т.п.
569 2815573
>>815571
>>815562
Ну на служебных адресах рам стоят флажки доступа и типа хер ты туда чо запишешь, разве не так?
570 2815577
>>815573
Ну, грубо говоря, в строку можно закинуть команды машинного кода, которые смогут прыгнуть туда, куда потребует пенетратор. Вообще, я сам не особо в этом шарю, т.к. ещё не дошёл до книг Криса Касперского и других книг по безопасности.
571 2815620
>>815272
Что такое UB? Вижу что о нем часто говорят в треде, но лично его еще не встречал. Звучит как интересный мужик.
573 2815651
>>815624

> int i = 5;


> i = ++i + ++i;


Я так сделал и на меня теперь ругаются. Но мне понравилось.
image.png423 Кб, 960x540
574 2815708
>>815620

>Unreal Bioshock

575 2815715
>>815651

>Я так сделал


Бедный Дениска, написал целый абзац о том что так делать не надо а оне делают. Ну и кто типерь дурак?
576 2815719
>>815651

>Ускоряется работа программ (так как не нужно проверять всевозможные «маргинальные» случаи).


Маргинал! Покинь тред уважаемых господ!
Смех5.webm418 Кб, webm,
640x360, 0:04
577 2815747
578 2815793
>>814535
>>814635
>>815272
Блядей корёжит от моего базированного мнения про стандарт))
c-exp.png5 Кб, 953x82
579 2815919
>>814404

> char c = 128;


> printf("%d%", c); \\ он напечатает -128


так просто смотри, что тебе умный компилятор пишет и не делай так
1692769970078.jpg115 Кб, 800x800
580 2815971
581 2816252
>>815133
А я сделал мейкфайл для твоего хелловорлда. Кооперация.
582 2816285
Аноны, а чем отличается эта конструкция:

for (i = p; i != id; i = id);

от этой:

i = p;
if (i != id) i = id;


где id[] это целочисленный массив, а p это целое число, которое принимает программа через ф-цию scanf()?
583 2816293
>>816285
Стандартодебил, ты?
584 2816312
>>816293
Нет, просто вычитал эту конструкцию

>for (i = p; i != id; i = id);


в одной книге и хочу понять отличия от этой конструкции

>i = p;


>if (i != id) i = id;

image.png22 Кб, 638x516
585 2816320
>>816312
Ёбанный двач, убирает всё важное!
Вот так эта программа выглядит - смысл её в том, что она решает связные задачи, но я хочу понять именно эту конструкции, и то почему именно её употребили.

https://pastebin.com/rHg1RsX2
586 2816327
>>816320
Что за книга в которой не объясняют примененный алгоритм?
587 2816332
>>816327
Седжвик "Алгоритмы на Си"
Там есть объяснение, но мне не понятно, почему именно эту конструкцию применили.
588 2816333
>>816332
Давай сюда объяснение.
589 2816338
>>816333
Тогда надо начать с пикрил 1, а потом пикрил 2
590 2816341
>>816285
Разница в том что фор работает по шаблону ду вайл и один прокрут тела точно будет, а потому фор крутанет 2 цикла
Иф выполнится 1 раз

Нахуй оно тебе надо - да мне похуй.

Протестировано на рисках.
Поправь если я не понял алгоритм.
591 2816342
>>816338
Ну чтоб юнионы собрать, там же написано.
592 2816350
>>816341
Понял! Спасибо!

>>816342
Так это понятно. Цель ясна, но средство не особо понятно.
593 2816363
>>816341

>фор крутанет 2 цикла


1, но точно крутанет его даже если по условиям не должен, стартовый прокрут как в ду вайле

другое дело что у анона тела форов пустые, та что книжка хуйню какюу то предлагает писать
594 2816470
printf("My float: %f\n", 1 / 5 * 2); -> 0.000000
Это у вас такие приколы, да? Как мне дробное число получить-то блять?
595 2816474
>>816470
скастуй ты же маг
596 2816478
>>816474
Тогда другой вопрос. Вот я скастовал, получил
0.000064. Как мне получить uint 0.000064 * 1000000?
Синтаксис, моё почтение нахуй. (float)a / b и гадай блять, что за (float) и к чему он относится, к a, или к небу, или к Аллаху или ко всему выражению
597 2816481
>>816478

>0.000064. Как мне получить uint 0.000064 1000000?


(uint) (0.000064
1000000)?
598 2816484
>>816478
скастовать блять, ты же маг нахой
599 2816485
>>816478
в твоем примере каст относится к а
600 2816486
>>816481
>>816484
>>816485
Disgusting! Но вроде разобрался. Спасибо.
601 2816495
>>816478
прекрасный синтаксис, самый лучший в мире
можно одним движением поменять вычисления например вот так

float a = 12.5;
float b = 6.3;

float result1 = (float) a / (float) b;
int result2 = (int) a / (int) b;
int result3 = (int)(a/b);
float result4 = a/(int)b;

сильно не придирайся к примерам, чисто на коленке нацарапал
602 2816498
>>816495
А есть возможность кастить в uint8/16 etc например, или каст не влияет на выделение памяти, а просто говорит компилятору тип?
603 2816500
>>816498
да куда угодно можно кастить, ты же маг нахой
хоть в структуру кастуй
604 2816615
>>816498
Можешь кастить uint16_t в uint8_t и так далее, будет сохраняться младший байт.
605 2816712
А я могу накастовать себе зарплату с шестью нолями после первой цифры и работу чтобы 2 часа в день на удаленке?
606 2816766
>>816712
Конечно можешь - ты же маг, в конце концов!!
607 2816831
>>816766
Да, я маг! Волшебник!
11.png19 Кб, 842x642
608 2817233
В общем. Базово - вроде разобрался в Vim'ом на винде.

Теперь вопрос. Как прикрутить к нему LS, чтобы подсказочки там, ссылочки, переход к определению и всякие рефакторинги, чтобы как в VSCode короче.
609 2817235
>>817233
Бля. Я тредом промазал...
Хотя думаю не важен же тред. Думаю проблемы вима на винде и у сишников должны быть. Так что все равно тута мож кто ответит.
610 2817280
>>817233
Ни вим миллиард плагинов. Пояндекси те что делают твои штуки хуюки. Мимо сижу на ви.
Снимок экрана 2023-08-24 в 15.35.54.png208 Кб, 1598x356
611 2817295
Блять похоже надо реверс инженерингом заниматься. Нихя не понятно стало. Чо там за система окон на макоси? И как на сях под нее чот написать? Дайте пример симпол окна на сях под макось.

На шинде винапи, на юниксах иксы(xlib) а на макоси чо? Пишут что кути, но кути обертка над xlib а иксов в макоси я не обнаружил

Вощим дайте пастбин симпол окна на макось в сях или мне придется зайти в богомерзкий икскод, нахуякать там сипол окно на богомерзком свифте, скомпилить, трансфернуть опкоды в асм и затем из асма ковырять исходник на сях и вот этим всем я ваще не хочу заниматься.
Снимок экрана 2023-08-24 в 15.54.43.png27 Кб, 1398x50
612 2817308
>>817295
Ну должны быть Х11, ну и где они?
Крч аноны помогайте, я потерял иксы.
613 2817333
>>817308
>>817295

>а на макоси чо?


Эти петухи потёрли свои либы для ру-пользователей, чтобы мы не кодили на их "прекрасных" компах и осях.
614 2817339
>>817333
Чо несешь то? Икскод со своим обжектив си или свифт кодирует же. Значит си то же может. Вопрос как?
Линковщик силанга то же грит хуй знает чо за Х11 не вижу нихуя.
Ну блять заебись сука падла.
615 2817359
>>817339
Переходи на линукс. Макось-петухи не позволяют нормально кодить.
616 2817378
>>817359
На пинусе у меня клава и тачпад в иксах не подтянулись, так что надо будет поковырять хал наверн или иксовые конфиги, крч попердолиться. А я пока не хочу пердолиться, хочу просто оконный хеловорлд на макоси написать. Но вот не получается.

Если тестить на qt то тама кумейк ебучий генерит мейкфайл с мусором под g++ ни того ни другого у меня нет, я даже тестить не буду эту парашу.

ГТК вестимо на макоси не бывает.

Остается хлиб. Кыс кыс кыс блять.
617 2817679
>>816341
А что за риски? Тоже хочу попробовать взять, но хз что.
618 2817851
>>817679
aarm64
619 2818000
>>817851
Я думал у тебя железка какая, типо этих https://www.sifive.com/
620 2818015
>>818000
Типо ты не увидел на скринах маковский терминал?
621 2818047
>>818015
А я хз какой на маке, похож на одну из бесконечных светлых тем гнома.
622 2818096
>>818047
Ну так то да. Дипиай на скринах слышком высокий для дефолтных гну/линуксов. То же один из маркеров эплодевайсов.
623 2818247
>>817295
>>817308
>>817333
В общем я нашел вот эту какаву
https://translated.turbopages.org/proxy_u/en-ru.ru.2a6d2fe7-64e8b0be-645589d1-74722d776562/https/stackoverflow.com/questions/30269329/creating-a-windowed-application-in-pure-c-on-macos

Остается загадкой нахуя они так сильно завернули колбеки в жопу иксам, но лично мне прям осейчас абсолютно поебать, я просто не хочу перепрыгивать с сей на свифты ебаные ради как ой то операционки.
Снимок экрана 2023-08-25 в 17.15.31.png1,8 Мб, 2880x1800
624 2818281
>>818247
Маненько поковырял эту какаву. Судя по выводу тут та же структура что и в свинге жабы. Виндоу в ней панелька и уже в панельке все остальное (хз чо в этой какаве есть, лайоут манагеры, батоны, лейблы...)

Крч пойду читать про какаву и с чем ее едят.
625 2818571
>>818281
скинь тут потом в итоге получившийся hello world для яблока
626 2818582
А еще я нашел ответ куда запрятали иксы и пример на чистых иксах, так что в принципе в жопу эту какаву.
627 2818583
>>818582
делись
628 2818589
>>818571
Ну вот например обжектив си в файле си скомпиленный с флажками под обжектив си и какава фреймворк
буду добавлять как только тесты заведуться, пример на пьюр си пока не завелся потому что он не под эпол силикон, но там есть под эпол силикон.
629 2818658
>>818589
Пример с википедии на голых иксах не компилился потому что хидеры иксов не лежат по пути из википедии. Пришлось поискать их файндом. Судя по выхлопу я чота нашел.

Проверим лежит ли там нужный xlib.h пик2 говорит что лежит

Ну чтож, теперь у нас два путя:
первый - хуярим новую запись в $path консольки чтобы гцц умел цеплять xlib по инклюду <X11/Xlib.h>
второй - заинклюдим хлиб с полным прописанным путем до него

Кароче я щас пытаюсь победить эти референсы туповатые, которые не могут найти блять файлы, уже даже скопировал в папочку отдельно, но это не помогло. В общем надо экспортить новый референс для $PATH под путь к Х11 хидерам. Иначе чота прям слишком трудно получается. Займусь этим в следующий раз.
630 2818693
>>818658
Ну я пока что хз если честно.
Вроде бы прописал путь, но чота все равно он не хочет цепляться.

Я пробовал прописывать путь как Х11/инклюдс, пробовал напрямую присвоить путь в переменную
Наверное я что то делаю не так, но я пока не знаю что именно.
631 2818721
>>818693
Макось-петухи не дадут тебе спокойной жизни!!!
632 2818726
>>818721
Да мне кажется это на стаке хуйню советуют. Откуда они взяли вообще переменную окружения C_INCLUDE_PATH? Я прочекал стой zsh и он такой переменной не пользуется. Похоже надо пути прописывать в конфиг набора инструментов gcc или в ckang или в cc, только я пока что не знаю чо там по конфигам и откуда gcc черпает относительные пути.

Ну есть второй вариант - скопировать всю папку хидеров туда где лежит stdio.h, то место ведь gcc уже знает.

Ну и может кто из пердоликов подскажет как прописать пути корректно.
633 2818759
>>818726

>набора инструментов gcc или в ckang или в cc


Так они же же должны пользовать пути баша/зэтша?
Снимок экрана 2023-08-25 в 22.28.44.png434 Кб, 1328x1148
634 2818763
>>818759
Да хер пойми, я то же так думал, но чот вроде бы и нет выходит.
Скомпилил первый пример на чистом си под фреймворк какаву.

Потестил гцц через абсолютные пути до иксов и наконец то цепанулось, но срет ошибками об анделаредах. Прочекал хидеры из папки иксов и реально там тупо нет прототипов функций построения окошек. Ни одной. Хмм. Вот петухи!!!
637 2818769
>>818765
Да это не поможет. Там в иксовом примере всякие XCreateWindow() и прочие функции задействованы, а в хидерах не лежат их прототипы, то бишь линкеру не от куда их линковать. Это значит что кроме хидеров с дефайнами всякого говна и структур должны быть еще статичные либы по типу libX11.so которую надо уже слинковать по типу gcc ... -lX11 и вот тогда тела этих функций попадут в обджектдамп приложуни и все заработает, но эплопетухи не оставили мне в СДК статик библы
638 2818771
>>818769
Понял! Тогда хз как это решить.
639 2818774
>>818769

>The value of COMPILER_PATH is a colon-separated list of directories, much like PATH. GCC tries the directories thus specified when searching for subprograms, if it cannot find the subprograms using GCC_EXEC_PREFIX.



А это не пробовал?
640 2818778
>>818769
Хз, может тоже мимио, но, мб, тебя наведёт на что-то, либо ты ещё что-то интересное расскажешь
https://opensource.com/article/22/5/dynamic-linking-modular-libraries-linux
641 2818781
>>818771
>>818774
>>818778
Есть вариант чекнуть какаву на предмет как она строит окна, коллдамп глянуть крч. Какава как и кути и всякие там мотиф ксав и прочие хуйни это же обертка над иксами. То бишь так или иначе они тягают иксовые интерфейсы.

Но не сегодня уже.
642 2818786
>>818781
Крепись, анонче! Ты близок!!
Снимок экрана 2023-08-25 в 22.28.44.png434 Кб, 1328x1148
643 2818928
>>818571
Вот первый удачный компил
https://pastebin.com/FWq7ZufL
Мейкфайл не буду постить, там в шапке комментарий как скомпилить и сурс статьи. В той же статье есть пример на интелы.
644 2819097
В общем я тут немножко поковырялся и вот результаты моих исследований. Эплопетухи вырезали из иксов все интерфейсы через которые можно было бы покодить приложуни на чистых иксах. Но взамен у них есть их собственный фреймворк разного уровня - Cocoa (она же какава, какао, главное не чай "Ява" и не кофискрипт).

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

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

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

Компил под либы у эплопетухов как я понял то же приобретает дополнительный флажок в жопе -framework
А все фреймворки соответственно лежат кое где, но там нет фреймворка Х11, а те обравки где он есть не имеют статик либ или любого другого описания львиной доли функционала (как я уже и говорил).

Вощим вердикт такой - пьюр си под иксы на ОС Х возможен, но надо ставить фреймворк XQuarz. А так пишем на пьюр си под фреймворк предназначенный для свифта/обжектив си и не паримся.
645 2819204
>>819097
Так же вот тут чистый сишник с примерами той же какавы (ну я так понял карбон это часть какавы)
Евент лупы, хэндлеры, таймеры и прочие хай левел оконные штуки дрюки.
http://preserve.mactech.com/articles/mactech/Vol.17/17.07/July01Cover2/index.html
646 2819494
>>819097
>>819204
Хорош! Тебе для проекта нужно, кста?
647 2819506
>>819494
Нет. Я для себя это делаю. Хочу свою ГЛ потестить, алгоритмику, оптимизации, шейдеры, может быть сделаю какой нить САПР, но пока что особых планов нет, кроме как написать рейтрейсинг и реймарчинг. Есть некоторые задумки как описать моушен на полигональных объектах.

Еще мб пощупаю воксели, но не знаю насколько вообще это будет актуально.
648 2819634
Крч все я сдаюсь. Мне просто нужна была рабочая вью форма для ковыряния пикселей, но с этой трансляцией сишника в обжектив си колбеки внутри карбона заебешься. Надо все колбеки переписывать на сишник, читай портировать карбон на пьюр си.

Попробую ка я лучше XQarz накатить и под иксы поковыряться, там то более менее все знакомо.
649 2819639
>>819506
Понял! Знатно ты долбишься с этим, конечно.
650 2819879
а есть те, кто в реальных новых проектах сталкивался с ограничениями, что нужно использовать только C89, а не C99 хотя бы?
Только не потому, что так захотелось начальству, а что реальное ограничение техническое. Потому что вроде как уже не осталось таких платформ, где не было бы C99, а при выпуске новых платформ тоже особо желающих не находится, чтобы там был строго C89, а чаще всего вообще прикручивают LLVM и не парятся с языками потом.
Видимо уже нет смысла начинать какие-то новые проекты под C89
651 2819934
>>819879
В BSD такой фигней вроде страдают во имя обратной совместимости. Там все микросервисы внутри sbin написаны по шаблонам ультрастарых стандартов по типу

int
main ()
{
return 0;
}
652 2820159
>>819934
спасибо, был не в курсе, а еще что-то есть?
просто уже даже микроэлектроника уже на c99 как минимум сидит давно или вообще на плюсах с подтягиванием раста, не говоря уже про какие-то там игровые консоли
image.png20 Кб, 606x99
653 2820165
>>819879

>вообще прикручивают LLVM и не парятся с языками потом


"Не парящиеся с языками" - на пике, вот так говношлепят из говна в мочу и обратно и вместо исправления надеются на боженьку. А могли бы код писать своими руками, но куда там макакам, конечно не могли. На пикче кстати хрюст.
654 2820208
>>820159
Да разве не поебать чо там говношлепы делают? Пусть хоть на скратче микрухи кодируют какая нам разница? Рыночек порешает рано или поздно.
655 2820267
>>820208
ну мне к тому, что все новые либы уже можно на C99 спокойно писать, а то вкусностей там есть, хочется, получается везде кроме BSD это зайдет
656 2820318
Вопрос назрел.

Оператор break откуда выходит? Разве только из тела цикла? Из тела свича ведь он то же выходит. А выходит ли он из записи стека?

Вот например
{ ...код1... if(1) break; ...код2... }

Как себя ведет процесс в тайо ситуации? При открытии фигурной скобки будут присвоены новые значчения на rbp rsp то бишь это новая запиь стека. Но брейк заставит выйти из нее, или мне надо сделать ретурн чтобы выйти из нее?

В общем есть у меня блок ифов и мне вот надо чтобы при заходе в один из них следующие не вычислялись на истинность, но я та же не хочу использовать оператор goto. В общем надо сделать логику свича ифами по причине того что в свиче можно юзать только константные литералы (если можно так выразиться), а у меня неконстантные по логике.
657 2820475
>>820318
Блять про стандарты хуй вас заткнешь а такую простую хуйню разложить - пук среньк сразу все в кусты попрятались. Хули толку с вас в этом итт треди тогда? Выебываться мифическими знаниями о хуйне которая никогда не пригодиться?

Полагаю надо делать так
...
{
...
if(a) { dosomething; return;}
if(b) { dosomething; return;}
...
}
...

/thread
658 2820673
>>820475
тебе надо чтобы каждую ветку каждый раз что ли проверял твой свич?
659 2820688
>>820318
goto нужен как раз для таких ситуаций, когда у тебя есть большое вложение и тебе нужно из него прыгнуть, когда программа уже что-то сделала. Только используй его для прыжка вниз по коду. Этого дебича >>820475 не слушай, потому что ретёрн это возврат из ф-ции. Если не хочешь юзать goto, тогда переписывай логику, чтобы не было больших вложений, либо тогда каждый иф оформляй в ф-цию, а после выполнения кода возвращайся ретёрном, но это какое-то говнокодерство, ибо проще выпрыгнуть из большого вложения.
660 2820765
>>820318
>>820475
Попробуй так

switch (0){
case 0:
if(a) { dosomething; break;}
if(b) { dosomething; break;}
...
}

Тот же goto, но за этот не обоссут.

З.Ы.: напомните, почему goto считается зашкваром?
661 2820815
>>820765
Хмм, вот это тема.

>З.Ы.: напомните, почему goto считается зашкваром?


Бэд стайл. Предубеждения. Интересно линтер переваривает гоуту?
Снимок экрана 2023-08-28 в 17.55.53.png857 Кб, 2880x1800
662 2821205
Я написал компайр строк. Как вам? Можно ли сделать его быстрее?
663 2821975
Ну ладно, двачик, я вижу вы тут все серьезные дядьки и не хотите обсуждать двустрочные лагоритмы.
Ну вот тогда может быть кто то пояснит за этот лагоритм? Почему сишник не пишет число 111 в другой участок памяти? Что за избирательность?
664 2822129
>>821975

> (result+i+1) = 0;


Ты завершающий ноль не в то место пихаешь.
665 2822155
>>822129
Точняк! Спасибо, уже голова опухла.
Снимок экрана 2023-08-30 в 19.59.12.png150 Кб, 460x910
666 2823875
Анон ты когда нибудь делал три-вьювер? Поделись исходниками?
image.png61 Кб, 668x765
667 2823965
Что это такое? Исходники юниксовой утилиты, никогда такого не видел.
668 2823971
>>823965
где то дефайны зарыты
ну или это перлосырец из масачусетской бсдяхи
в бсд вообще любят перл
669 2823980
>>823971
Да, ты угадал, код парсера из doas, хрен знает что это такое и где почитать вообще можно.
670 2823986
>>823980
Странные у тебя увлечения - смотреть сырцы утилиты, которая хуй знает чо делает.
671 2823995
>>823986

>которая хуй знает чо делает


Да нет, вполне известно - аналог sudo.
672 2825358
Че если я добавлю хотяб одну переменную то мой массив не читается. Это типа из-за того, что память переполненна в стаке и надо уже в хип добавлять?

#include <stdio.h>
#include <unistd.h>
int main(){
void holp();
void printsetka(char setka[4][4]);
char setka[4][4];
for(int b=0;b<4;b++){
for(int k=0;k<4;k++){
setka[k] = '#';
}}
int a,b,c,d;

while (0 == 0){

for(a = 0; a < 4; a++){
setka[0][a] = 'X';
printsetka(setka);
setka[0][a] = '#';
sleep(2);
}
for(b = 1; b < 4; b++){
setka[3] = 'X';
printsetka(setka);
setka[3] = '#';
sleep(2);

}
for(c = 2; c > -1; c--){
setka[3][c] = 'X';
printsetka(setka);
setka[3][c] = '#';
sleep(2);

}
for(d = 2; d > 0; d--){
setka[d][0] = 'X';
printsetka(setka);
setka[d][0] = '#';
sleep(2);

}}}
void printsetka(char setka[4][4]){
for(int b=0; b<4;b++){
printf("\n");
for(int y=0;y<4;y++){
printf("%c ",setka[y]);
}
printf("\n");
}
printf("\033[2J\033[1;1H");
}
672 2825358
Че если я добавлю хотяб одну переменную то мой массив не читается. Это типа из-за того, что память переполненна в стаке и надо уже в хип добавлять?

#include <stdio.h>
#include <unistd.h>
int main(){
void holp();
void printsetka(char setka[4][4]);
char setka[4][4];
for(int b=0;b<4;b++){
for(int k=0;k<4;k++){
setka[k] = '#';
}}
int a,b,c,d;

while (0 == 0){

for(a = 0; a < 4; a++){
setka[0][a] = 'X';
printsetka(setka);
setka[0][a] = '#';
sleep(2);
}
for(b = 1; b < 4; b++){
setka[3] = 'X';
printsetka(setka);
setka[3] = '#';
sleep(2);

}
for(c = 2; c > -1; c--){
setka[3][c] = 'X';
printsetka(setka);
setka[3][c] = '#';
sleep(2);

}
for(d = 2; d > 0; d--){
setka[d][0] = 'X';
printsetka(setka);
setka[d][0] = '#';
sleep(2);

}}}
void printsetka(char setka[4][4]){
for(int b=0; b<4;b++){
printf("\n");
for(int y=0;y<4;y++){
printf("%c ",setka[y]);
}
printf("\n");
}
printf("\033[2J\033[1;1H");
}
Снимок экрана 2023-09-01 в 09.18.56.png52 Кб, 582x472
673 2825504
>>825358
во первых на пастбин почему не залил? не уважаешь нас? хочешь чтобы мы не только в твоем говне ковырялись но еще и в поехавшей разметке макабы?

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

в третьих поздравляю с днем знаний
674 2826686
>>825504

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


Анон, и тебя! Всем мощных знаний!!!
675 2827258
Так, пердолики.
У меня есть бинарник.

Как мне его "установить" при помощи сценариев сборки мэйк?
Мейкфайл прикреплю пиками в один не влезло
Ну делаю я sudo make install
Бинарь залезает в нужный путь вся хурма. Но блять переменная PATH экспортируется только в оболочке вызова мейка, а не глобально. А как мне новый путь добавить в $(PATH) чтобы он теперь там глобально жил то?
2023-09-02 22.09.32.jpg40 Кб, 678x520
676 2827297
>>827258
У меня есть некоторые догадки, но я пока не знаю как разрешить сей консенсус.
Вощим. Мейк использует какой то свой любимый шелл, каждый раз заного запуская оболчку для каждой строчки сценария. И поидее я могу явно указать какой шелл надо юзать (ну например мой родной шелл надо юзать) и тогда мейк экспортнет PATH в моем родном шелле и поидее все заработает.

Но. У юзера может стоять другой шелл. Баш например. Как мне угадать/прочитать какой юзершелл используется и в какой оболочке экспортить PATH?
677 2828126
>>827297
Ладно, никто не знает.
Оказывается надо было в юзер локал бин сунуть бинарник.
678 2830311
>>825358
Что значит массив не читается? Программа падает или что? Стек на Винде 2 мегабайта, поэтому вряд ли ты его переполнил. Скорее всего у тебя запись за пределы массива идёт, которая разрушает весь стек твой . С телефона лень вчитываться , но если инфу об ошибке скинешь, то попробую помочь.
679 2833235
Ну и какое слово из спам-листа присутствует в шапке треда? Чому не даёт перекатить тред?
680 2833710
>>833235
Да хуй знает. Не забудь двачезвезды в шапку добавить. Выше по треду были.
image.png12 Кб, 317x301
681 2834591
Помогите нубу.
Что я делаю не так? Почему красненьким горит?
683 2835040
Перекат!! Стильный, модный, молодёжный!!!

>>2835039 (OP)
>>2835039 (OP)
>>2835039 (OP)
>>2835039 (OP)
>>2835039 (OP)

этот удалён >>834709
684 2835171
>>834591
кто же вас научил по гайдам в ютюби смотри без смс и регистрации писать один и тот же нейм структуры и типдефа?

typedef struct {

} name;

struct name {

};

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

стдио чо не в угловых скобках?
685 2869322
>>817233
https://www.youtube.com/watch?v=w7i4amO_zaE
правда, это для неовима, но принцип такой
686 2871711
>>812749

>Где можно посмотреть, как реализуется кастомный протокол поверх tcp/udp?


гугли
zeroaccess botnet analysis
zeus gameover botnet analysis
sality botnet analysis
kelihos botnet analysis
conficker botnet p2p protocol
Тред утонул или удален.
Это копия, сохраненная 21 октября 2023 года.

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

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