Вы видите копию треда, сохраненную 30 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2054115 (OP)
>Cross-Platform Development with Qt 6 and Modern C++
>Packt
Немного потерял, там всякую чушь публикуют.
Неужели никто не смог переплюнуть?
Никто и не стремился, ведь в 2к21 винапи юзают только при крайней необходимости.
Возможно дело в том, что на голом винапи с тех пор больше никто не пишет? Как минимум на mfc
Когда у тебя книга, то ты гарантировано получишь инфу с 1 по последнюю страницы, а системы хелпов корявые, с запутанной системой навигации и вполне наверняка из-за этого ты упустишь большую часть инфы.
Никогда. С++ треды перекатываются после 1000 постов.
А нету чего то общего, чем является всё? Ну или чем хотя бы эта 4 является в общем
хочется иметь какую-то общую вещь и потом из неё все развернуть.
>Packt
>Немного потерял, там всякую чушь публикуют.
А у меня очень положительные впечатления от их книжек.
Да тут какой-то шизик во всех тредах срёт при одном упоминании пакта. Видать, попалась ему одна хуёвая книжка, он посмотрел на издателя и сделал выводы обо всех остальных книжках.
Ну тыж название книги на английском как-то понел .
Что тебе мешает таким же образом читать дальше?
Понять Кроссплатформенный девелопмент с Кьют 6 и модерновым Си++ можно и без знания инглиша.
Проприетарный компилятор, не поддерживающий в 2021 году C++11, скорее всего в принципе не может нормально в плюсы.
Тогда лучше вообще на сях лучше писать и то дополнительно молиться, что не наткнёшься на ICE в лучшем случае или баг кодогенерации в худшем.
А внутре думаешь не тоже самое?
Книжки по винапи всегда были уровня вот так вот берем, рас рас и готово, рас рас и готово.
Так что немного мы без них теряем, в доках все есть.
Уже в который раз перекатывает кто попало, и копируют /cpp/ как часть названия вместо того, чтобы добавить "cpp" в теги.
Эх щас бы окно не могло закрыть само себя так как стало зомби, класное было винапи натуралам не понять
Если ты не из Крестландии, вон из треда!
>Проприетарный компилятор, не поддерживающий в 2021 году C++11, скорее всего в принципе не может нормально в плюсы
Как же у вас блядь все просто. СУКА ДЕВАЙС ОСОБЕННЫЙ И КОМПИЛЯТОР К НЕМУ ОСОБЕННЫЙ. Не я выбирал девайс, и я не в позиции продавливать кастомера переносить его парашу на другую платформу
В крестах нет общепринятой конвенции, называй как хочешь, лишь бы было единообразно.
Уже
constexpr - капсом или snake_case?
Я и сказал - пиши на чистых сях в таком случае, потому что скорее всего плюсы там баганутые, STL (если вообще есть) тоже полный багов скорее всего.
Ты программируешь на Спектруме?
>
>>Проприетарный компилятор, не поддерживающий в 2021 году C++11, скорее всего в принципе не может нормально в плюсы
>Как же у вас блядь все просто. СУКА ДЕВАЙС ОСОБЕННЫЙ И КОМПИЛЯТОР К НЕМУ ОСОБЕННЫЙ. Не я выбирал девайс, и я не в позиции продавливать кастомера переносить его парашу на другую платформу
Ну юзай тогда стандарт C++ 98, в чем проблема-то?
>Ну юзай тогда стандарт C++ 98, в чем проблема-то?
блядь. Есть два таргета: шланг под айос и пипириетарщина под кастомную платформу. В шланге 17 и выпилили auto_ptr, в пипитарщине 98 и unique_ptr не запилили. Твои действия?
Да-да
Обсираемся на том, что у нас во всем коде нужно теперь использовать auto_ptr, а не
>1. :%s/auto_ptr/unique_ptr/g
У auto_ptr есть критический недостаток ввиде оператора копирования, именно поэтому он деприкейтед
Так ведь не только на деприкейтед таргет его в результате нужно тащить, ага
> Ну а как писать графическое приложение в 2к21?
НА Qt или всякой wpf-avalonia-electron-параше.
У меня получается на Qt, книга Шлее бестолковая и по его описанию у меня даже проект не компилируется, потому что я не понимаю чего там наследовать и куда вставлять код. Вот нафига создавать такую библиотеку, если её освоить сложнее, чем язык С++?
WPF же вроде только на C#.
Остальные даже не слышал.
Но WinAPI-то осилить изи, да, не то что Qt?
Не знаю, что там в Qt можно не осилить, когда впервые тыкал после дельфи, легко разобрался, как программировать мышкой и писать обработчики.
В WinAPI сложно принять его стандартную заготовку, а когда смиришься с этим говном, то остальное ложится просто. Хочешь рисовать? Добавляешь WM_PAINT. Хочешь клики мышкой? Добавляешь их обработчики и т.п. Всё линейно и можно изучать по мере надобности.
В Qt же какое-то монструозное нагромождение классов, которые чёрт знает для чего нужны и что делают. Кроме самих разработчиков, наверняка никто не понимает этого говна. Книги призваны объяснить с какой стороны подступиться, но вместо этого они описывают набор классов без объяснения как ими пользоваться. И подход там не линейный. Хочешь этот класс? Тогда надо унаследоваться определенным образом и переопределить такие-то методы. Хочешь другой класс? В этом случае надо инициализировать такую-то залупу, про которую нигде не сказано.
Простые линейные функции винапи по мере роста проекта вскоре превращаются в неподдерживаемую процедурную парашу. Чтобы заставить говно перестать растекаться, начинают писать обёртки, классы, функции-утилиты и через некоторое время получают такой же Qt, но кривой и непереносимый. Не хеллоуворлдах может и не заметно, но дальше становится понятным, почему в Qt сделано именно так и не иначе.
Пиздец, я Qt осилил тупо по документации (по assistant'у) без книг и чего либо.
Мои трейни тоже как-то спокойно асиливают, а ты видимо тупенький
Из-под винды иногда какие-то ошибки появляются непонятные, то ли в связи с правами, то ли ещё с чем, уже не помню. В линуксе по книге всё нормально собиралось. Попробуй создать не пустой проект, а какой-нибудь готовый, с пустым окном. Он должен сразу нормально собираться.
Qt это не архитектура плюсов, а самостоятельный говноязык DS, не работающий без своих говнотулзов и тормозящий как любая мультипараша. В общем очередная анальная дыра для рабов, чтобы если вляпался, то уже не смог вылезти.
Пошёл нахуй.
На чём тогда писать?
На какой стул сами бы сели?
Подинамил бы полгода и написал бы на NET 6 + MAUI
Культя тоже не надо, учитывая безумную цену и то, что это обосранный диалект С++
Кстати да, там лицензионное соглашение напрягает. Скоро они ещё ужесточат, чтобы все покупали Qt. Раньше можно было просто скачать, а теперь там обязательная регистрация. А вот в VS 2019 наоборот отменили обязательную регистрацию.
> Скоро они ещё ужесточат, чтобы все покупали Qt
Ты скозал? Куча опенсорсного софта сразу в тыкву превратится?
329 бачей в месяц на девелопера для любого прода, или анальная гомоебля с GPL
Чем динамическая линковка не устраивает?
Ты дурак? Там LGPL давным давно (года с 2007го)
Петзольд пишет, что освоить WinAPI можно за 180 дней, а сколько надо времени на Qt?
2-3 дня.
"...чтобы вы не почувствовали себя профессионально и умственно неполноценными, если не все сразу поймете. Если вы раньше никогда не программировали в графической среде, то, естественно, Windows окажется непривычной для вас. Однако, в конце концов вы добьетесь своего." (с) Петзольд
Фрилансь в универе - делай лабы дебилам.
Твои скиллы второкурсника хеллоуворлдщика принесут любой компании отрицательную прибыль. Задрачивай книги, пиши код, на 4ом курсе иди интерном куда-то
Это я понимаю, поэтому и хочу начать быстрее продвигаться в плане обучения, чтобы я мог из себя что-то представлять, например, не на 4 курсе, а уже на 3
единственный совет который тебе можно дать - это не заниматься крестопарашей и все
Учись писать графические приложения, а не консольные. Консоль в 21 веке - это путь в никуда.
Есть большой проект с кучей гугловских либ, сооответственно я пишу свой compile_commands.json где указываю инклюды через clang-cl.exe -ID:\\path
Собственно трабла в том что он собирается своими билдсистемами и все нормально, а автодополнение обламывается, потому что где-то натывается на объявление метода в духе ClassName::min() и ругается на то, что макросу min не хватает параметров, как бы его настроить чтобы он так не делал?
Я решил программировать как мне нравится и не гнаться за всякими модными молодежными штуками. Старый подход к программированию мне понятен, я с ним на одной волне.
Если да,то с чего начать?
Можно напрямую юзать низкоуровневое апи X или Wayland. Правда от одного вида хеллоуворлда для них ты бросишь эту затею.
Если тебе просто графики выводить бери opencv2
>прочие либы
Прочие это какие? Ограничение какое-то шизоидное, ты случайно на ассемблере не пишешь?
OpenGL можешь потрогать
Почему static массив выдает ошибку? Когда убираю static то работает.
//=============================== код
struct Dvacher {
int age;
};
class Dvach {
Dvacher static arr[10]; // 10 штук
public:
void vozrast(int vozrast = 13) {
for (int i = 0; i < 10; i++) { // 10 штук
arr.age = vozrast;
}
};
};
int main(){
Dvach dvach;
dvach.vozrast(15);
}//=============================== код
Не работает лол. Ты в компилятор то загрузил или наобум сказал?
Короче это ошибка линковщика, а не компилятора.
Ты только объявил, а надо еще определить (грубо говоря память выделить)
Допиши перед мейном Dvacher Dvach::arr[10];
Сработало.
>Почему static массив выдает ошибку?
Потому что у тебя только объявление, надо еще реализацию
Или inline static - если новый стандарт
Неужели я так деградировал с python, или я изначально тупой? Каждый раз захожу, смотрю на задачу, сижу 15 минут, выхожу, иду смотреть сериальчики. Что советуете делать в такой ситуации, просто брать решения с коментов(типа само со временём придёт) или как?
Сидеть и решать задачи, а не смотреть сериальчики
>Можно напрямую юзать низкоуровневое апи X или Wayland
Это соотносимо с возможностями Винапи на винде?
Нет. Здесь только графическая полсистема, а виеапи - это вообще всё.
Любые библиотеки являются надстройками над системными api. Не обязательно для винды, на линуксе тоже работает.
Наберись сначала фундаментальных знаний - прочитай книгу или учебник. А решения вообще выписывай на бумажке.
Попробуй для начала решать задачи на бумаге, чтобы понять решение. Нарисуй схемы там, как ты это у себя в уме представляешь. Почитай статьи для школьников по решению уравнений. Писать код в разы проще, когда ты понял, что и как нужно делать, и для чего нужен каждый шаг.
Да.
Над RAM памятью.
Над malloc'ом, который есть надстройка на VirtualAlloc/mmap/sbrk
А, вспомнил, это если ещё constexpr вжарить, будет неявный inline. Не привык видеть не-constexpr статичные поля. Классический пример рамок мышления.
>Ну очевидно, я хочу как на WinAPI, юзать системные вызовы для работы с окошками
Xlib, Xcb, libwayland
можно собрать статиком с libwine :D
БАЗА
На самом деле всё логично. Какие приложения можно написать на С++? Либо консольное, либо графическое.
Консольное приложение ни кому не нужно, потому что все привыкли работать с графическими приложениями.
Как написать графическое приложение? Можно использовать одну из готовых библиотек типа Qt, но под Qt есть всего лишь одна современная книга Шлее, которая хвалится тем, что это суперкнига и прочитав её, ты станешь крутым разработчиком на Qt, но на деле книга пустая, ничего не объясняет. Мало того Шлее ни сколько не интересует психологическое состоянии читателя.
А вот книга Петзольда хоть и старенькая, но основательная. Автор не хвалится, а прямо говорит, что WinAPI - это говно и если вы ничего не понимаете, то это нормально, но за 6 месяцев не мытьём дак катанием, можно изучить WinAPI.
Ващет у майков новый фаворит - тайпскрипт, а шарп в руках попенсорса
Какие могут быть подводные? Дебаг/релиз влияет? На моем компе все работает, интересует в целом.
Второй вопрос - то же, но про передачу указателя на буффер char. Память под него выделяю сам, он не может переместиться как-то неожиданно?
Бред.
А можно и без сиплюсплюс вовсе.
Все эти винапи функции вполне себе прям с ассемблера вызываются.
>Какие могут быть подводные
Так сходу не придумал. Главное - случайно не выгрузить DLL (и такое видал).
>Память под него выделяю сам, он не может переместиться как-то неожиданно?
Нет. Как только DLL загрузилась в вирутальное пространство - она там останется навсегда в одном фиксированном положении. Но если удалять этот буфер тоже надо на другой стороне, то хорошим тоном является предоставление своих функций для удаления объектов, иначе могут быть большие проблемы со статическим рантаймом (см. https://devblogs.microsoft.com/oldnewthing/20161209-00/?p=94905)
>Правда от одного вида хеллоуворлда для них ты бросишь эту затею
Только на вяленом это выглядит дико.
В хЛибе вполне адекватный код на десяток строчек, компактнее чем на Винапи.
Чего его вспоминать? Юзается на работе из internet explorer для работы со специфичным оборудованием.
Ыыыаааыыаа надо писать на шарпе пук среньк
Если тебе вот прям сильно надо надёжности или распределённости, то выдавай вместо указателей дескрипторы.
На винде два разных ABI - дебажный и релизный. Большая часть дебажных либ имеют d в конце названия.
Из-за разных ABI краши тупо рандомные идут
Я не стал обмазываться этими твоими guidами, диспатчами, соклассами, анкнованами, регистри, маршаллингом, OLE, AWT, ATL и прочим калом. Ещё тогда я понимал, что технология тупиковая.
Не так давно попадался кусок кода на DirectShow, который надо было перенести в проект. Такой мутной помойки я давненько не видел. Переписали начисто ибо нахер всё это.
Только если товарищ майор требует открытых кодов. Или в твоём НИИ вернули 2007й.
Или если не знать про динамическую линковку и не уметь читать лицензии.
Хуярпе.
это хитрый план - промоутить електрон
что значит?
using boost::property_tree::ptree;
ptree pt;
можно как то проще работу с файлом организовать? через fstream например то же самое переписать?
В шарпо-треде мне так и не сказали как выводить массив пикселей.
Опять ты со своим эмулятором, во всех тредах что ли спросил?
Там практикуют программирование мышкой, шарп не знает никто.
Тебе дебичу уже более 5 способов предложили. Через плеер в браузере, через gl/dx, через canvas в любой UI дрочильне, через графические движки, через winapi, через всё, что картинки показывает.
Што
>более 5 способов
На хабре был цикл статей как запилить свою рендерилку. Там чувак вообще все снуля делал, ни одной сторонней библиотеки: свои функции отрисовки треугольников, свои функции рисования прямых, своя растеризация, меши и т. п.
И, чтоб не ебать моск с выводом, он все это "рисовал" прямо в файл tga. Сохранялка в tga у него тоже своя была.
Так он не рендерилку просит, а натягивание кадра в виде массива байт на окно. И максимум что ему надо это написать фильтрацию, чтобы не хардкодить размер окна. Для натягивания есть масса способов, но он копротивляется.
Я прост упомянул еще 1 способ рисования.
У него есть массив пикселей и это все, что нужно для тга.
Причем для пердолинга с тга достаточно статью на русской википедии прочитать, никакого матана.
Я хочу создать эмулятор 8-разрядной ЭВМ, чтобы сбежать в уютный мир 8-бит от ужасов современного программирования.
Тогда закажи у кого-нибудь. Выйдет довольно дорого, но сам писать будешь очень долго.
Я разве говорил, что мне надо быстро? Я ещё со школы обдумываю эту идею. Сейчас просто появилось свободное время и решил позаниматься плотнее.
И что он будет делать со своей консольной поделкой? Реальный Коммодор 64 имел графический режим и в консоли он не сможет реализовать графику.
Предвосхищая, ваши возражения скажу, что консольное приложение отличается от графического принципиально. Если консольное - это непрерывный поток инструкций самой программы, то графическое имеет событийный механизм.
Как можно сделать объединение, вычитание, пересечение трехмерных геометрических объектов. По сути нужно объединить через логические операторы их условия на ограничение геометрической области, но не понимаю как это реализовать в ООП.
Например, имеем
object 1
obj1. cond x>1, y>2, z>3
object 2
obj2. cond x<4, y<3, z<6
object 3
obj3. cond y=3, z<5
etc
необходимо создать тело путем их объединения
obj4 = object1+object2+object3
obj4.cond x>1, y>2, z>3 or x<4, y<3, z<6 or y=3, z<5
Через наследование это можно провернуть?
Ну твои объекты это частный случай boundbox. Можешь не ебать мозг и дёрнуть готовую реализацию. Булевы операции являются частью интерфейса самого boundbox.
Constructive Solid Geometry же
>как это реализовать в ООП
Какой-нибудь паттерн Composite наверняка, но не думаю, что ляжет хорошо. Скорее всего для этого есть специализированные структуры данных, которые лучше применять.
примерно так
struct Callbacks {
void (*method_a)();
...
};
struct ServiceProvider {
static ServiceProvider* Create(Callbacks cb);
virtual void method_a() = 0;
...
};
Когда вызывается ServiceProvider::Create(cbs), где-то в глубине происходит нечто такое:
struct ServiceProviderImpl : ServiceProvider {
ServiceProviderImpl(Callbacks cb) :
cbs{cb} { }
void method_a() override {
cbs.method_a();
}
...
Callbacks cbs;
};
ServiceProvider::Create(Callbacks cb) {
ServiceProvider* sp = new ServiceProviderImpl(cb);
return sp;
}
Интересует, как называется, если у неё есть какое-то оффициальное имя, для чего хороша, где применяется. Может это поттерн какой то?
примерно так
struct Callbacks {
void (*method_a)();
...
};
struct ServiceProvider {
static ServiceProvider* Create(Callbacks cb);
virtual void method_a() = 0;
...
};
Когда вызывается ServiceProvider::Create(cbs), где-то в глубине происходит нечто такое:
struct ServiceProviderImpl : ServiceProvider {
ServiceProviderImpl(Callbacks cb) :
cbs{cb} { }
void method_a() override {
cbs.method_a();
}
...
Callbacks cbs;
};
ServiceProvider::Create(Callbacks cb) {
ServiceProvider* sp = new ServiceProviderImpl(cb);
return sp;
}
Интересует, как называется, если у неё есть какое-то оффициальное имя, для чего хороша, где применяется. Может это поттерн какой то?
Но почему Java и не надо делать?
И тут ведь наоборот типично сишно-крестоёбские штуки используются.
Потому-что в джаве в основном используются такие вот ХУЕПАТТЕРНЫ.
А так - это выглядит как обычный полиморфизм, только зачем-то усложненный. В С++ оверолл это все антипаттерны
Это что-то типа pub-sub на одного вызывающего. Но зачем-то с кучей виртуальных методов и всего такого.
А, и без православного сишного "замыкания для бедных" в виде void user_data, он же void opaque, он же void *handle, который должен передаваться в указатель на функцию.
Моё предположение, что это нужно, чтобы скрыть реализацию. Совсем скрыть. В либах можно оставить только голый интерфейс и фабричный метод, что внутри, вообще непонятно. Хорошо для пипиетарщины. Ну и полиморфизм без полиморфизма. Поведение можно изменить, а класс всегда остаётся один.
Но я не очень уверен в своих выводах, поэтому запросил помощь экспертов. В любом случае, это не то, что я хотел бы сделать. Это уже сделано кем-то и для меня данность, а я только разбераюсь.
Ну да. Единственный момент, что у тебя грани могут задаваться как строгое неравенство <>.
int maxint = std::numeric_limits<int>::max();
int minint = std::numeric_limits<int>::min();
struct point { int x,y,z; };
struct bbox {
point bot, top;
bbox& operator+(const bbox& ) {...};
bbox& operator-(const bbox& ) {...};
};
struct object
{
bbox box;
object(point& p1, point& p2) : box(p1, p2) {};
object& operator+(const object& obj) {return box + obj.box;};
object& operator-(const object& ) {return box - obj.box;};
};
// obj1. cond x>1, y>2, z>3
object { {1, 2, 3}, {maxint, maxint, maxint} };
// obj2. cond x<4, y<3, z<6
object { {minint, minint, minint}, {4, 3, 6} };
// obj3. cond y=3, z<5
object { {minint , 3, minint }, {maxint, 3, 5} };
object obj4 = obj1 + obj2 + obj3;
Дальше сам.
Ну да. Единственный момент, что у тебя грани могут задаваться как строгое неравенство <>.
int maxint = std::numeric_limits<int>::max();
int minint = std::numeric_limits<int>::min();
struct point { int x,y,z; };
struct bbox {
point bot, top;
bbox& operator+(const bbox& ) {...};
bbox& operator-(const bbox& ) {...};
};
struct object
{
bbox box;
object(point& p1, point& p2) : box(p1, p2) {};
object& operator+(const object& obj) {return box + obj.box;};
object& operator-(const object& ) {return box - obj.box;};
};
// obj1. cond x>1, y>2, z>3
object { {1, 2, 3}, {maxint, maxint, maxint} };
// obj2. cond x<4, y<3, z<6
object { {minint, minint, minint}, {4, 3, 6} };
// obj3. cond y=3, z<5
object { {minint , 3, minint }, {maxint, 3, 5} };
object obj4 = obj1 + obj2 + obj3;
Дальше сам.
SDL/glfw/SFML засраны мусором (нахуя мне там всякие вулканы, софтрендеры и прочее говно?)
Мне надо только создание окна, получение событий окна, событий ввода, и получение хендла окна с которым я уже и буду сам работаь
>Есть минимальная мультиплатформенная библиотека для создания окна и клава-мыши?
OpenGL glut
>получение хендла окна с которым я уже и буду сам работаь
Как ты будешь это делать кроссплатформенно-то?
Какие-то у тебя шизоидные запросы. Ты хочешь взять половину графического тулкита? Если тебе хочется попердолится вручную рисовать окошки, то получать события окна и клава-мыши сравнительно просто.
>Как ты будешь это делать кроссплатформенно-то?
Во всех системах у окон есть хендл (на виндах который HWND)/
Вот например через SDL это можно так делать, как на пикче.
>OpenGL glut
Обмазано говном OGL
>>Ты хочешь взять половину графического тулкита?
Не понял вопроса.
Мне надо:
- создание окна
- получение сообщений о том что окно свернуто, развернуто, закрыто, активно и т.д
- получений сообщений от клавы и мыши
- мультиплатформа
- отсутствие говна типа звуковых библиотек, впихнутых туда вулканов и созданий контекстов OGL, или вообще софтрендера на DX11 (как в SDL где 90% кода - это этот ебучий нахуй никому не нужный софтрендер)
Мне нужен минимализм, чтобы было минимальное. И еще, мне не нужен OGL/DX/Vulkan - я не игру делаю. У меня вообще другая задача не связанная с графикой
Ну так возьми glut и вытащи оттуда то, что тебе нужно. Он же в исходниках. Кода там мало.
Просто не используй то, что не нужно. Или ты каждый байт экономишь? Зачем тогда юзать кресты, если сишка тоже тьюринг-полная и не засрана всяким говном?
Ему нужна мультиплатформенность.
Ты не перепутал с предыдущим тредом?
SFML состоит из 5 модулей, физически - это отдельные библиотеки. Ставь какие надо.
Плюс в пределах модуля есть куча более специализированных подзаголовков.
>Мне надо:
SFML/Window для окон и SFML/System для клавомыши.
>отсутствие говна типа звуковых библиотек, впихнутых туда вулканов
Просто не ставишь графический и аудио модули.
Правда, текст и шрифты лежат все же графическом модуле. Но и их можно взять отдельно, если подключать не весь заголовок графики, а только нужные.
>Во всех системах у окон есть хендл (на виндах который HWND)
Окно нужно чтобы туда что-то показывать. Как ты собираешься кроссплатформенно выводить что-то в окно?
>Мне нужен минимализм, чтобы было минимальное.
Минимальное что? Пока ты предлагаешь переписать кучу библиотечного кода (т.е. доступного всем приложухам) на кучу своего. Не похоже на минимализм
>И еще, мне не нужен OGL/DX/Vulkan - я не игру делаю.
Если ты уж захотел попердолится в кастомный тулкит, то хотя бы сделал бы это с пользой для себя. Брезенхамы и прочие эллипсы на ЦПУ уже никому не нужны, отрисовку даже UI пытаются вынести на ГПУ
Почему ты такой шиз? Все, что ты не будешь использовать в своем говне просто линкером вырежется из экзешника
Что-то я при беглом осмотре не нашел способов там создать sf::Texture или что-то подобное напрямую из GPU памяти
>Есть какая-нить простенькая либа для рендера всяких фигур и шрифта на GPU?
Если нужно сделать плюс-минус красиво и многоязычно, то проще отрендерить шревты на ЦПУ и потом загрузить текстурой.
Если сойдет мноноширинная кириллица-латиница, то можно поебаться c битмапами (грузим весь шрифт как текстуру, а потом через UV координаты вытаскиваем нужные пиксели)
Да я все это понимаю что можно загрузить текстуру со шрифтами и реализовать свой рендеринг текста и фигурок, но хотелось бы избежать еботни, т.к. времени на это все нету совсем. Хотелось бы чтобы я написал sudo apt install libname-dev и потом в коде написал
#include <libname>
...
libname::Texture tex(width, height, &cudamem, stride, cudamemsize);
libname::drawRectangel(tex, p1, p2)
libname::drawText(tex, "Text");
вот что-то типа этого
Лучше сделай по-простому. Рендерни текст на cpu, залей на gpu и наложи в виде маски (это всяк дешевле, чем целый кадр с gpu тянуть).
Потом уже рисёрчем занимайся. У NVIDIA есть под cuda рендерилка шрифтов. Есть возможность шарить кусок памяти между gl и cuda, чтобы рисовать произвольную геометрию. Но ты со всем этим вдоволь наебёшься, я тебе гарантирую.
Cairo совсем не про это, она большая и очень старая.
Pango?
Он же с обычной ОЗУ работает, а не с памятью гпу.
НЕНАВИЖУ ЭТУ БЛЯДСКУЮ КАПЧУ, ЗАЕБАЛСЯ С ПЯТОГО РАЗА ВВОДИТЬ
Ну конечно же!
>рендера всяких фигур и шрифта на GPU
Я только про SLUG знаю про рендер шрифтов прямо в гпу, но он платный. Можешь в эту сторону копать. Капча, угомонись
Это для смузихлебов. Вдруг мне надо что-то не стандартную либу подключить? Все используют cmake. К тому же логотип у vcpkg на порядки хуже чем у cmake
Смузи уже давно протёк в C++. Пакетники и docker обычное дело.
Как насчёт использовать vcpkg вместе с cmake?
cmake_minimum_required(VERSION 3.15)
project(app)
find_package(SFML 2 COMPONENTS system window graphics REQUIRED)
add_executable(prog prog.cpp)
target_link_libraries(prog sfml-system sfml-window sfml-graphics)
$ cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake && cmake --build .
Мне лид сказал отложить, я её и не делал некоторое время
>Это для смузихлебов.
Это для всех вменяемых людей. Нахуя что-то делать руками, когда есть автоматизация, которая все сделает за тебя и лучше? И да, как подметили - это все с симейком интегрируется без проблем.
В С++ есть конечно идея бесконечного NIH синдрома, и прочего карго-культа пердолькинга, но не надо так.
Согласен с тобой. В современном мире нет причин использовать неудобное и неэффективное, стоит отбросить NIH синдром и просто воспользоваться функционалом студии. Я так и сделал. Советую всем
>В современном мире нет причин использовать неудобное и неэффективное, стоит отбросить NIH синдром и просто воспользоваться функционалом студии.
Какие же это мудрые слова
К слову, я так и не нашел способ зафиксировать результат работы этого nuget в шаблоне проекта.
Не вырежется, а просто не попадёт туда.
Лучше ничего не делать...
Не использовать неудобное и неэффективное, стоит отбросить NIH синдром и просто воспользоваться функционалом студии.
биреш @ пишеш
ПОра бы уже додуматься отбросить мертвую джаву с плюсами и изучить тайпскрипт с растом
Ну так съеби в растопетушиный тред, че ты тут забыл-то
Возможно ли без особой ебли сделать это:
printf("%3d %6.2f %-6d\n Hello World!",a,b,c);
без си библиотеки?
Нет, потому что библиотека I/O в крестах спроектирована левой пяткой эпилептика в припадке. Ходя в двадцатых появился std::format https://en.cppreference.com/w/cpp/utility/format/format
>о при одной мысли о том, чтобы что-то написать на плюсах сложнее калькулятора - в дрожь бросает
Не поверишь, у меня также.
мимо почти шесть лет коммерческих крестов
Люблю использовать POCO https://pocoproject.org/ вместо буста (дома, на работе всё же буст везде). Я нормален? Нравится их кодстайл и какая-то ламповость, без диких шаблонных наворотов.
Как на счет conan? Помаленьку занимает нишу пакетника для крестов, хорошо интегрируется с cmake, даже свой репо пакетов держать не понадобиться - скорее всего, твой sfml есть на conan.io.
Петзольд старается успокоить читателя в своей книге, чтобы он не нервничал, когда обсуждаются сложные вещи. А Шлее в начале книге пиарит, какой Qt крутой, а потом просто перечисляет классы Qt. Типа, этот делает то-то, это другое. И читатель ничего не понимает из этого описания и чувствует себя профессионально и умственно не полноценным. Но на деле это Шлее хреновый писатель.
Да я в студии подключил. Нахер эти бессмысленные пердоли ради пердолей
Мои профессиональные и умственные навыки на довольно высоком уровне, а если я чего-то не понимаю, то значит информация изложена плохо. Немаловажен фактор, что писатель старается подбодрить своего читателя, и тогда информация воспринимается лучше, чем скупое и бездушное описание библиотек как в книгах Шлее.
Можно. Смотри iomanip. Только это всё равно довольно ограниченно, если правильно помню.
1. сишная либа вложена в плюсовую
2. советую вкурить многоязычность(интернационализацию-локализацию) и понять зачем там нужны printf-подобные (а точнее плейсхолдерные) форматтеры
Я извиняюсь что вкатываюсь со своим дерьмом, но почему нигде не указаны книги Стефана р. Дэвиса? Дебилам оче помогает разобраться в языке.
В росо, как любом уважающем себя проекте, куча своих велосипедов, типа AutoPtr, Optional и т.п., что уже есть в STL - что-то давно, а что-то недавно. И на мой взгляд глупо разменивать вездесущие плюхи STL на какую-то маргинальщину. Ну а буст - это полигон для STL. Если что-то есть в STL и где-то ещё, то без веских причин я бы всегда отдавал предпочтение STL по соображениям переносимости, документированности и, возможно, но не факт, эффективности. Хотя у поки с переносимостью достаточно хорошо, не говоря о том, что там есть вещи, которых нет ни в бусте, ни тем более эстээлечке.
>C++ для чайников
Потому что в этой книге "для чайников" только название и смехуечки автора, а содержательный материал если и отличается от любого другого учебника, то исключительно в худшую сторону?
В стл даже ебаных сокетов нет, что там графика.
STL - standart teamlead livepods. Где тут написано хоть упоминание про графику?
Потому что не надо делать 3рдпати либами.
Лучше бы не делали, ты сам знаешь юзабилити этих говностримов.
потому что stl (standart template library) - это не более чем плод извращенной фантазии одного сходящего с ума ученого о обобщенных но сохраняющих типизацию структурах данных и алгоритмах, некая фантазия о многократной применимости единожды написанного кода
>то исключительно в худшую сторону
Как по мне так написано вполне доступно и ясно для рядового читателя.
error: ‘tops’ was not declared in this scope и им подобные выскакивают
Только не ругайте, знаю что код плохой.
https://onlinegdb.com/wCAajq5vG
ну так их правда нету в том скоупе
В c64 событийное не нужно, графический режим там работает так - луч бежит по электронно-лучевому монитору, а процессор примерно каждые полтакта лочится и пересылает по видео каналу цвет текущего пикселя, это если очень упрощенно. Событийные там только прерывания, которые по сути срабатывают при совпадении текущей координаты луча с требуемой. Сам код можно писать абсолютно линейно, в духе - начался кадр, начинаем выводить пиксели, сколько успели нарисовать столько успели.
Для того чтобы учить студентов хелло ворлды писать.
Мы обсуждаем эмулятор, а не реальный с64. Я знаю как устроены 8-разрядные ЭВМ, но их устройство ни как не влияет на написание графических приложений в современных ОС. Они не спрашивают чего ты хочешь, а ставят чёткое условие: хочешь графику - изволь писать по нашим правилам.
Я уже приводил в пример cv2, там тупо вызываешь отрисовку и все.
В общем-то и в sdl2 так же, там же события системные и ввод, а вывод можно тупо в while ебошить.
Почитать какие-нибудь туториалы по modern c++
https://habr.com/en/post/182920/
Посмотреть презентации
https://www.youtube.com/watch?v=UsrHQAzSXkA
Консолька отключается.
Не надо тут. Именно STL и её модель итераторов - очень крутая штука. Степанов не зря старался, когда её делал. Но STL подводят две вещи:
1) Не очень удачные остальные части стандартной библиотеки
2) Многие вещи надо было всё-таки делать на уровне языка, а не как обычный код. Тогда бы возможно ушли километры сообщений об ошибках. Но Комитет считает иначе.
Это же от реализации зависит, не?
Мы про rest api. Но ты продолжай.
>Почему ты такой шиз? Все, что ты не будешь использовать в своем говне просто линкером вырежется из экзешника
Голое окно на WinAPI занимает меньше 1мб оперативной памяти в релиз сборке
Голое окно на SDL 2 занимает 60мб оперативы в релиз сборке
Что же там такое засирает память?
>>085906
>SFML состоит из 5 модулей
В SFML прибит OpenGL, его контекст там создается даже если нахуй не нужен
тебе в говнопаблики типа ТИПИЧНЫЙ ПРОГРАММИСТ, где уже 10 лет обсасывают КАК ЖИ СМИШНО ПЫХАПЕ ХАХАХ ПИХАПЕ
>Голое окно на SDL 2 занимает 60мб оперативы в релиз сборке
Бред. Может у тебя там текстура под шрифт выделилась?
Инкомплит тайп == забыл инклуд.
>В SFML прибит OpenGL
Там прибит не весь опенгл, а только необходимый минимум.
Чтобы пользоваться прелестями опенгл, его библиотеку нужно устанавливать дополнительно к сфмл.
>контекст там создается даже если нахуй не нужен
Для рисования окна в любом случае какой-то контекст необходим. Если не опенгл, то будет какой-то другой.
Найти что-то легче сфмл - это надо очень постараться. При этом у сфмл есть хорошая документация и с ним ты пишешь на c++, а не на сях.
Кто критикует? Ссылки в студию. Там везде , кроме std::function в параметрах шаблона есть Allocator: не нравится - подставляй свой.
>остальные части стандартной библиотеки
Расскажи поподробнее пожалуйтса какие части считаешь неудачными. Чем заменить неудачные части?
>Многие вещи надо было всё-таки делать на уровне языка
На джаве исправили это и есть ли преимущества где-нибудь? И это не начала срача языков, сразу говорю. Множественное наследование например посчитали не нужным. Что еще?
Так ты тредом ошибся, тут С++
Говно решение - код превращается в помойку, в нем постоянно ломаются платформозависые куски кода
Лучшее решение (к которому многие с недавних пор и начали прибегать):
WIN32параша.cpp
POSIXпараша.cpp
параша.h
В заголовке общий публичный интерфейс. В cpp конкретная платформозависимая часть, компилятор берет нужный cpp.
Для каких-то специфичных платформенных полей классов юзать идиому pimpl, либо наследование (но мне больше pimpl нравится)
Да давно так делают. Берётся фабрика, фабричный метод и в нём ifdef. Недостатки фабрик тебе наверняка известны.
Чем мидл отличается от джуна? Какими знаниями надо обладать чтобы быть выше джуна? Где грань?
Двачую. Давно никаких портянок ифдефов, все делает билдсистема.
опыт и самостоятельность
Ты же знаешь что такое WIF (биткоин)?
Если знаешь, то вероятно ты знаешь и про то, что из WIF можно легко получить Bitcoin-адрес.
Задача следующая.
Я хочу собрать в .txt файл список из 15000 Bitcoin-адресов с самым большим балансом.
Затем мне надо напогроммировать скрипт, который будет в многопоточном режиме, используя мощности видеокарты, подбирать совершенно рандомные WIF, на лету конвертировать их в Bitcoin-адреса, и искать каждый Bitcoin-адрес в txt файле. Если Bitcoin-адрес окажется в списке txt файла (я знаю, что он там никогда не окажется, можешь даже не писать, анон), скрипт скопирует Bitcoin-адрес и подходящий к нему WIF в отдельный txt-файл и уведомит меня о найденном ключе, продолжая искать соответствия без остановки.
Мне интересно, с какой скоростью (проверок / в секунду) эту работу будет выполнять RTX3090 и GTX1660Ti, по отдельности каждая. Т.е. подбор рандомного WIF, получение из этого WIF Bitcoin-адреса, поиск его в txt файле среди 15000 строк. Все это в многопотоке. Можно ли хотя бы ориентировочно рассчитать скорость?
Сопутствующие вопросы:
Проц, я так понимаю, в данном случае будет простаивать без нагрузки и соответственно нет никакой разницы, какие у него вычислительные возможности?
Объем ОЗУ тоже не имеет значения? Иначе говоря будет ли нехватка ОЗУ (например, 16 Гб) тормозить работу скрипта?
Скрипт на чем писать, чтобы работал максимально быстро и стабильно? C или C++? Или вообще что-то другое?
Заодно хотелось бы узнать, во сколько вы бы оценили написание такого скрипта.
Да.
Это сложно для этого треда, анон. Сдешние способны только потролить ссылкой на студию когда просишь совета по еклипсу или еще какую ерунду написать
малолетним дебилам здесь не рады, это не для тебя сделано и не для таких как ты. пошёл нахуй с тупичка
Собстно, это суровое наследие суровых времен. В модерновом С++ никто с памятью напрямую не работает, или очень серьезно всё это оборачивают.
А вот референсы\указатели - это есть везде и всегда, просто спрятано.
Эта хуйня к треду не относится, тут вопрос в предметной области, которую можно сделать хоть на пистроне
В более современных языках есть референсные типы (любые не примитивные) что по сути то же самое только с синтаксическим сахаром. Следовательно ты даже их не понял.
Можно работать с любой ячейкой памяти и без костылей в жопе как в расте.
UB UB ГРОБ КЛАДБИЩЕ
Я просто не понимаю почему нельзя просто пользоваться переменными, а нужно лезть в ячейки памяти и что-то там искать. Я очевидно новичëк, но для меня вся эта тема с использование поинтеров для получения данных напрямую из памяти иррациональна. Если тебе надо хранить информацию, то просто создай переменную, но я видимо чего-то не понимаю.
Представь огромный объект из 100500 полей, вложенныз массивов и других объектов. Каждый раз будешь это всё копировать, когда надо передать в другую функцию?
Засунул свой unsigned long long тебе в защищенную на деле не очень область памяти. Проверяй.
Statement - эир то, что некоторые переводят как оператор, хотя где-то инструкция. Это только часть синтаксиса.
Дружище, никто тебе просто так не будет давать работу, скорее всего тебя хотят забрать в рабство или типо того. Ты реально думаешь, что кто-то будет пытаться дать тебе работу?
Когда предложение настолько СЛАДКОЕ, что аж платят лишь бы кто-то к ним пришел, агасики
Ну допустим по сети к тебе пришёл медиа пакет. Это кусок памяти, который надо разобрать на "переменные", прыгая по его адресам.
пойнтеры, сладенький, дают возможность косвенного обращения
это фундаментальная особенность, реализованная почти во всех яп
пойтеры, ссылки, срезы - все это одно и то же по назначению, отличается лишь семантикой и синтаксисом
>Поясните за рекрутинговые агенства зачем они нужны, стоит ли с ними связываться и какой профит работодателю от них?
Поясняю по хардкору: рекрутессы закрывают вакансии галер за бабки. Т.е. за каждого нанятого гребца (после испыталки), рекрутесса получает 1000$-2000$-3000$ в зависимости от уровня и актуальности вакансии.
В некоторых, особо сладких случаях, рекрутесса готова продать пизду пошарить часть премии лишь бы только устроился мне предлагали.
>>089235
>никто тебе просто так не будет давать работу, скорее всего тебя хотят забрать в рабство или типо того
Кекнул с этого рывалюционера
>c++
Земля тебе пухом, братишка. На нем пишут все и всё, в итоге тебе нужно будет знать не просто c++, а все его стандарты с тончайшими различиями, иначе грош цена будет всем твоим знаниям.
Почему бы тебе не прочесть книжку для новичков? Там не только написано, как всем этим добром пользоваться, но ещё и даются объяснения, что для чего нужно, и примеры задач.
Например
1. При объявлении указателей используется ⚹, которая их не разыменовывает, в отличие от обычного использования.
2. Запись a[5] при объявлении массива обозначает выделение памяти и вполне приемлема, но такая же запись для того же массива a[5] в контексте синтаксиса использования обозначает уже доступ к элементу массива и неприемлема, поскольку выходит за границы массива.
Где может возникнуть проблема у новичка?
Например, при использовании функций/методов. В параметрах функции используется синтаксис объявления, в аргументах вызова функции - синтаксис использования. Так в прототипе функции f1(int &value) знак & означает ссылку на тип int, в вызове функции f2(&value) знак & обозначает уже адрес переменной value.
Может для вас и хуйня, но меня изрядно запутывала такая разница, пока я четко не уяснил, что есть два вида синтаксиса.
Всё нормально. Это префиксная и постфиксная формы использования лексемы. В объявлении f(int&) знак & сзади, у взятия адреса &int - спереди. Аналогично операторы инкремента A++ и ++A разные.
Какой язык, если не С++, даст кратчайший путь к сеньорству в ФААНГ?
Я знаю что язык лишь инструмент, нужно учить само программирование, но подскажите кратчайший путь. В интеренте так много видео-обучалок и гайдов, глаза разбегаются, не могу сонцентрировться.
Я умею учиться программированию только на практике, делая что-то, например окно с анимацией. В этих всех книжках всë очень теоретично и сложно понять как это использовать на практике.
пошёл нахуй с этого треда
>Адекватно ли будет работать какой-нибудь переходник com to usb ?
Да. Программа видит его как обычный ком порт, только драйвера не забудь поставить. Постоянно пользуюсь.
пасиба!
В контексте объявлений [], ⚹ и порч. - это совершенно другие операторы - declarator operators.
Нужно просто посчитать количество единиц
Я понимаю, что прикольно издеваться на питоном и его фанатами, но я никогда не поверю, что любой человек, знающий базовый синтаксис любого языка программирования не напишет это.
Я именно по практической книжке и учился C по часу в день ака C за 21 день. Там учат, допустим, 2д массивы, дают упражнения и задания, что это, зачем, как использовать. Все знания из этой книги пригодились в будущем, вопросов уровня твоих у меня не возникало (кроме вопросов по энумерациям, про которые в книге не было, емнип). Наверняка в других книжках для полных новичков так же всё понятно рассказано.
Алгоритмы на литкоде дрочи. А язык любой, кроме совсем обскурной хуйни типа хаскеля.
в голосину с этого решателя физзбазза
Ты или else сними, или FizzBuzz надень.
Если бы было по-русски, то я бы помог.
>А язык любой
Если любой, то почему кто-то выбирает сложные типа С++? Ведь Го, Питон гораздо лечге, Джава тоже легче
Ты все верно понимаешь. Если мы говорим о чистом соотношении деньги\сложность - то и питон, и го, и джава правда лучше.
Но, допустим, я - терпеть не могу питон, это отвратительное говнище. А С++ начал учить из-за того, что мне было интересно.
>терпеть не могу питон, это отвратительное говнище
почему?
Вообще моя мечта - большая красивая шикарно оптимизрованная ААА оупен ворлд игра, круче чем Ведьмак 3 и ГТА 3-ВС-СА-4-5. Я слышал что С++ для ААА геймдева но учить не хочу
> почему?
Я не могу в динамически типизированные языки, а питон еще совсем не похож на то, к чему я привык, как минимум из-за этих рофлопробелов
> Вообще моя мечта - большая красивая шикарно оптимизрованная ААА оупен ворлд игра, круче чем Ведьмак 3 и ГТА 3-ВС-СА-4-5. Я слышал что С++ для ААА геймдева но учить не хочу
Ну, собстно да. Но таких вакансий, типа девелоперов движка - раз два и обчелся. в РФ вообще этим 2 конторы занимаются. Unigine в Томске, и Saber в Питере. Ну мб мейлру еще какой конечно.
А если делать именно игры, а не писать двигло - то это вообще юнити, где С++ нахуй не сдался
Ну это все еще серьезные доменные знания, С++ там можно на на слабомидловском уровне знать
WarGayMing ещё колупает BigWorld на с++. Но там вся работа это одно большое легаси, которое должно работать на древних пеках (dx12, vulkan, rtx и прочее там не практикуется).
Saber как контора говно, Unigine под проекты для товарища майора, мейлру часть своего говнеца аутсорсит, так что всё совсем плохо.
Пускай у тебя в числе 3 биты выставлено. Тогда самое маленькое число: 0b00...0111, а самое большое: 0b111000...0. То есть
numbits = popcnt(x)
lowest = (numbits == 32) ? ~0 : (1 << numbits) - 1 // сдвиг ровно на 32 для uint32_t - UB нахрен, поэтому либо так, либо игрища с приведениями к uint64_t и обратно
highest = (numbits == 0) ? 0 : (lowest << 32 - numbits)
В танках может быть и да, но на других проектах - нет. Именно легаси говнецо по их же словам.
>Хочу переехать в США и зарабатывать 400к/год+. Это позиция сеньора в ФААНГ
400к+ тебе особо платить никто и не будет. Уровнь сеньора на пикрилах. Еще учти налоги, страховки - получишь 250к - максимум 300к на руки в лучшем случае.
>Какой язык, если не С++, даст кратчайший путь к сеньорству в ФААНГ?
В фаангах предполагается что ты выучишь любую технологию. Там не используются стандартные для всех языков фремворки - в фаангах очень любят писать велосипеды. Но да, если что-то очень высоконагруженное писать, то С++ норм выбор.
Но скажу тебе, в фаанги очень большие очереди желающих со всего мира. С почти 100% вероятностью ты никогда не сможешь туда попасть. Если просто хочется много денег, то наверное проще замутить айти бизнес в России, если выстрелит, то будешь получать даже больше чем 400к долларов в год. Ну или родиться в следующей жизни в семье какого-нибудь нейрохирурга в США, который оплатит тебе медицинское образование и устроит в хорошую клинику, и ты сможешь получать по 500-600к+ в год как и твой батя. Да и в целом в российской медицине тоже есть варианты заработать, если есть бабки на образование и хоть какие-то связи.
Этот дело говорит. Население стареет что тут, что там. Бумеры скоро дружно начнут ходить по врачам и делать хорошую кассу. А потом ты просто будешь хорошо экономить на посещении врачей сам, имея связи и зная, куда дать на лапу и где сделают хорошо.
Все что ты вспомнил, и есть самое минимальное что существует из кросплатформенного.
Если действительно хочешь минимального, пиши сам, обмазайся ифдефами и вперед, это кстати не сильно сложно, сам писал минимальные запускалки на винапи и иксах, самое сложное наверное это мапинг всяких кодов с кулавиатуры. Ну или выдерни из glfw например то что тебе нужно и скомпиль.
> С почти 100% вероятностью ты никогда не сможешь туда попасть.
Ну, кстати, нет. Полгода задрачивания литкода - и все, мидлом в фаанг ты попадешь. Сениором уже сложнее, там system design интервью
Лол кринж SHEEIT_CODE это путевка в жизнь!
Да, все хипстерские языки переживёт.
Строки заканчиваются /0. Если тебе надо сделать копию, то нужно скопировать текст и в конец добавить /0. Если в while не будет -1, то цикл скопирует последнюю букву, затем увидит /0 и завершится. При этом строка to останется без /0 на конце.
Само решение добавить таким способом в конец to /0 проблемное, потому что на первой итерации while происходит чтение за пределами блока from. А там может быть /0 и тогда вообще ничего не скопируется.
понятно, спасибо большое
Я про чтение за пределами массива (from - 1).
Быстрый фикс - это сделать do { ... } while (⚹from);
Писечку-асечку
C++ раньше назывался Си с классами. Немного освоить С не помешает.
Получается что ты делаешь практику C вместо С++ и возмущаешься что приходится учить С вместо С++.
А точно. Там же автоматически нуль терминатор подставляется.
Ну там же много старых библиотек, где используется с код, нужно быть готовым, нет?
Куча инструментов написано на Си изза чего его полезно знать. Но он на самом деле прост, если овладел плюсами, так что начинай с плюсов
Насколько мне объясняли это вообще один язык. Классы возможно заменить на typedef, темплейты предополагаю перегрузкой а stl возможно чем-то другим не знаю чем и отличие будет только в библиотеках.
typedef не может заменить класс, так как содержит только данные. Перегрузки в Си нет странно кстати почему. stl может и можно заменить, но в стандартной либе нет. Вот разберись с си тут канал для начала не плох https://www.youtube.com/channel/UCz29nMCtFP5cuyuLR_0dFkw
> Перегрузки в Си нет странно кстати почему
Потому что для его запливания пришлось бы делать name mangling, и все соглашения о вызовах пошли бы нахуй => никакого FFI. Его отсутствие тем и хорошо, что любой другой язык может подгрузить сишную либу и искать функции тупо ио их названиям без ебли с кодированием суффиксов в зависимости от сигнатуры.
Это всё сахар. Раньше писали вообще на ассемблере. С и так дофига упростил в программировании, но программисты обленились, что им лень даже написать лишнюю функции и хотят, чтобы компилятор за них писал. Скоро наверно вообще программирование сведут к кликанью по красивым картинкам.
щас бы быть анальной шлюхой синтаксического анализатора, наверное и sum(int a, b) выносишь за компилятор, ведь тебе известно все 200к строк в программе и ты можешь похожие функции просто вывести за границу классов и структур.
>кликанью по красивым картинкам.
и заебись, будут просто подбирать инструмент и юзать а не дрочить дебагер поставил написал ли я указатель или ссылку ебанул
>Раньше писали вообще на ассемблере
Поридж, плез.
15 лет бейсико- и паскале-подобных полноценных языков
1954 FORTRAN
1958 ALGOL
1959 COBOL
1962 SIMULA
1964 BASIC
И только 1969 C, основанный на CPL 1963
Алсо
Simula 67 introduced objects, classes, inheritance and subclasses, virtual procedures, coroutines, and discrete event simulation, and features garbage collection.
На них писали прикладные программы, а системные на ассемблере. Да и порой ради эффективности приходилось всё равно переписывать программы с ЯВУ на ассемблер. И я знаю о чём говорю, потому что в детстве учился по старой литературе тех лет.
Первым языком ВУ пригодного для системного программирования стал как раз С.
Тебе с какой целью го нужен? Тот анон сверху видимо про бэкенд, там го заменяет джаву и шарпы.
Если системщина то нахуй не нужен.
Если изобретешь машину времени - то охуенная идея
Оно все программизм, кроме рисования формочек на жсе
Что программизм, а что нет сразу выкинь из головы - это инфантилизм. Я например пишу для души игоры на UE, раньше работал джавистом, но перешел на React JS.
Сказал челик из под операционки, написанной на С++ и браузера, написанного на С++
Ну то есть это для создания каких-то ебически сложных проектов на 100 ебал дедов-с++шеров, понятно
Скорее, для мейнтенанса. Новые продукты редко пишут на С++ нонче.
Даже я, конченая С++блядь новые продукты стараюсь на шарпе писать, т.к. тупо сильно проще и быстрее. А на перф нам похуй, обычно.
>игры пишут на юнити
Игры пишут на самописных движках, там с++.
>для микроконтроллеров есть с
Микроконтроллеры на с++ можно писать.
https://www.youtube.com/watch?v=c9Xt6Me3mJ4
https://twitter.com/seanbax/status/1413731054742016000
https://twitter.com/seanbax/status/1412276471985586186
https://twitter.com/seanbax/status/1411331612260945920
Ядро да, а вообще все остальное вокруг - на С++
Сейчас бы в 2к21 присаживаться на чей-то васянский NIH DSL
Значение по умолчанию, когда его не передали
https://pastebin.com/uTYz59Jx
женя лох))
Поставил С++17 но компилятор не видит. В чем может быть проблема?
Переменная из за которой ошибка:
inline static size_t m_min_size = 0;
> inline variable
Бля, каждый раз захожу в крестотред и узнаю что-то новое, шизики из комитета совсем ебанулись? Пускай лучше стандартную либу пилят, сука.
>Бля, каждый раз захожу в крестотред и узнаю что-то новое, шизики из комитета совсем ебанулись? Пускай лучше стандартную либу пилят, сука.
в чём их смысл?
В комитете не шизики.
В чем смысл inline variable, лол? Типо extern это слишком по-сишному и уже не труъ?
>So, in practical terms the (now accepted) proposal allows you to use the inline keyword to define an external linkage const namespace scope variable, or any static class data member, in a header file, so that the multiple definitions that result when that header is included in multiple translation units are OK with the linker – it just chooses one of them.
Похоже ошибка в другом.
Я серьезно не понимаю смысла inline variable, это же какая-то дичь просто
На твоем скрине настройки для платформы х64. Проверь, что и для других платформ также выставлен спп 17.
Или конпелируй под x64, а не 32.
Можно определить пару переменных и использовать их как регистры процессора. Если какая-то переменная свободна, то используешь её, а не заводишь новую. Во время оптимизации, компилятор заменит такие переменные на регистры и код будет сверхэффективным.
Да.
Я не он, но мне интересно узнать
Я не понимаю, зачем определять переменную 10 раз в одной программе. Да и в G++ есть специальный флаг для этого безумия, насколько мне известно.
За тем же, зачем ты ее раньше определял в одном месте и объявлял в десяти, только меньше писанины.
Тебе виднее.
типа хаскелля или лиспа, типа прикольно но не более того, нет практических применений, бизнес не заинтересован поднимать программные системы основанные на с++ кодобазе, языком занимаеться кучка энтузиастов-нищебродов
да, именно так, чем меньше переменных в коде, тем лучше для твоей оперативной памяти в голове!!
Что в компиляторе, что в голове всё разматывается в SSA, так что вообще разницы никакой. Кроме убитой читаемости кода в силу только одного generic имени для переиспользуемой переменной, конечно же. Кончайте уже троллить, вкатыши же за чистую монету примут.
> Так же, как и исклчения от всех остальных функций\методов
Я ж написал, что объект тогда станет локальным и мне придется тянуть в try блок вообще весь код, в котором я этот объект использую.
С другой стороны можно сделать динамический объект, но это не путь самурая
> Имею в виду, что объект тогда будет локальным для блока
Он даже не создастся, в чем проблема?
>Я ж написал, что объект тогда станет локальным и мне придется тянуть в try блок вообще весь код, в котором я этот объект использую.
В этом и идея использования эксепшенов как бы. У тебя все может кинуть, и пусть все будет внутри try блока.
Других вариантов особо нету, кроме хуиты с разделением создания\инициализации.
>объект тогда станет локальным
Проверил твою теорию и нет - все объекты создались и стали глобальными. Конструктор это не просто функция, он создает объект.
https://pastebin.com/4yPqGVcH
он про скоупы
Так тут и ловиться исключение из конструктора.
Бросать можно.
Нет способа поймать исключение от инициализатора глобальной переменной.
Страуструп пишет, что это еще один повод не использовать глобальные переменные.
Мои знания двоишника говорят что косинус 90 градусов должен быть равен нулю.
Но вот я написал код в студии - а он мне какую-то хуиту вернул, написал коде в идеоне - и там мне тоже какую-то хуиту вернуло
https://ideone.com/iKnDWw
Как тогда сделать правильно?
(если что, тут все в радианах)
https://ideone.com/fBOyUj
Это называется scientific notation. А вообще покури как работать с float'ами, это отдельная магия
Ммм? не сравниваю (если надо, то больше-меньше), вопрос же про то почему там какое-то -4.37... выводится? Мне это код ломает так как умножаю на это значение и вместо ожидаемого нуля от косинуса 90 градусов получаю хуиту
И как мне сделать?
То есть например я хочу чтобы это
float f = 2*cosf(1.57079637f);
давало мне ноль, а не какой-то мусор
https://ideone.com/Ctypr4
Ну твой "мусор" это на деле что-то типа 0.00000000001, просто отображается так всрато.
По-этому выводи через std::fixed, и сравнивай на равенство\неравенство не через == !=
>там какое-то -4.37... выводится
Ты не туда смотришь. Надо смотреть на e-08
>вместо ожидаемого нуля от косинуса 90 градусов получаю хуиту
Ты открыл для себя точность операций с плавающей точкой, поздравляю. Тут многие арифметические законы не выполняются + есть целая наука (вычислительная математика А МАТЕМАТИКА ДЕБИЛАМ НЕ НУЖНА) которая занимается вопросами точности и прочих приколов вычислений на компуктерах
Ох, эти вьетнамские флешбеки, когда я не смог сдать вычмат и меня нахуй выгнали из вуза. Я так и не понял что от меня надо, что это за эпсилон в сравнениях и тд.
>Я так и не понял что от меня надо
Там нужно было тупо понять что 1010 + 10-10 = 1010, что 1 / (232) = 0 и что эти подводные камни нужно обходить.
>что это за эпсилон в сравнениях
Тупо точность. У тебя вычисления с плавающей точкой никогда не дадут ноль (или любое точное значения), а потому сравнивать два плавающих числа можно только как fabs(a - b) < eps.
eps обычно равен 0.0000001
Щас я уже все это понимаю, сениорская лычка обязывает. Но когда я рассказываю, что в вузике не смог сдать С (а вычмат был на С) - это прям байка уже локальная
Спасибо, постараюсь поучить как можно больше до собеседования, хотя надеюсь, что не спросят.
Так случилось, что мне нужно ковырять qt.
Нужно постоянно принимать пакеты через ком порт.
временами нужно собрать пакет и отправить его через ком порт обратно.
Я планировал сделать два потока, один принимает пакеты и парсит их, второй просто ждет пока я соберу пакет и как только соберу - отправляет назад.
Когда я зашел на русский qt forum там всех таких умников как я смачно поливают говном типа многопоточность в чтении и отправке при использовании qt не нужна и у меня нахер все упадет и неизвестно какие баги вылезут. Посылают всех в грубой форме читать про асинхронные вычисления, но async же мать его всеравно (potentially in a separate thread which might be a part of a thread pool). Полистал Шлее там про QSerialport пустота. Порекомендуйте может быть что почитать или как лучше сделать?
>про асинхронные вычисления
Тебя послали не про асинхронные вычисления читать, а про асинхронное I/O (асинхр. ввод-вывод). И правильно сделали - треды и синхронизация обычно тяжелые для процессора штуки.
>Полистал Шлее там про QSerialport пустота
Епт, читай документацию к Qt (в QtCreator можно F1 нажать например).
Вкратце:
1. открыть-настроить порт (название правильное, скорость, все дела)
2. подключиться к сигналу QIODevice::readyRead (QSerialPort от него унаследован) и там вычитывать в обработчике (с помощью метода readAll) данные.
Не забывай, что readyRead может прилететь на середине пакета, твой парсер должен это уметь обрабатывать
Спасибо. Буду читать. Как считывать понятно, а как без второго потока отправить пакет, например, паралельно с парсингом не понятно. Ну чисто психологически:3. Ну парсишь ты входящий пакет, сумму контрольную проверяешь, байты перекладываешь, а тут херак - прилетает команда и нужно пакет отправить паралельно парсингу, не прекращая прием пакетов.
Спасибо. Буду читать. Как считывать понятно, а как без второго потока отправить пакет, например, паралельно с парсингом не понятно. Ну чисто психологически:3. Ну парсишь ты входящий пакет, сумму контрольную проверяешь, байты перекладываешь, а тут херак - прилетает команда и нужно пакет отправить паралельно парсингу, не прекращая прием пакетов.
>2094470
Именно так. И я не знаю зачем мне после приема отправлять. Может сложиться такая ситуация, что приема вообще не будет. А отправить пакет нужно будет. Какой-нибудь датчик температуры отвалится, а мне нужно отправить команду на открытие арматуры. Например.
Лол
>умников как я смачно поливают говном
хуй знает, я бы на такие вопросы даже реагировать бы не стал, ибо понятно и из вопроса что ты нулевой и что пользы с тебя не будет никакой, типа плавай сам в океане своего невежества дальше
нахуя ты ему это обьясняешь?
надеюсь ты понимаешь что это твой (потенциальный) конкурент, который отберет у тебя миску баланды, а ты после 30ти отправишься на помойку догнивать или куда там пропадают кодеры после 30ти?
ладно бы челик спрашивал за какое-нибудь метапрограммирование на крестах, за кодогенерацию и прочие приколюхи ибо было бы понятно что это чисто для фана, тк бесполезная хуйня, типа лайт хаскелль
а тут бля прямой конкурент
>надеюсь ты понимаешь что это твой (потенциальный) конкурент, который отберет у тебя миску баланды
Это мой потенциальный подчиненный которому я мог бы скидывать унылые таски
>а ты после 30ти отправишься на помойку догнивать или куда там пропадают кодеры после 30ти?
Мне 32, лалка
>а тут бля прямой конкурент
Если этот челик для тебя апасны конкурент, то у меня для тебя плохие новоси
>куда там пропадают кодеры после 30ти?
https://dou.ua/lenta/articles/salary-report-devs-summer-2021/
> пропадают кодеры после 30ти
Я вот думаю, уволиться нахуй что-ли. А то я накопил на 20 лет жизни с нормальным доходом (100к\м) а хата в мухосрани у меня есть личная.
> А то я накопил на 20 лет жизни с нормальным доходом (100к\м) а хата в мухосрани у меня есть личная.
Не, не увольняйся. Копи дальше на яхту, на пример. И сдохни от разрыва сердца в 45 лет лучше, чтобы прямо с рабочего места увезли на скорой в морг.
Так и не увидев красный закат над лесом стоя на высоком берегу дикой лесной реки, где на берегу будет разбита твоя палатка, в котле доваривалась бы уха и ни одной суки с ноутбуком за 300 километров.
Я автор вопроса про qSerialport мне 30.
Ну почему-же конкурент? Коллега, товарищ, собутыльник.
Это важно?
>автор вопроса про qSerialport мне 30
наши соболезнования! если ты бля в 30ку когда уже погроммист заканчивает сваю карьеру путаешь асинхронку в параллельных вычислиниях и асинхронку в вводе-выводе
хаха
признавайтся, ты же вкатыш да?
вуз то заканчивал?
инженер или говно?
вкатыш, заканчивал, инженер, зп норм.
имею встроенный иммунитет от 20 летних желчных синьоров.
ну, колись
какой ты инженер? чому не пошел работать по специализации? а, сука
страна 5 лет на тебя ресурсы тратила, выращивала нужного спеца
а ты пошел в погроммисты?
а, блядь?
>ну, колись
какой ты инженер? чому не пошел работать по специализации? а, сука
страна 5 лет на тебя ресурсы тратила, выращивала нужного спеца
а ты пошел в погроммисты?
а, блядь?
Всем привет. Нулевой вкатывальщик в треде.
Зачем переменным присваивают нулевые значения с программах калькуляторах? Что мешает просто оставить их неизвестными (пустым множеством) и задавать только после cin-а пользователя?
В данном конкретном случае разницы нет. Но, оверолл, это хорошая привычка, все переменные инициализровать.
понял, спасибо
Сам предендую на позицию мидла/стронг жуна.
> Что мешает просто оставить их неизвестными
Программирование не настолько абстрактно, как математика. Переменная не будет неизвестной, она будет содержать мусор, что иногда может привести к ошибке.
То, что я спрашиваю у всех.
Операции с указателями (арифметика\дереференс\указатели-на-указатели)
Как работает вектор\unordered_map
Идея СТЛ Алгоритмов+Итераторов
Дискуссия про эксепшены
Дискуссия про ООП
Отношение к виму (если тебе нравится - сразу нахуй no hire)
> Отношение к виму
В один ряд ставятся те, кто почти всё делает в вижуалке и юзает вим изредка для всякой мелочи и те, кто не признаёт никаких других средств разработки кроме вима, так?
нет, одно дело нужные тулзы в нужных юзкейсах, другое дело - вимошиза
да хоть активный, главное что с дебилами работать я точно не буду
> Отношение к виму
Я знаю, что он пищит и портит файлы, а для комфортной работы с ним нужно подключить педали.
Такой ответ принимается?
Так и знал, что все токсики пидары
не возникает
Статическая функция от обычной ничем не отличается, кроме межмодульной видимости
Основная проблема плюсов вовсе не в отсутствии работы, отсутствии сборщика мусора, токсичном комьюнити или устаревших лабах в вузах, как может показаться на первый взгляд.
А в том, что под плюсы нет вменяемых IDE и компиляторов(инбифо гцц или шланг норм компиляторы).
Проприетарная праша С++builder, "студия" мелкомягких и еще более ужасный Qt отбивают всякое желание учить язык.
+ отсутствие нормальной системы сборки и менеджера пакетов. CMake и vcpkg/conan - наименьшее зло, созданное из-за попыток усидеть сразу на нескольких стульях.
Так вот, где можно найти истинные знания, в которых будут описаны все типы данных, откуда они и зачем?
>что под плюсы нет вменяемых IDE
Вменяемые иде поддерживают все популярные языки, включая плюсы.
Здесь все не хуже, чем у других.
>и компиляторов
Си плюс плюс де факто - единственный компилируемый язык общего назначения среди живых. Так что у других языков вообще нет никакого компилятора.
K&R
>Си плюс плюс де факто - единственный компилируемый язык общего назначения среди живых
Го и свифт тоже компилируемые же. Да, в код с нехилой поддержкой рантайма, но всё же не JIT.
И правильно, general-purpose языки не нужны. Даёшь подходящий под свою задачу. HPC? Изспользуй фортран. Сервера с IO-bound задачами? Используй го. И так далее.
> general-purpose языки не нужны
Это хитрый план по раздутию бюджетов проектов. Вместо одного разраба на универсальном языке приходится нанимать целый штат калек с узкоспециализированным говном.
Узкоспециализированное говно можно за пару месяцев полностью выучить при наличии соответствующей базы, в отличие от.
Прявился новый класс задач - писать придётся на чём попало
Согласен. У тебя база какая?
Использую в C++ RegGetValue в простейшем консольном приложении, но он некоторые записи реестра просто игнорирует. Пробовал запускать от админа никакой разницы.
Как правильно читать данные из реестра венды?
Второй, ну то есть игнорирует.
Создавал ключ в реестре такой же сам для проверки, но пох ему
Вообще я пытаюсь оттудова получить версию service pack, но на проверку выяснилось, что не все записи оно считывает, то есть явно наблюдается некая прослойка, которая решает что выдавать, а что нет.
С правами системы не пробовал запускать, да и не уверен, что норма для самописного консольнохо приложения.
Дай код конкретный (на пастебин залей), и покажи что не работает.
Я очень много работал с реестром, и такой хуйни не видел
В итоге сопротивляется из-за всех сил, всё равно выдаёт предъидущее значение, хотя буфер заново создаётся при каждом вызове функции, впрочем, оно и понятно, указатель туда смотрит.
https://pastebin.com/r41r3eJd
Забыл добавить, что не так
Не так контректно с попыткой получить текстовое значение CSDVersion, в котором в вин 8.1 и ниже указана версия Service Pack
vtable'ы
он же ещё должен проверить, что число одновременно делится и на 3 и на 5 и вывести "Fizz Buzz", не ?
Гранты акций наслаивающиеся. У меня в районе 400к чисто акциями вестящимися в месяц капает
Без золотых кандалов вся работа одинаковая, смысла нет
Что хотят увидеть интервьюеры когда решаешь простую задачу типа литкода? Знание структур данных или скорость? Разрываюсь между вариантом написать все на вложенных for лупах или примерить контейнры например map с какой-нибудь мудреной логикой для скорости. Кстати о скорости. Что лучше - STL или лупы? С одной стороны мне сказали что STL оптимизирована c другой стороны из за шаблонов там должен быть накладные расходы.
Я не понимаю это джуниор вилка или мидл?
Здесь в треде говорили что мидл отличается самостоятельностью, поэтому похоже на джуна. ( Читал у Роберта Мартина что обычно год менторства достаточен, чтобы "ремесленники" взяли к себе новичка.) Поэтому похоже тебя компания не считает за профи. Но я сам не точно не знаю потому что новичок.
Хотят увидеть, что ты умеешь думать логически и не обсираешься в том, что ты пишешь (на stl или без - не принципиально). Естественно, что если задача с stl решается в 2 строчки, то попросят писать без него.
Новый сотрудник это всегда источник багов и велосипедов, так что за ним пару месяцев приглядывают и вводят в курс дела (если есть кому). А про мидлов, ждунов и сеньёров просто забудь.
Я думал раз мне такие деньги хотят платить, то ожидают сразу хороших результатов без багов и велосипедов
Да обычные деньги для ДС-ов.
Если проект большой, то сегодня ты фичу напишешь, а через неделю найдёшь какой-то код, с которым она пишется в три строчки. Через две недели поймёшь, что делать надо было совсем не так (интеграционные баги, архитектурные проблемы, производительность).
Написал регулярное выражение по правилам, но где-то ошибка. Хочу выводить числа с двумя знаками после запятой. Подскажите пожалуйста.
std::string str15 = "b5.9 4a 0 55.45 34.1 99.7 0.999 ";
std::regex reg15("[\\d{1,2}][\.][\\d{1,2}]");
1. Используй R-строки, если много чего экранируешь
2. Квадратные скобки не нужны, просто "\d{1,2}\.\d{1,2}". Для захвата нужны круглые скобки.
3. Может ещё окружить с "\b" чтобы не матчились строки типа "a51.23b", но я не спец.
4. Используй https://regex101.com/
Отлаживаемся
Начинаю 12 главу, наконец-то fltk
Гугли точки следования
Вот есть сишная библиотека (в данном случае GLFW). В ней есть калбек на функцию для логирования (да там дохрена такого). Но у меня лог - это класс. Как блядь сделать чтобы не говно было?
Понятно что можно заебошить синглтон или вообще глобальную переменную вляпать - но это же хуита. Если в одном месте наебошил глобальных переменных - но и в другом они насрутся - тут полностью нарушается принцип инкапсуляции - потому что потом хуй знает кто изменил данные в этом классе (в логе такого нет, а например в системе инпута есть)
Неужели нет более лучшего способа передать туда ебучий лог как объект? Ладно, в некоторых либах есть возможность передать юзердату в виде воида. А где такого нет?
Как мастера с такой хуитой справляются? Ебошат синглтоны и глобальные переменные?
Или может есть какой-нибудь паттерн или идиома на этот случай?
В жизнь не поверю что Мейерс и ко никогда не связывали сишные либы со своими ооп-проектами.
> Как раз таки Мейерс про логи и инпут и писал, что для них синглтон - самое то.
Но можно обосраться, если хочешь логировать в деструкторах глобальных либо статик объектов. Поэтому делай не просто синглтон лога, а синглтон shared_ptr на лог. И храни эти указатели в таких объектах либо в cpp объявляй их перед глобальным объектом.
И да, поверь, даже если ты не хочешь так логировать, всё равно до этого дойдёт, косвенным образом.
Вы видите копию треда, сохраненную 30 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.