Это копия, сохраненная 25 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ответы на все вопросы:
- http://en.cppreference.com/w/
- http://www.cplusplus.com/reference/
Прошлый: >>1169708 (OP)
Писать самому. Или отправить команду на скачку через system();
ofs << static_cast<std::string>(body(response)) << std::endl;
Я должен быть сеньором чтоб эту строчку понять? Из примера simple wget
В этой строчки ничего сложного нет. Ты видимо C++ мало учил или наверное не понимаешь как устроен http.
> не понимаешь как устроен http
А то ты RFC вызубрил и сходу можешь назвать ключевые отличия HTTP/1.0 от HTTP/1.1
Молодец
Это curl то тяжёлый, блеать?
Ну ок, пиши сам. Если линупс - всего то, создаешь клиентский сокет, биндишься к нужному адресу (если адреса нет - то ещё ресолвишь его, коннектишься, составляешь ручками GET запрос, ручками парсишь ответ, сохраняешь данные. Если там https то ты соснул, руками это не написать, а openssl таки тяжёлая.
CVAPI(IplImage) cvQueryFrame( CvCapture capture );
Таки CVAPI - это просто тип указание? При подстановке в код не конпелируется.
Это скорее всего какой-нибудь макрос, который подставляет всякие атрибуты и прочее.
Чего поставить начинающему чтобы оно потом могло пригодиться и не испортило вкуса.
Из задач - тетрисы там всякие графики хуяфики.
C#
Qt
временами по работе приходится GUI на крестах пилить. Я ибав, если честно( особенно, если требуют WinAPI), однако, знаешь, навострился, а так удобнее qt или embarcadero Ничего не видел.
Если чистый WinAPI, тогда бери GDI+, с ним можешь рисовать линии, прямоугольники, круглешки. И классы для загрузок картинок разных форматов там тоже есть. Короче все что нужно для мини игры типа тетриса.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms533797(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms533802(v=vs.85).aspx
#include "stdafx.h"
#include <iostream>
#include "string"
#define CURL_STATICLIB
#include "curl/curl.h"
#ifdef _DEBUG
#pragma comment (lib, "curl/libcurl_a_debug.lib")
#else
#pragma comment (lib, "curl/libcurl_a.lib")
#endif
static int writer(char data, size_t size, size_t nmemb, std::string writerData)
{
if (writerData == NULL)
return 0;
writerData->append(data, sizenmemb);
return size nmemb;
}
std::string getFile(std::string url)
{
std::string content;
curl_global_init(CURL_GLOBAL_ALL);
CURL *curl = nullptr;
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
CURLcode code = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return content;
}
int main()
{
std::cout << getFile("https://curl.haxx.se/libcurl/c/htmltitle.html");
std::cin.get();
return 0;
}
#include "stdafx.h"
#include <iostream>
#include "string"
#define CURL_STATICLIB
#include "curl/curl.h"
#ifdef _DEBUG
#pragma comment (lib, "curl/libcurl_a_debug.lib")
#else
#pragma comment (lib, "curl/libcurl_a.lib")
#endif
static int writer(char data, size_t size, size_t nmemb, std::string writerData)
{
if (writerData == NULL)
return 0;
writerData->append(data, sizenmemb);
return size nmemb;
}
std::string getFile(std::string url)
{
std::string content;
curl_global_init(CURL_GLOBAL_ALL);
CURL *curl = nullptr;
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
CURLcode code = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return content;
}
int main()
{
std::cout << getFile("https://curl.haxx.se/libcurl/c/htmltitle.html");
std::cin.get();
return 0;
}
Доебал со своими вопросами уже, неосилятор, может перекатишься на другой язык?
А какая тут разница? Ну вызовется лишний move-конструктор (начиная с C++17 даже он вызываться не будет), делов-то.
Пока только начал над этим работать, написал простую программку с SetForegroundWindow и SendInput из Windows.h
Она прекрасно работает, но ровно до того момента как отключится RDP-сессия.
Алсо, тут есть легаси-программа, которой похуй на отключения от RDP, работает как часы. Но сорсов нет.
Что делать? Есть ли что-то еще более низкоуровневое для отправки нажатий клавиш в окно? Мышь не нужна.
Вопрос: как это все организовать? Проект на плюсах.
Я порылся в документации на линковщик, обнаружил ключевое слово overlay, с помощью которого можно обозначить секции, которые будут запускаться с одного и того же адреса, но по результате сборки будут лежать в другом месте.
А как, например, указать входную точку каждого такого оверлея? В моем понимании один оверлей - это несколько функций плюс какие-то данные.
Убедись, что у тебя адреса основной программы не пересекаются с адресами программы из ПЗУ, а потом смело перекатывай ПЗУшку в память и вызывай её по захардкоженным адресам, скастованным в указатель на функцию. Хидер с адресами генерируй автоматически из map-файла, создаваемого линкером при компиляции кода ПЗУшки (зависит от того, какой компилятор используешь). Если в оперативку всё не влезает, то опять бери map-файл и генерируй из него регионы памяти, которые можно подгружать отдельно.
Я использую gcc.
Как мне спарсить нужные адреса из map-файла в хидер? Получается, я могу сгенерить этот хидер только после сборки всего проекта, а тогда как его использовать?
Почему всего проекта-то? Собирай бинарник для ПЗУшки первым, для остальной программы вторым. Хотя если есть возможность объединить код, то всё проще - читай мануал по ld, раздел Memory Layout, и отдельно про раздел SECTIONS. Линкер позволяет рассовать .o-шки по отдельным секциям, а секции - по заданным адресам. Потом просто разрежешь готовый бинарник на части и после загрузки недостающих частей в оперативку он будет работать как единое целое. Это примерно то, что ты имел ввиду когда говорил про оверлей, но оверлей - это такая устаревшая досовская терминология, сейчас это слово означает пересекающиеся адресные пространства.
Менять одни костыли на другие?
Все более или менее приличные проекты, написанные на нём за 8 лет, влезли в 30 строк википедии. На hh целых 42 вакансии с потолком в 4к в москвабаде. Зачем вкатываться в такое дно?
Не нужен - не используй, @nogc в помощь
Сколько часов уйдет на осиливание?
Мастера в своём деле, в левой руке "Hello, world!", в правой сортировка пузырьком.
да
Попробую спросить в вашем треде. Часто ли встречаются лексичекие анализаторы с страшными и нечитаемыми таблицами переходов? Я видел такое только в теории, а на практике пока встречался только с простыми анализаторами на ветвлениях и без таблиц. Зачем тогда вообще рисовать эти автоматы, вычислять, составлять таблицы?
Извини, что? Лексеры же тридцать лет уже пишут на dsl-ах с регулярками. Бывают парсеры с заданными таблицей автоматами, но только в редких случаях, типа разбора ебанутого синтаксиса Си с кучей исключений. Встречается это почти исключительно в больших проектах, оптимизированных по самое небалуй.
Я не разбираюсь и не хочу наговорить лишнего, но мне бы очень хотелось научиться писать парсеры и интерпретаторы/компиляторы. Скачал книжку с драконами на обложке, а там такая адская жесть, что я дропнул в самом начале главы про парсеры. Как раз много рассказывается про конечные автоматы в лексическом анализе, но все это без примеров и нихуя не понятно в итоге. Как вкатиться вообще в это дело? Посоветуй инфы или книжек для простых смертных, будь другом
Поиграйся с генераторами парсеров на каком-нибудь динамическом языке: жс, петоне или пыхе. У тех, которые хорошие, есть туториалы чтобы вкатиться, а там экспериментируй и смотри на результаты. Гугли их по запросу "имяязыка parser generator". На жс, например. есть pegjs.org с коротким туториалом. Но если начнешь лепить конпелятор в бинарники, Книга дракона вообще самая годная для начинающих. Хотя можешь сделать просто транслятор из исходника в исходник, это гораздо проще, достаточно просто в несколько проходов пройтись прямо по созданному парсер-генератором дереву и выдать эквивалентный код на другом языке.
Хуй знает, мы на работке для парсеров-шмарсеров ragel используем. Разве что ебучий минус - хз как к этой хуйне подсветку синтаксиса написать чтобы в ide красной хуйней не заебывало.
bump
вот сам файл если кому то не лень будет чекнуть https://github.com/superhacker777/hikka/blob/master/src/hikka.go
Спасибо. Я тут нашел цикл простеньких статей для ньюфагов, попробую начать с них. А книга с драконами все равно очень сложная, хоть ее все и советуют для новичков.
>>83947
Нет, просто хочется разобраться в их устройстве и не чувстовать себя инвалидом в мире программирования.
>>83952
А ты понимаешь принцип работы этой программы?
Какой? Ты компилятор столе хочешь написать, лол? Я тоже свой писать собирался, да дропнул - так и лежит эта платка отладочная, пылью покрывается.
https://lenta.ru/articles/2016/05/12/haclercamera/
Довольно скоро народ понял, что подбирать пароль вручную сложно и непродуктивно. Так на свет появилась первая версия брутфорса для взлома паролей — «Йоба».
Посмеялся, спасибо, крестовой анон.
>std::string url
Недавно реверсил одну программу, которую переписывал, судя по всему, шарпист. И он наделал подобных конструкций в каждой функции. Из-за этого перед вызовом любой функции с таким аргументом вызывался конструктор и создавалась новая строка, а перед выходом из функции удалялась. Если не править прототип функции, то в ней получалось по 6 х кол-во строк аргументов, а использовался только первый параметр. И приходилось в каждую интересующую меня функцию добавлять прототип вместо формального void'а. А также, разработчик не придумал ничего лучше, чем добавить строки открытым текстом типа "SecretString1" для генерации ключа, видимо, он надеялся, что никто не поймёт их предназначение (или не найдёт в откомпилированной программе). Версия для маков содержала отладочные символы (не знаком с маком, это поведение компилятора по умолчанию или их нельзя удалить?) со всеми названиями функций. Жаль, что в его голову не пришла светлая идея распространять pdb файлы для Windows-версии. И ещё он забыл удалить отладочный запрос (и все юнит-тесты, которые, вроде бы, невозможно запустить, потому что не было перекрёстных ссылок на функцию), который содержал кучу параметров запроса, имя и пароль тестового пользователя, который мне не удалось по каким-то причинам использовать, но стали понятны некоторые механизмы работы программы без её запуска (самостоятельная регистрация не возможна, а работу программы проверить хотелось). А другой человек в официальном (вроде бы) ролике спалили свой пароль, который можно было увидеть при покадровом просмотре, ведь тот же разработчик сделал мегаудобную вещь, как показ введённого символа примерно одну секунду перед тем, как он превратится в звёздочку. А это, в свою очередь, мне очень помогло понять механизм генерации ключа и даже написать брутфорсер на OpenCL. К сожалению, кто-то подсказал разработчику (сам он вряд ли додумался) использовать большое число раундов для генерации ключа, поэтому брутфорсер оказался практически бесполезным, разве только для паролей до 7 символов. Также разработчик использовал захардкоженый абсолютный путь к файлам программы без возможности его изменения (а если ОС на другом диске или диска C нет). И да, думаешь, что это мелкая никому не известная программа? А вот и нет, без преувеличения, миллионы пользователей, несколько стран, программа платная, аналогов нет, а без неё низзя, обязаловка. И это не в России.
Не делай больше так.
>std::string url
Недавно реверсил одну программу, которую переписывал, судя по всему, шарпист. И он наделал подобных конструкций в каждой функции. Из-за этого перед вызовом любой функции с таким аргументом вызывался конструктор и создавалась новая строка, а перед выходом из функции удалялась. Если не править прототип функции, то в ней получалось по 6 х кол-во строк аргументов, а использовался только первый параметр. И приходилось в каждую интересующую меня функцию добавлять прототип вместо формального void'а. А также, разработчик не придумал ничего лучше, чем добавить строки открытым текстом типа "SecretString1" для генерации ключа, видимо, он надеялся, что никто не поймёт их предназначение (или не найдёт в откомпилированной программе). Версия для маков содержала отладочные символы (не знаком с маком, это поведение компилятора по умолчанию или их нельзя удалить?) со всеми названиями функций. Жаль, что в его голову не пришла светлая идея распространять pdb файлы для Windows-версии. И ещё он забыл удалить отладочный запрос (и все юнит-тесты, которые, вроде бы, невозможно запустить, потому что не было перекрёстных ссылок на функцию), который содержал кучу параметров запроса, имя и пароль тестового пользователя, который мне не удалось по каким-то причинам использовать, но стали понятны некоторые механизмы работы программы без её запуска (самостоятельная регистрация не возможна, а работу программы проверить хотелось). А другой человек в официальном (вроде бы) ролике спалили свой пароль, который можно было увидеть при покадровом просмотре, ведь тот же разработчик сделал мегаудобную вещь, как показ введённого символа примерно одну секунду перед тем, как он превратится в звёздочку. А это, в свою очередь, мне очень помогло понять механизм генерации ключа и даже написать брутфорсер на OpenCL. К сожалению, кто-то подсказал разработчику (сам он вряд ли додумался) использовать большое число раундов для генерации ключа, поэтому брутфорсер оказался практически бесполезным, разве только для паролей до 7 символов. Также разработчик использовал захардкоженый абсолютный путь к файлам программы без возможности его изменения (а если ОС на другом диске или диска C нет). И да, думаешь, что это мелкая никому не известная программа? А вот и нет, без преувеличения, миллионы пользователей, несколько стран, программа платная, аналогов нет, а без неё низзя, обязаловка. И это не в России.
Не делай больше так.
https://github.com/superhacker777/ivms-bf
В том же репозитории вот это есть с пометкой
>UPD: Currently abandoned, rewritten in Go
Ну , как сказать, я вот не считаю всякие кути шляпы отдельным языком от плюсов, а они позволяют написать ВСЁ.
Начни с написания простого форта на асме, дальше оно само пойдет.
Блять, ты не можешь добавить функционал в c++ версию или что?
Ну достаточно поставить ссылку? Возможно константную, не знаю нужна там работа непосредственно с этой строкой.
Если тебе захочется нормальную графику или вычисления на gpu, то придётся осваивать шейдерные языки. Тот же кути в качестве одного из инструментов даёт тебе QML.
А в целом экономически неоправданно всё на c++ писать. Ту же автоматизацию сборки и тестирования проекта намного быстрее и проще написать на python (считай дешевле и надёжнее).
270к чистыми, ДС
Наркоман штоле? Шейдерные языки GLSL, HLSL это никакая не сишка и уж тем более не C++. Синтаксис похож, но этим всё и ограничивается (указателей нет, ссылок нет, встроенные типы матриц и векторов, swizzle оператор, динамического выделения памяти напрямую нет, нет рекурсии и ещё сотни отличий).
OpenCL C тоже основан на сишке и тоже её стандарт переопределяет.
Заимствование синтаксиса не делает Java наследником C++.
Скилы:
Англицкий:
письменный - ок
на слух - более менее
говорение - летмиспикфроммайхарт
Основные скиллы:
-программирование ARM контроллеров
-прикладное на С/С++ под Windows/Linux
-тулчейны для контроля версий сборки и тестов
Дополнительные скиллы:
-Python со словарём.
Как я вижу для удалёнки нужна экспертиза в конкретной предметной области, например Linux Kernel.
Пацаны, в какую область можно вкатиться, что разово, за пару выходных поднять немного денег?
> Пацаны, в какую область можно вкатиться, что разово, за пару выходных поднять немного денег?
Дворником.
Есть у меня подозрение, что у тебя всё перечисленное со словарём, а не только питон. Ищи колым для студентов в дно треде.
Проходи мимо.
bool func(int a) {
return a > 0;
}
std::uint8_t func(int a) {
return a > 0;
}
Что сказать то хотел?
vulkan это очередное api для загрузки на видяху тех же шейдеров, написанных на glsl или hlsl (отличие от opengl в том, что он использует шейдерные программы в виде "байт кода" spir-v).
OpenCL C++ по документации не поддерживает такие важные средства C++, как:
1.8 Restrictions
- recursive function calls (section 5.2.2, item 9)
- new and delete operators (sections 5.3.4, 5.3.5)
- function pointers (sections 8.3.5, 8.5.3)
- virtual functions and abstract classes(sections 10.3, 10.4)
- exception handling (section 15)
>Что сказать то хотел?
Что в шейдерах почти полноценный С++ с указателями и темплейтами.
>не поддерживает такие важные средства
На самом деле указатели на функции там есть, только адово тормозят.
А так естественно, что многие возможности не поддерживаются - архитектура у железа другая.
Я особо не интересовался OpenCL, я думал это просто API для параллельных вычисленей на видеокарте в языке C/C++. А это получается вообще другой язык? Для него нужен специальный компилятор?
>А это получается вообще другой язык?
Только для ядра, которое выполняется на видяхе, сам API - сишный. В старых версиях у шейдоров - сиподобный язык, начиная с 2.1 - урезанный С++14. У нвидии на CUDA с самого начала C++.
>Для него нужен специальный компилятор?
Да, но можно просто текстовую строку с шейдером передавать API.
Можешь сам посмотреть (это не OpenCL, а пиксельные шейдеры для WebGL, но суть похожая.): https://www.shadertoy.com/
Это экспериментальная фича еще, надо флаг компилятору передать, у GCC -fconcepts, clang вроде не поддерживает еще.
У них по -foncepts старая версия концептов, не та, которая в стандарт войдет, да и та неполная. Так что тебе придется самому нужную ветку GCC собирать.
Лучше не заморачиваться такой хуйней, premature optimisation и вся хуйня.
В современом C++ забудь макросы, используй их только в крайних случаях. И для таких простых функций, как выше, не надо писать inline. Компилятор сам инлайнит функции где возможно.
и constexpr
А посоветуй литературы где подобную информацию можно почитать? Я имею ввиду про работу компилятора. Я просто читал книгу ещё 99 года и там уже писалось что все эти онлайн устаревшие.
Есть такая книжка, но она 2004 года
> не надо писать inline. Компилятор сам инлайнит функции где возможно.
Где-то читал, что какой-то конпилятор если видит слишком много инлайнов (вроде как оценивается не общее количество, а относительно количество функций или что-то подобное), то он считает программиста идиотом и вручную написанные инлайны полностью игнорирует (что стандартом не запрещено, лол). Заставить инлайнить в таком случае можно либо написав перед функцией template <>, либо нестандартными атрибутами (которыми все кому прям сильно надо инлайнить и пользуются).
Вроде как единственная 100% гарантия заинлайнить и сделать именно точно как тебе надо - ебнуть асмовставочку.
А если инлайн в заголовке, компилятор все равно создает отдельную функцию в программе?
По стандарту слово INLINE для функции дает возможность забить хуй на ODR, не более
Если нужно передавать в функцию или конструктор список чисел определенного типа (int, uint32_t), каким типом данных представить этот список для удобства и производительности? std::tuple?
Чем тебе не нравится список из стд?
Чем тебе не нравится список из стд?
if(GetAsyncKeyState(klavisha)==-32767)
file(klavisha,"text.txt");
Мамкин кулхацкер, открой для себя raw input.
class A {
public:
void routine()
while ( true ) {
if ( _bs_ ) {
counter++;
}
}
}
std::uint64_t counter;
};
если два потока выполняют routine();, правда что может произойти креш при одновременной записи в counter?
Ну это просто критическая секция, потенциально ты можешь просрать данныетак и будет. Если будешь без синхронизации использовать свою функцию.
>креш
Нет. Если все указатели валидные, чему крэшиться? Но в общем случае у тебя будет обычный race condition, и получится каша, а не данные.
Конкретно в этом случае всё будет норм на x64, так как обновление машинного слова - атомарная операция. На этой фишке основана такая штука, как RCU. Но с этим нужно быть очень аккуратно, так как зависит от конкретного проца, поэтому всё равно следуй советам >>85510 и >>85533.
Закончил делать x64 версию, решил скомпилировать и x86. Оригинальная QT поддерживала только x64, пришлось скачать ещё дистр для x86 и развернуть его. В настройках плагина для MVS прописал путь к x86 версии QT. Проект пересобрался и начал сыпать ошибки вида
UAC.cpp
1>...\qtguiapplication4\qtguiapplication4\UAC.h(3): fatal error C1083: Не удается открыть файл включение: QWidget: No such file or directory
Вернул всё обратно. Теперь проект и x64 пишет то же самое.
Есть идеи как чинить? Не переносить всё в QT Creator а именно чинить
Всем, блять. Суть мьютекса - блокировка. Мьютекс - это считай толчок, срать там может только один человек, а остальные будут ждать пока он освободится, или обосрутся по таймауту.
Почитай Таненбаума.
Это в целом понял уже. Я сейчас на этапе - "Как пофиксить QTDIR?"
Т.е. насколько я понял проблема в том, что установка второй QT, для x86 где-то распидорасила заданый ранее QTDIR, который указывается в настройках MVS как $(QTDIR)\include\ итд. Но где и как мне прописать теперь QTDIR?
Пробовал через дополнительные параметры системы->переменные среды, но
1. Там её вообще не было
2. После того как я её задал там - ничего не произошло (Возможно нужна перезагрузка?)
Внимание вопрос: как лучше всего навешать istream интерфейс на std::string?
Ну извините за такой тупой вопрос, я думал это и атомик делает? Я никогда мултитредингом не занимался. А в чем тогда смысл атомика?
Атомик, внезапно, делает операции атомарными. Другими словами, треды не будут видеть "промежуточного" состояния при изменении атомика. То есть в атомиках нет семантики владения каким-то ресурсом в отличии от мьютекса. Вот как атомик реализован (через мьютекс, или архитектура проца такая, что можно лок-фри сделать) - зависит от конкретной реализации.
Атомик может быть на инструкциях проца быстро сделан, а мьютекс скорее всего будет ебошить сискол. Атомик нужен тупо на одну переменную потому что даже в сраном инкременте i++ может гонка возникнуть.
Линк, по которому качал: https://www.qt.io/download (опен сорс версия).
Путь к кьюту без пробелов, пикрил.
Просто береш и ставиш линупс.
Тебе данные в каком виде нужны? Инфа или набор битов/байтов? Если 2, то считай как массив unsigned char
У тебя комплекты походу не установлены, открой настройки->cборка и запуск->комплекты. Должны быть хоть какие то комплекты))
Атомик — это маленький атом.
Проблема в том, что я активно использую библиотеку сериализации Cereal, которая понимает только потоки данных. Так-то они у меня уже в форме массива char-ов, за это и отвечает string, но теперь нужно как-то на этот массив навешать интерфейс потока, что бы его можно было считать. Думаю сейчас просто свой класс-наследник от istream сделать, вдруг получится
Лол, Ява это игрушка по сравнению с си. вкатывайся самый начальный уровень от стрроуструпа, надеюсь хоть что-то поймёшь
>Ява это игрушка по сравнению с си
Нет, если бы это был яваскрипт, то да. А вот ява еще ему поможет.
Чем поможет? Без GC он только и будет что наступать на грабли. Особенно учитывая, что в Си нет умных указателей, которые хоть как-то облегчают работу с памятью.
Хотя ты прав. Мне потребовалось целых 2 месяца, чтобы умело извращаться с указателями.
Я похож на бородатого машинлёрнигопидораса? Нет, я лучше байты посчитаю.
Спасибо. Чисто на асме или на слиянии асмы и си делал?
Turbo C
race condition в твоей ситуации может быть из за того, что ++ для некоторого типа данных делается в несколько команд на ассемблере. потому один поток может сделать одну команду и внезапно быть прерванным другим потоком, который тоже начнет что-то делать и т.д..
так вот - мутекс - это как замок. у тебя переменная лежит в ящике стола запертом на замок и ключ только один. соответственно переменную меняет только тот, у кого ключ.
взял ключ - открыл ящик - поменял - закрыл - ключ положил и теперь другой поток его может брать.
а атомик - это когда ++ кодируется в ассемблер так, что его нельзя прервать. родные виндовые функции это Interlocked*
При установке надо было включить установку mingw. В режиме обслуживания и сейчас это можешь сделать.
Ты походу установил только QtCreator. Это только IDE, скачай сам фреймворк. Должно быть что-то типа такого, как на пике.
Не отличаешь race condition от data race? В ньюфаг-тред.
Ну да, из всех галок можно оставить только одну: MSVC или MinGW. Остальное для начала не нужно.
Всем отписавшимся анончикам нефти, заработало.
х y / z будет (xy)/z или x * (y/z) ?
Спасиба
Так же как и в шарпе слева направо -> (xy)/z.
https://msdn.microsoft.com/en-us/library/126fe14k.aspx
https://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx
Не лезь в кресты. Джунских вакансий на крестах практически нет, все ищут уже бородатого задрота с килотоннами опыта.
Так уже полез. И там примерно на собеседованиях так и есть. Лол.
В духе: ну вы знаете, нам нужен человек, который кроме крестов может в кьют, сети, базы данных, строительство звездолетов, а еще бы неплохо написать под них драйвера
Отож. Лезь лучше в петушиный жс, как ни прискорбно - это говно повсюду, и наверное в будущем и питухон с рубями сожрет.
Я как-то капитально взялся, так что один хуй буду пробовать вкатиться хоть куда-то
Ну я наверное как раз в последний вагон уходящего поезда запрыгнул.
если я осилю кроме крестов, еще кьют, ебучие сети, и базы данных, это я уже джун или еще нет?
Да хуй знает, я сам студиозус с амбициями "войти в ойти с плюсов". Судя по всему будет тяжело.
так. а если мне по ходу ебашить проектики в няшный гит по мере осиления стека технологий, и все это четенько пояснять в резюме?
прокатит?
И как, напросил? Джуна хотят за 40-45к.
Нет. Даже если проекты будут охуенными - я тебя уверяю, никто в твой гит смотреть и близко не будет, нахуй это нужно. Сам подумой - там в день несколько человек собеседовать, что у каждого смотреть?
Никак.
UrlDownloadToFile
используется всякой шаболдой в верусах, возможен детект аверами
(подобные вопросы лучше задавать в топике системного программирования / реверс-инжиниринга и асм)
В кресты никак, без шансов. Вкатывайся в жс, питон или ещё какую нить хуйню.
Да и писал бы ты на крестах - напротив искал бы как выкатываться тому до это пиздец, язык-червь, язык-пидор, язык-страус, язык-труп.
Начинать изучение c++ вообще не стоит. Язык пиздецки сложный и кривая сложности растёт со временем по экспоненте, а работу на крестах ты все равно не найдешь и с каждым днём найти её будет все сложнее.
> Язык пиздецки сложный
Сам язык не сложный. Никто ж не заставляет писать код с кучей шаблонных шаблонов. Основная сложность - это инструменыт для работы с C++. Отсутствие нормального менеджера зависимостей и мегаубогие инструменты для автоматизации конпеляции (чего только распиаренный cmake стоит) делают своё дело.
> > Язык пиздецки сложный
> Сам язык не сложный.
Ну да, действительно. А полтора косаря страниц только текущего стандарта (выйдет ++20 за два косаря перевалит) это так, хуйня
>Никто ж не заставляет писать код с кучей шаблонных шаблонов.
Заставляет. Посмотри на блядский буст.
>Основная сложность - это инструменыт для работы с C++. Отсутствие нормального менеджера зависимостей
Он невозможен потому что эта параша до сих пор работает на препроцессоре, модульности нет
> и мегаубогие инструменты для автоматизации конпеляции (чего только распиаренный cmake стоит) делают своё дело.
Я на работке для себя использую qbs. Так то проекты в boost build захуячены, но IDE jam-хуйню не скормишь, а в виме пердолиться не хочется.
Ну нахуярь руками get реквесты на сокетах, блять.
> Ну да, действительно. А полтора косаря страниц только текущего стандарта (выйдет ++20 за два косаря перевалит) это так, хуйня
Никто не заставляет читать всю спецификацию. У спецификации JS тоже около тысячи страниц. Это делает язык мегасложным?
> Заставляет. Посмотри на блядский буст.
Основная сложность в написании подобных библиотек. При использовании тебе чаще всего ничего кроме как вставить с угловые скобки имя типа и не потребуется.
> Он невозможен потому что эта параша до сих пор работает на препроцессоре, модульности нет
Сильное заявление.
> Основная сложность в написании подобных библиотек.
Основная сложность потом читать километровые выхлопы шаблонного говна в ошибках компилятора и гадать че этой суке не нравится.
Это да. Впрочем обе твои претензии будут исправлены в C++20 (непонятные ошибки - концептами, модульность - модулями).
да не сложный он нифига. просто изучать надо постепенно.
если начинаешь с нуля - бери какого нить кернигана и ричи и учи то, что там есть.
простые типы, указатели, (ссылки тоже добавь до кучи), битовые операции, функции. ВСЁ. в этом куске самое сложно - указатели на функции. уж очень мудреный синтаксис. но их обычно наизусть никто не знает.
выучил этот кусок, со всем разобрался? иди дальше.
классы (БЕЗ ШАБЛОНОВ!). уровни доступа, статические члены, наследование, множественное наследование, виртуальное, указатели на функции-члены класса. тут тоже ничего сложного нет, вполне себе небольшой кусок знания.
дальше шаблоны смотри уже.. даже перед шаблонами или чуть попозже, когда будешь знать что-то типа template <typename T> class C { public: T myvar; } и как использовать STL контейнеры - тебя уже джуном везде возьмут как нефик делать. а то и мидлом.
Ты ему советуешь изучать Си, а не С++. В своих проектах я указателями почти не пользуюсь, везде стоят unique_ptr или shared_ptr, а указатели используются только для взаимодействия с Сишными библиотеками.
Я про концепты с модулями кажется ещё в ++11 слышал, а воз и ныне там. А какой-то хотя б минимальной рефлексии и близко нет. К примеру - нужен тебе final switch, чтобы покрыть весь enum или не компилировать - а хуй тебе. И костыли-костылики (протобуф вроде генерит Value_MAX и VALUE_MIN). Сука блять.
> А какой-то хотя б минимальной рефлексии и близко нет.
Рефлексии и в С++20 скорее всего не будет.
Самое смешное это потом пробрасывать shared_ptr на unique_ptr на какую то хуйню потому что видите ли Handler в io_service::post должен быть CopyConstructable...
А ну да, ещё взаимодействовать с C++98 библиотекми или библиотеками, которые написаны на Си с классами. Впрочем, я их стараюсь по возможности избегать.
Ах да, а ещё по стопицот видов строк, массивов и умных указателей, у каждой библиотеки свой блять. И крестопараша которая в стандарте не умеет в юникод - точнее там кажись since c++17 deprecated. Необходимость в блядском icu, ебаный wchar/wstring который в линупсе 4 байта а в шинде - 2. Блядская хуйня уровня "ну ета - в крестах sizeof(void*) не существует а в сишке gcc ета 1" и тупорвлвми мудаками которые написали такого говна в хедерах ядра, так что под шлангом ты в крестах ты хуй че скомпилишь, а в gcc только с fpermissive.
но ты же знаешь, что такое ptr вообще? для чего нужны эти unique и shared? вот чтобы с ними работать не как обезьяна с гранатой, а осознанно, и надо понимать что такое обычные указатели.
Они тоже костыль блядский. Чего стоит только ебаная параша с enable_shared_from_this
Я заканчиваю второй курс, и все что ты написал я знаючасть рассказали на лекциях/практике, большую часть прочитал и понял самостоятельно и то мне кажется, что я вообще нихуя не знаю и дно ебаное.
> Ах да, а ещё по стопицот видов строк
Это да, почему-то за столько-то лет сущзествования языка о поддержке юникода никто не задумался. Впрочем надежда есть. Вон недавно std::optional добавили (впрочем он там достаточно неполноценный: без метода map [1], которым я пользуюсь чаще всего, лол)
> умных указателей
Это я полагаю из до C++11 эры.
[1]: https://doc.rust-lang.org/std/option/enum.Option.html#method.map
Макак, иди порвись где-нибудь в PHP-треде.
И что же делать, изучать конкретные библиотеки? Начинать бездумно изучать буст в надежде, что это понадобится? Или начать делать собственный проект? Все таки какой-никакой опыт, и изучать то в чем будут трудности?
если под винду хочешь работать - напиши пару программок типа калькулятора с mfc или qt (mfc я бы посоветовал - оно к нативным функциям ближе) чтобы разобраться как виндовая гуя работает, почитай чуток теории про коллекции stl - оценки скорости работы, как внутри устроены и т.д. и иди по собесам.
под винду на джуна возьмут стопудово.
Кресты могли бы быть спасены если бы популярная ОС имела апи и сисколы на крестах. Но так сложилось что и винапи - сишное, и линупс трольвардс - пердун и неосилятор, и так и повелось. А на крестах ядро емнип только у гаечки-беоси, но не срослось, отличная ОС была в своё время, но убита менеджментом и негрософтом. Было бы ядро на крестах и апи - были бы и библиотеки, и не было бы того говна что сейчас.
Прими брому.
ты нихуя не понял.
>чтобы разобраться как виндовая гуя работает
>под винду на джуна возьмут
Ты пост-то его прочитай как следует. Он имеет ввиду околосистемное программирование под винду, отсюда и мфц.
3-4 четыре годных компилятора, все рвутся вперед, стандарты принимаются, ниша оформилась, от макак мы отличаемся, вась вкатывальщиков я в глаза не видел
Чота я даже как-то влюбился обратно в С++
Охуенно наверное писать на реинкарнации pl/1.
Однажды все рухнет окончательно под весом томов стандарта и костылей.
Жопоголик, попей брому.
Все другие промышленные языки как-то не рушатся, значит норм. Хотя жабка наверное исключение, там все говно в библиотеках, а не в стандарте языка.
Рушатся. Все эти жабы, питоны, раби и жабаскрипты с го вылезли не на ровном месте - они отожрали долю именно у крестов. Теперь пизда последнему оплоту - даже десктопный софт все больше пишут не на крестах а уебищном электроне.
С каких пор жабаскрипт с пайтоном отожрали свою долю у крестов? Кресты никогда не были ни сценарным ни веб-языком. Про твой электрон никогда не слышали писаки большинства настольного софта (который пишется таки-на плюсах) имхо.
ну да, пусть отожрали
я и говорю кресты стали таки нишевым языком и это хорошо. графика, финансы, медицина, по тихой embedded подтягивают.
Атом, vs code, шкайп и дискорд - да дохуя чего десктопного пишется на электроне. А раньше это были кресты only. И это только начало. Сперва пидорнули дельфи - теперь пидорнут и кресты.
>Electron
kek
Эту хуету в серьез никто не воспринимает, любая программа на этом говне кроме VS Code лагает пиздец как. Ты дебил?
Весь мир борется с электроно-залупой. Даже сами майки которые этот вс код и создали
Как борется? Я пока что вижу как то что писалось на крестах теперь пишут на электроне - но не вижу обратного, чтобы веб парашу типичную переписывали на крестах.
Когда то кресты и в мабилках были, емнип под симбианом проги на крестах были а он был лидером рынка. Пидорнули-с, жаба правит бал.
webassembly жи лол
автокад вот выпустил вебверсию, тот же с++ только в броузере, а это покруче текстового редактора будет. вполне возможно кресты веба порцию заберут себе в ближайшем будушем
Дельфи взлетели, на них что-то писали (в т.ч. гуи скайпа под винду), затем плюсы опять взяли свое. Мне кажется это всё хуйня и электрон это просто новомодная тема, которая скоро заглохнет. Осло, не слышал что скайп переписали на электрон. Меньшей хуетой он от этого не стал, лучше бы откатили в 2012.
> Атом, vs code, шкайп и дискорд - да дохуя чего десктопного пишется на электроне. А раньше это были кресты only. И это только начало. Сперва пидорнули дельфи - теперь пидорнут и кресты.
Если честно, я просто не представляю, как люди пользуются любыми веб-приложениями. Либо я вырос на десктопных, не тормозящих приложениях, и такой требовательный, либо что-то не так с моим софтом, либо люди не знают, каким вообще приложение должно быть.
Вот, скажем, открываете вы документ в Google Docs. Открываете страницу, начинаете набирать, и понимаете, что полностью страница еще не загрузилась, и джаваскрипт не успел перевести фокус на поле ввода. Первые три набранные буквы пропали.
Это просто первая мелочь, пришедшая мне в голову, но она для меня столько значит, что сразу ставит крест на Google Docs.
Или, например, нажимаете во многих веб-приложениях правую кнопку мыши на каком-нибудь объекте, ожидая, что вы получите меню объекта, и видите там «назад», «вперед», «сохранить страницу», и так далее. Понимаю, что нажатие правой кнопки мыши можно перехватывать, как это делает тот же Google Docs, но когда ты такое видишь в, казалось бы, десктопном приложении (написанном на node.js, который тащит с собой chrome.exe и ffmpeg.dll, и простейшее приложение занимает больше 50 мегабайт в архиве), то это просто неприемлемо.
«Десктопные» приложения Slack, Mattermost, текстовый редактор Atom, который раньше не умел открывать файлы с размером более 2 МБ, а сейчас открывает мегабайтный файл несколько секунд — просто какой-то мусор, непонятно, кто в здравом уме будет пользоваться такими программами, пока есть альтернативы в виде нормальных десктопных приложений.
А я о чем блять. И при всем при этом люди пользуются этой парашей, а не десктоп-прогами. Взлетают всякие говно-хромоси где кроме браузера нет нихрена. А люди смотрят кинчики в веб-интерфейсе вместо того чтобы качать файлики в поррент-клиенте на крестах, слушают музычку вбыдлятне вместо того чтобы делать это в плеере на крестах, пишут мыльца в веб-интерфейсе гмыла и яндекса вместо того чтобы делать это в прогах мейл-клиентах на крестах... Вылезли всякие saas-параши, теперь и фотошопы и прочая хуйня в браузере.
А лет 10 назад все было кардинально не так. Кресты пиздец как сдали позиции.
Сдали позиции не кресты, а настольный софт. Попробуй-ка поиграй в ААА в вебе, поработай с мультимедиа в вебе, обработай пресловутую бигдату в вебе. Нихуя. Все с крестами нормально, просто половину всякого барахла которое на них писали, утащили в веб и придумали на это новые языки с нескучными обоями.
>Попробуй-ка поиграй в ААА в вебе
Давно придумали. От стриминга игор с сервака до "прошёл на ютубе" и твичей.
>просто половину всякого барахла которое на них писали, утащили в веб и придумали на это новые языки с нескучными обоями.
Вот именно. А утащили в веб это по некоторым причинам - из-за крестов и того что на жс макакить проще чем ебаться с шаблончиками, и потому что зонды в анус проще пихать со слежкой.
Процент плюсов упал из-за низкого порога вхождения в скриптовые языки, хипстеры и быдло вкатываются пачками, но проблема в том что без плюсов вся скриптопараша просто умрет. Скриптопараша держится на фундаменте из плюсов и си, и без этого фундамента ей конец. Как ты сделаешь гуй на питоне если прекратится разработка qt/gtk+? Что станет с js если хром и вэбкит исчезнут?
Си - да, а вот кресты не держит ничего. Си то останется навечно как минимум из-за того что на нем все системные апи, и нет никаких сраных манглингов, имена функций экспортируются как есть.
> Си то останется навечно как минимум из-за того что на нем все системные апи, и нет никаких сраных манглингов, имена функций экспортируются как есть.
ИРЛ практически все бэкендики-рантаймчики-игродвижочки пишутся как раз на плюсях/си-с-классами потому что reinterpret_cast и прочие ништяки.
>Давно придумали. От стриминга игор с сервака до "прошёл на ютубе" и твичей.
Что ты несешь? Поиграй != посмотри.
>А утащили в веб это по некоторым причинам - из-за крестов...
Бритва Оккама отсекает твои охуительные догадки, основанные на неприязни к крестам. Я к ним тоже отношусь настороженно, но мне кажется что в веб всё перешло потому что появился собственно веб (быстрый безлимит, продвинутые сайты уеб2.0, вагон памяти на современных машинках и т.д.).
Ну стриминг игр это тоже "поиграй", но он всё равно несёт хуйню, потому что там очень нескоро будет аналогичный уровень, ибо оверхеда овердохуя, никому нахуй не нужно ещё болше задержки в инпуте.
G E F O R C E N O W
if (left) delete left;
if (right) delete right;
В своей программе я создаю один указатель на узел, типа это корень. Но я не написал деструктор, потому что если я явно удаляю верхний узел, то крашиться начинает всегда. Как это можно починить?
Без всего кода это ни о чём. Действительно попробуй вначале выставить указатели в ноль (хотя я на 99% уверен, что под те ебанутые случаи, когда это не делается за тебя, твой код не подпадает). А так - гоняй код под отладчиком и не еби мозг себе и мне.
On a side note, а вот в Русте нужно быть сеньором, чтобы крашить программы как джун на крестах =)
>>88211
Хех, лаба же, препод может не знать про умные указатели :3
Лучше после делита явно присваивал этому указателю нуллптр, а ещё проверь места где ты ходишь по дереву, сегфолт вылетает в момент когда ты идёшь в память, которую твоему процессу не выделила ОС, скорее всего ты либо пытаешься считать не свои данные, либо вообще с нуллптра считываешь.
>Хех, лаба же, препод может не знать про умные указатели :3
Я про то, что на nullptr при удалении проверять не надо. Бох с ними, с умными указателями.
Алсо, undefined behavior, как он есть.
Ты прав, мне явно не хватает опыта крестьянской жизни :(
Ну по твоим меркам, наверное, всё мертво, что ниже Руби по популярности. Карьерные перспективы меня не особо волнуют, я хочу вкатиться в продакт-разработку и ебашить в одно рыло софт, который иначе пишет отдел из десятка весляров и погонщика. Если наработаю навыки и нахуярю библиотек, то вполне смогу этого добиться.
Вообще, ковбойская суть плюсов - не самое в них неприятное. Куда больше меня отвращает от них стремительное устаревание кода, когда то, что писалось под стандарт 2003 сейчас превратилось в технический долг, который нужно изолировать от нового кода. Это не говоря уже о проходящей моде на Буст и извращения дизайна им. Александреску.
Это не код, это твои маняфантазии. Код подавай или седлай отладчик и хауау.
Вряд ли строка с условие порождает сегфолт.
Стремительное? Код на плюсах просто охуительно живуч не в тему. По-моему это нормально что портянки стандарта пятнадцатилетней давности сегодня устарели, вся писечка лишь в том что тебе надо их поддерживать, в какой-нибудь другой среде (соответственно с другим языком, не плюсами) ты бы уже по десять раз переписал их набело с ног до головы и всё было бы ок.
Замена крестам - не сраный раст, а няшная дишечка.
>раньше это были кресты only
А Java и C# забыл? По-моему на них гораздо больше писали десктопных приложений чем на C++. Кресты доминировали всегда там где производительность критична, например браузеры, графические-, видео-, 3д-редакторы, игровые движки, драйвера.
>>87299
С чего ты взял что Дельфи взлетел? Последний раз я на нем писал лет 10 назад и тогда он уже был на закате.
Java и C# тоже появились не на ровном месте и долю отожрали именно у крестов.
Хочу переписать этот код с Go на C++/Boost
package main
import "time"
import "strconv"
import "bytes"
import "crypto/sha256"
type Block struct {
Timestamp int64
Data []byte
PrevBlockHash []byte
Hash []byte
}
Возникли вопросы насчет выбора типов данных. Timestamp из структуры Block можно оставить таким же uint64_t.
Data, PrevBlockHash и Hash здесь массивы произвольной длины, кроме хэшей, которые представлены 32-байтными массивами байт. Чем можно заменить эти массивы байт в C++? Использовать std::string? std::basic_string<char>? Я ведь не буду использовать const char* и рисковать сделать учечку памяти.
Когда на джаве и сишарпе во времена настольного софта (в нулевые) кто-то его писал? Шарпа тогда не было, а кресты доминировали ВЕЗДЕ на пару с дельфи, это сейчас они в описанных тобой нишах правят бал.
Если тебе нужнен динамичный массив, то std::vector<unsigned char>, если статичный то std::array<unsigned char>
std::basic_string<char> и std::string это одно и тоже
Собственно вопрос: где можно почитать как оно всю эту хуйню собирает?
Забыл уточнить, делаю всё в Visual Studio 2017.
Гугли "динамическая/статическая линковка". Видимо ты в релизной версии включил статическую линковку.
С д на конце это дебажные длл которые у обычных пользователей не стоят.
Как написать обобщенный код, который бы сериализовал целочисленные типы вроде int32_t, uint64_t, int в массив байт?
А в чем проблема? Всего то 2 параметра - тип(или размер в байтах, внутри трейтов натолкаешь что целочисленный) да порядок байт.
Чем тебе не угодили htonl/ntohl?
Константа объявлена как extern const int имя = 3.
В другом файле написано extern const int имя.
Казалось бы все работает, в файле, куда передаётся эта константа я могу создать статический массив размера [имяконстанты], всё компилится, но при этом я не могу создать объект типа std::array<int,имяконстанты>, что с ним не так?
Ошибка: "expression must have a constant value"
Вообще я там не создаю array, а передаю его параметром в метод класса, но создать тоже не получается, также ошибка.
Вдруг это поможет.
Я в итоге просто и объявил её в хедере, просто хотел изменятьизменять до времени компиляции переменную из сурс файла, а буду изменять из хедера.
Ввод на стандартный поток какой-то последовательности. Последовательность завершается признаком конца ввода.
Что это за признак? ctrl+d? Если да, то это много проблем порождает.
Я питался писать по всякому, и
while (cin >> a)
и
while (!cin.eof())
Оба эти варианта не принимаются авто системой - ошибка ввода. При этом во втором случае, еще и последний символ считывается два раза.
Последовательность. Мне нужно считать последовательность неизвестной длины, концом которой является признак конца ввода. Я спрашиваю как это сделать.
Что ты хочешь сделать? Что ты подразумеваешь под последовательностью? Какой именно признак конца ввода? Если вводить через cin >>, то по дефолту признак конца ввода это пробел или собственно конец ввода.
Если ты вводишь строку можно использовать getline, у него признаком конца ввода является только нажатие на энтер.
Понятия не имею, что вижу, то и говорю.
На стандартном потоке ввода вводится последовательность целых чисел. Последовательность завершается признаокм конца ввода. Сделайте там какое-то действие с последовательностью.
Компилятор gnu c++
В интернете вычитал, что признак конца ввода - ctrl+d или z но у меня во втором варианте, к примеру, программа просто останавливается.
Как вводятся числа не сказано? Например через пробел или через строку.
Странное задание, какое-то неконкретное.
Могу предложить такое решение, чтобы закончить ввод нужно ввести Ctrl+Z.
Вводятся через стандартный поток ввода. Нет ни пробелов, ни строк, просто числа идут на стандартный поток ввода.
Я не понимаю, что тебе не нравится. Ctrl-Z - признак конца ввода. Грубо говоря твоя последовательность выглядит вот так
1 2 43 67 8 43 89 34 ^Z
В цикле while(cin >> a) ты делаешь все необходимые действия со своей последовательностью. Как только встречается конец ввода, программа выводит результат и останавливается.
>>90127
Сам найдешь ошибку? Чему будет равно i если я введу строку
1 34 67 43 0 76 123 87 ^Z?
EOF кстати тоже использовать нельзя. Программа завалится вот на этой строке
1 2 3 -1 54 32
>Я не понимаю, что тебе не нравится
Как ловить то конец ввода? Ну допустим пробел. А как мне его ловить, если я считываю в интовую переменную?
Бля, а ты вообще имеешь право так быдлокодить? Есть гарантия что логические выражения будут справа налево вычисляться?
>Есть гарантия что логические выражения будут справа налево вычисляться?
Насколько я помню, да, слево направо, лениво
Они же слева направо вычисляются.
мимо автор исходного вопроса.
Уже разобрался, спасибо.
>>Я не понимаю, что тебе не нравится
>Как ловить то конец ввода? Ну допустим пробел.
А ты можешь скинуть полностью формулировку задачи. По тому что написано можно предположить, что после введения строки чисел пользователь просто нажимает CTRL-Z и программа завершается, выполнив все требуемые действия
>>90143
Ну не валится конечно, я неправильно выразился. Просто результат будет неправильным если встречается 0. А если использовать вместо '\0' EOF (выше кто то советовал), то результат будет неправильным если встретится -1.
На самом деле довольно странно выглядит "пользователь введёт ctrl+z", скорее всего в задании есть какой-то символ который будет играть роль конца строки.
Ну это понятно, там ведь результат оператора >> же неявно кастуется к булу через проверку флага потока?
Если я правильно понял, то вот ответ на твой вопрос https://stackoverflow.com/questions/38978266/how-can-stdcin-return-a-bool-and-itself-at-the-same-time
1) Как часто используете в проектах ебанутую идиому SFINAE, сколько бы ни читал никак не могу въехать
2) В каких случаях пишете кастомный аллокатор?
И самый тупой вопрос: никак не могу перейти от написания элементарных заданий из учебника к чему-то более серьезному, проект в голове вроде бы родился, но вот с архитектурой проблемы, как вы проектируете?
Я использовал на работе 1 раз по приколу. Просто кусок сделал люто-шаблонным. А так - ты врятли это где-то увидишь в коде.
2. В качестве саморазвития онли. Все, что нужно, уже есть в бусте.
3.Долбись головой об стену, и старайся писать серьезное, как можешь. Это нарабатывается только опытом
> 1) Как часто используете в проектах ебанутую идиому SFINAE, сколько бы ни читал никак не могу въехать
Начиная с C++17 заметно меньше, ибо теперь множество кода можно написать с if constexpr. SFINAE использую в основном только для compile-time определения особенностей типа (где стандартные утилиты из type_traits не помогают) и подобного, чтобы потом написать что-то вроде if constexpr(is_yoba_type<T>), где is_yoba_type - SFINAE-функция для проверки типа.
> но вот с архитектурой проблемы, как вы проектируете?
Читать книжки по этой теме, посты в блогах/форумах, читать чужой код в похожих проектах (в которых есть похожий функционал)
Ну и самое важное: уметь формулировать задачу конкретно, а не слишком абстрактно
Например, думал себе сделать что-то вроде таск треккера в котором был бы функционал парсинга исходников на предмет TODO/FIXME и прочих комментариев
Сначала тупо решил парсить комменты и смотреть что там в них. Плохой был вариант т.к. много лишней работы.
Потом конечно допёр что мне не нужны все комментарии.
DJGPP
ctrl-z попробуй
1) Часто. Мета-программирование очень популярно в финтехе, ибо оптимизации.
2) Редко. Это сложнее SFINAE и редко нужно.
3) сам хуй научишься. Пробуй, но лучше поработать с кем-то, кто тебя будет носом тыкать. Постепенно наберёшься от него.
Драйверов для чего? А то это такое широкое понятие, что "драйвер" может быть и прикладным ПО.
Спасибо.
Я тоже драйвероеб. У меня стоит VS2017 и WDK для Win7 в директории C:\WinDDK. Я создал пустой солюшен WDM и написал main.cpp с подключением ntddk.h и точкой входа. Ничего не компилируется. Что надо прописать в настройках проекта кроме инклудов?
Building 'Driver' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.
1>C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.common.targets(482,5): error MSB6004: Указанное расположение исполняемого файла задачи "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86\stampinf.exe" является недопустимым.
Читал пример объявления класса Х (с полем m), встретил такой конструктор:
X(int i =0) :m{i} { }
Поясните, пожалуйста:
1) зачем =0
2) что такое :m{i}
Еще и вот так далают :m(i)
=0 - значение по умолчанию.
{} - 99% на то что долбоеб какой-то узнал про них и прям решил резко их везде юзать.
а так обычно () круглые скобки используют для инициализации.
(?:31\.(?:0?[13578]|1[02])\.\d{4})|(?:30\.(?:0?[13456789]|1[012])\.\d{4})|(?:[0-2][0-9]\.(?:0?[1-9]|1[012])\.\d{4})
Это дата в формате dd.mm.yyyy(без проверки на високосные года). Хуле оно так медленно работает? Например, взял я текстовый файл(скопировал статью по истории с вики с датами), весом 120кб, оно там что-то ебошит 4 секунды примерно, и это без всяких проверок!
С другой стороны, нашел на стековерфлоу вот такое выражение примерно для той же задачи:
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
Оно работает быстро.
Еще ранее сегодня я ебанулся и написал такое:
((?:(?:(?:(?:\n|\s|^)0?\d)|(?:[12]\d)|(3[01]))[.\-\s](?:(?:0?[13578])|(?:10)|(?:12)|(?:jan)|(?:mar)|(?:may)|(?:jul)|(?:aug)|(?:oct)|(?:dec)|(?:january)|(?:march)|(?:july)|(?:august)|(?:october)|(?:december)|(?:январь)|(?:января)|(?:март)|(?:марта)|(?:май)|(?:мая)|(?:июль)|(?:июля)|(:?август)|(?:августа)|(?:октябрь)|(?:октября)|(?:декабрь)|(?:декабря))[.\-\s]\d{4})|(?:(?:(?:(?:\n|\s|^)0?\d)|(?:[12]\d))[.\-\s]0?2[.\-\s](?:(?:(?:[02468][048]00)|(?:[13579][26]00))|(?:(?:\d{2}[2468][048])|(?:\d{2}0[48])|(?:\d{2}[13579][26])))|(?:(?:(?:(?:\n|\s|^)+0?\d)|(?:1\d)|(?:2[0-8]))[.\-\s]0?2[.\-\s]\d{4}))|(?:(?:(?:(?:\n|\s|^)0?\d)|(?:[12]\d)|(?:30))[.\-\s](?:(?:0?[469])|(?:11))[.\-\s]\d{4}))
Правда, эту хуйню я не закончил(не добавил все месяцы),т.к. протестил на том самом файле весом 120кб и увидил, сколько оно работает.
Помогите, тапками не кидайтесь, я новенький в этом деле. Что я делаю не так(например, в самом верхнем выражении)? Как это можно ускорить?
>Как это можно ускорить?
Вроде в плюсах была какая-то залупа по превращению конкретного регекспа в компайл-тайм код. Не помню как называлась.
>Помогите, тапками не кидайтесь, я новенький в этом деле.
Есть ли задачи? Не проще ли как диды if( str[2]=='.' ) return str.substr(1,2 и т.д. и т.п?
Тем более что разных пар dd.mm всего 356, засунь в хешмапу, хуле ты.
>Вроде в плюсах была какая-то залупа по превращению конкретного регекспа в компайл-тайм код.
Не слышал о таком, спасибо, погуглю.
>Не проще ли как диды
Проще, но так не интересно.
> Вроде в плюсах была какая-то залупа по превращению конкретного регекспа в компайл-тайм код. Не помню как называлась.
Ragel? Там не совсем регексп, там пиздец генератор...
Есть boost xpressive, но там в рантайме. Ну а в компайлтайме шаблоном вроде регекспы в дишечке задаются.
Например, у меня есть {231, 5, 78, 45, 89, 9, 0, 12}
Надо получить "2315784589012"
Да, я совсем нуб, в гугле не нашел.
Можно так.
Если нужны именно массивы, можно потом из строки каждый символ добавить в массив(и в начале вместо вектора тоже взять массив).
> Можно так.
> Если нужны именно массивы, можно потом из строки каждый символ добавить в массив(и в начале вместо вектора тоже взять массив).
Зачем? Просто union
Ты ебобо? Как ему поможет union?
>>92075
Именно в массив (в сишном) или строку/вектор? Ты в тот тред зашел? Потому что в первом случае >>92083. А если имеется в виду сишный массив и работать надо сишными методами (бывают такие ебанутые преподы, если это задание), то там придется чутка поебаться.
Не так прочитал.
А как он собрался блять конвертить то что в большем типе? Там известно что числа в интах будут влезать в байт?
Нахуя МНЕ конвертировать? to_string - стандартная функция, которая делает всю работу за меня.
Если бы пришлось самому этим заниматься, я бы брал каждое число из массива, получал его цифры остатком от деления на 10, переводил бы их в char(прибавляя значение нуля из ascii таблицы - 48) и записывал в массив char'ов. Наверное, to_string как-то так и делает для одного конкретного числа.
у него есть массив {231, 5, 78, 45, 89, 9, 0, 12}
ему нужен массив {'2', '3', '5', '7', '8', '4', '5', '8', '9', '9', '0', '1', '2'}
Со строкой выше анон предложил вариант со строками. В пур сишке это бы делалось так. Объявлялся массив чаров. Последовательно берется каждый инт, объявляется для него промежуточный массив, инт конвертится в массив чаров (деление с остатком, потом + '0', потом это записывается в промежуточный массив, потом этот массив реверсится и копируется в результирующий массив - есть и другие варианты с рекурсией, например или itoa(int), короче каждый изобретает свой велосипед на то она и сишка) и так до победного.
Тут нихуя непонятна постановка задачи.
> Тут нихуя непонятна постановка задачи.
Двачую, пусть анон постарается получше объяснить, что ему нужно.
Да это почти сишный код. А в сишечке потенциально что угодно может упасть. Можно конечно колхозить через realloc'и, но, во-первых, это медленно, а во-вторых область знаний анона-вопросителя вряд ли простирается до этого момента, если он задает такие вопросы.
В общем это не критично, но все таки доебусь со скуки. Нахуя писать auto если тип входных данных известен и нахуя использовать магическое 48 вместо очевидного '0'?
У него же шаблонный код, поэтому он просто пишет auto вместо чего-то подобного.
>Нахуя писать auto если тип входных данных известен
Патамушта это модерн C++.
>нахуя использовать магическое 48 вместо очевидного '0'
Да какая разница, 48 это ASCII код цифры 0. И char по сути 8-битный integer, вот и сделал все в интегерах.
А еще можно было вконце стринга вместо c[pos] = 0 написать c[pos] = '\0' , это то же самое. Эти одиночные кавычки же тупо алиас для интегера, можно даже макро назвать. В конце концов компилятор их в интегер превращает. Я тут старался велосипед свой писал, а вы как изверги до мелочей докапываетесь!
Лол, спешите видеть! Вместо исправления говнозовисимостей и перекомпиляции сотни файлов при изменении одной строчки спешит заклеймить auto. Старпер ас ис, используй мост деб
Ты на вопрос то ответь. Насколько труднозатратно для компилятора выводить тип?
Тьфу блядь действительно шаблон
Ну так это обычные вещи, известные до появления auto засирателей (разделение реализации и объявления, минимальность по включению, указатели вместо объектов, etc...). Как auto то использовать, чтобы не тормозить сборку? int i = 0; auto j = i + 1; норм или не норм?
remove_pointer_t как вложенный относительно самого шаблона тип не является контекстом вывода.
Тут подробнее:
http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0293r0.pdf
Вообще не встречал упоминаний о том что авто замедляет сборку.
Вообще если логически подумать, то компилятор в любом случае проверяет соответствие типов слева и справа от знака равенства. Так что навряд ли замедляет. Просто вместо сравнения делается подстановка в зависимости от выражения справа. Поэтому не должно влиять настолько, чтобы это было заметно
>А во что обходится использование auto в плане скорости компиляции?
Очень сильно зависит от конкретного случая. От нулевого оверхеда, вроде auto i = 1, где тайпчекер и так все будет проверять, до теймплейтной пиздецомы вроде эйгена, где на каждом auto будет накапливаться expression template, и в результате тайпчекеру придется ресолвить стоэтажное выражение, где вполне вероятна экспоненциальная сложность от каждого предыдущего auto. В обычных случаях, если не злоупотреблять, больше на читаемость влияет.
Не совсем подходит. Если ему нужен именно аналог switch, это значит что все строки известны заранее, а простой unordered map как минимум добавит рантайм оверхеад не просчитывание хэша строк. Лучше всего в данном случае взять какую-нибудь библиотеку с compile-time высчитыванием хэша, к тому же если все строки заранее известны можно сделать идеальное хеширование (т.е. хеши разных строк совпадать не будут), а значит сами строки в бинарнике даже хранить не надо будет.
не надо ебать голову и изобретать велосипед там, где можно справиться простыми вещами, которые тяжелее по времени исполнения (в пикосекундах), но в разы сложнее при написании (в часах, а иногда сутках)
Самое сложное тут будет написать функцию хэширования, а с C++17 сам АПИ будет выглядеть довольно красиво, как-то так:
https://pastebin.com/CKjAx9G5
Нахуя хэш-то? В свитче обычно меньше десяти значений, проще и быстрее тупо сравнить в цикле.
> Нахуя хэш-то?
Чтобы не хранить сами строки в бинарнике, очевидно же. Опять таки можно сделать идеальный хеш (например сам хеш будет занимать 48 бит, а оставшиеся 16 бит будут занимать счётчик, увеличивающийся на 1 в случае коллизии), а значит сравнение строк вообще никогда не понадобится.
>>92619
Если лямбда не захватывает значений, то превращает её в указатель на функцию.
> например сам хеш будет занимать 48 бит, а оставшиеся 16 бит будут занимать счётчик, увеличивающийся на 1 в случае коллизии
Хотя вру. Придётся делать минимум две таблицы. В первой теблице будут счётчики коллизий (или псевдо-значения, например отрицательные числа будут хешами второй таблицы, а положительные - счётчиками коллизий), а во второй нормальный хеш-мап. Считываем хеш с начальным значением равным нулю, если счётчик коллизий равен нулю, то сразу считываем значение со второй таблицы, если нет, то считаем хэш ещё раз на этот раз с новым начальным значением и затем берём значение со второй таблицы.
>>92628
> А где об этом почитать можно?
А что читать-то? Очередная неочевидная перегрузка оператора. Ещё можно использовать static_cast, но плюсик занимает меньше места и скобки нинужны. https://ideone.com/WGl8nF
>Чтобы не хранить сами строки в бинарнике
Тебе все равно придется их там хранить - хэш-таблица хранит значения ключей, по хэшу ищется нужная запись в таблице, по которой потом производится сравнение строк. Так что строки в бинарнике по-любому останутся.
> по которой потом производится сравнение строк.
Я выше обисал алгоритм идеального хеширования. Там строки хранить не нужно.
>идеального хеширования
Чтобы коллизии считать, тебе все равно исходная строка нужна. Для строк, генерируемых в рантайме такое работать не будет. К тому же идеальный хэш возможен только для строк ограниченной длины. То есть у тебя в программе будет потенциальный баг, когда заматчится неправильное значение. Привет тому, кто это дебажить будет.
> Чтобы коллизии считать, тебе все равно исходная строка нужна.
Нут так речь идёт о свитче, а значит все строки заранее известны. Все коллизии можно пересчитать ещё при конпеляции и хранить таблицу коллизий вместо самих строк. Идеальное хеширование по-определению будет работать, только если заранее известны все входные данные.
>Нут так речь идёт о свитче, а значит все строки заранее известны
Строка, с которой они будут матчится-то неизвестна. Если она задана на этапе компиляции - вопросов нет, но если генерируется в рантайме, твой свитч превращается в тыкву.
> Строка, с которой они будут матчится-то неизвестна.
Хотя да, если сами строки будут генерироваться непонятно откуда, то может произойти бида.
А что делать-то будешь хоть?
Вдруг там у тебя будут какие-то йоба-ограничения на стандарт и на функционал?
Да я сам охуел, я бы лучше на питоне, на нём гораздо больше писал.
Так что, может что-то повторить стоит я даже не знаю, я последний раз на С++11 писал, а тут уже 17. Боюсь обосраться.
Или норм, объяснят, а там по ходу втянусь, разберусь? Никто же не выгонит меня в первую неделю? Или могут?
>>92733
Почитай книжки какие-нибудь про с++ уже после 11 стандарта.
Естественно от тебя в первый день не будут требовать йоба магию на шаблонах.
Но, например, разобраться в стандартной библиотеке. Какие там есть контейнеры, функции какие и тд.
К примеру
http://goalkicker.com/CPlusPlusBook/CPlusPlusNotesForProfessionals.pdf
Благодарю.
>http://goalkicker.com/CPlusPlusBook/CPlusPlusNotesForProfessionals.pdf
>может что-то повторить стоит
Анон, спасибо, это то, что нужно.
>>92184
Короче, вся суть в том, что мне надо зарандомить число на 128 битов в char. И я думал использовать стандартный rand().
И еще очень тупой вопрос - можно ли преобразовать unsigned char в char*, чтобы все осталось ОК и без лишней возни?
Пишу на С++, но использую чужой код, написанный на C.
звездочки полетели, короче там везде массивы
Не понял инклюдов. Ошибка отображения?
Хуево быть тобой, фантазер-увольнятель
Если значение больше 175, то нет.
Вообще рекомендую посмотреть, как считает ли твой компилятор тип char - знаковым или беззнаковым, т.е стандарт этого не оговаривает
узнай на чем тесты пишут. буст там, что-то еще.. узнай специфику проекта - что он делает глобально, разберись.
сам цпп в тестах тупой как пробка обычно.
Охуеть. Я студиозус в ДС1 пилю свою хуйню на гитхабе целыми днями (пизжу, но таки-пилю, пусть не целыми днями) и на работу никуда не берут, а тут тип устроился на кресты, на которых он один только труп страуса и дрочил на предмет заданий. Охуеть.
Потому что надо ходить и устраиваться а не сидеть на жопе. Гит это хорошо, но его одного мало.
Сам скоро пойду устраиваться в филиал одной большой американской компании
2-курс
Тренируйся проходить собеседования (продавать себя). А гитхаб можешь смело в помойку выкинуть. В начале карьеры работодатели смотрят в основном на потенциал кандидатов.
Из очевидных вариантов SDL/SFML + OpenGL, что ещё сюда присобачить?
Ну, я хочу некоторую долю велосипедства сохранить, поэтому кое-какой физон сам напишу
glm - математика
sdl_image/gli/stb_image - загрузка текстур
Ну а дальше в меру своих навыков можешь реализовывать функционал который нужен
А зачем там C++ учить? Всё равно большая часть стандартной библиотеки там не доступна. Лучше учи Си (ну можешь прочитать ещё про классы) и не выёбывайся.
Так язык программирования avr - урезанный C++. И библиотеки с расширением .cpp.
Я не выёбываюсь. Просто не очень разбираюсь.
Попахивает хуитой. Работодатель будет кормить меня в обмен на код. Ему что, похуй как я пишу этот код и он будет проверять мой потенциал задачками на собесах? Если у меня есть потенциал, то я раскрываю его в решении боевых задач, я так думаю.
Да просто отослал резюме.
Компания занимается в основном сетевыми адаптерами и написанием дров под них.
В итоге на след. день перезвонили, вот 22 числа пойду на собеседование.
>программирования avr микроконтроллера
Для восьмибиток кресты излишни. Там и сишка-то жирновата. Лучше сразу на асме кодить.
На форте. Там можно даже ООП сделать.
>Лучше сразу на асме кодить.
Библиотеки самому написать с нуля тоже? Я не такой программист. Ассемблер слишком слоен для меня.
Ага только надо успеть почитать насчёт этих протоколов, NDIS, и остальную хуету вроде WDF и WFP
Мне кажется что с таким подходом тебя пошлют на хуй. "Почитать насчет этих протоколов и остальную хуету", лол. Тебе работать с этой хуетой. Главное чтобы собеседовать было некому.
Посмотрим, хех.
Всё равно у меня опыта в этой сфере нет, о чём я писал в резюме, но всё равно позвонили же.
>с таким подходом
Всё знать невозможно, тем более джуну, важно обучаемость показать и адекватность.
>Если в моей программе больше одного файла, то в одном только функции (добавочный файл), а в другом main(главный файл), где я эти функции использую?
У тебя два файла: один с объявлениями функций, полей, вложенных классов, перечислений и прочей хуйни - так называемый заголовочный файл, или header (.h), а второй с реализацией всей этой хуйни.
>Нельзя ли вставить файл в проект и выполнить его перед остальными файлами, при этом не вызывая функции из него?
Что сделать? Выполнение программы в плюсах начинается и заканчивается в main. А чтобы пользоваться твоими файлами, тебе надо подключить хэдэры в main, или один хэдэр, а он пускай другие подключает.
Кажется, задаю тупые вопросы.
У меня два .срp файла, в одном пишу функции, в другом сперва объявляю их, потом вызываю. Функций мало, поэтому в .h файл ничего выносить не стал. Две функции main не сделать, так?
Ты можешь хоть все функции в одном файле писать. При запуске с++ кода операционная система вызывает функцию main. Соответственно, если у тебя туева хуча функции написано вне мейна, а в мейне ты их не вызываешь, то вызываться они не будут вовсе.
Надеюсь ты это имел в виду.
Под вне мейна я подразумеваю всякие обычные функции, которые находятся в области видимости файла/класса, а не какие-нибудь лямбда-выражения, функторы, который можно прямо внутри функции объявлять.
У меня один файл рисует фрейм и обрабатывает действия, в функцию это не вынести, а майна в привычном понимании там нет, только эвенты и их код.
> майна в привычном понимании там нет, только эвенты и их код.
Event loop в любом случае находится в мейне, так что не надо тут врать нам.
Ни хуя себе. Вакансия "Программист C++, опыт работы 1-3 года", ты приходишь весь такой адекватный, тебе дают работу. Так?
Если у тебя нет опыта, но ты идёшь на объявление, где опыт 1-3 года, то ты где-то ошибся.
На C++ нет никаких вакансий без опыта.
Я листаю hh по Москве, и единственная вакансия джуна, которую я пока что увидел - это Коломна, непонятно как попавшая в выдачу.
Забыл добавить, переключаюсь в "Опыт работы -> Без опыта" - заебись, первые двадцать вакансий "Опыт работы с X от 2 лет, опыт работы 3-6 лет, Senior Software Blahblahblah".
Я попросил пруфы трёх вакансий в Москве без опыта
, а не ссылку на выдачу, про которую я сказал пять минут назад. Твоя (а по факту моя) ссылка ведет на "Опыт не менее двух лет; опыт CUDA" и прочую парашу.
>Написание программ для управления процессом фото съёмки с применением промышленных камер.
>Под руководством ведущих разработчиков - работа над проектами, связанными с банковским оборудованием.
>Ускорение и оптимизация алгоритмов, написанных на С/С++ или Matlab (эффективная реализация на GPU с использованием CUDA или OpenCL).
>Опыт разработки на CUDA. Знание С++11 (особенно concurrency). Уверенное программирование на С++, STL (опыт не менее 2-х лет).
Это не вакансии для новичков, это фирмы без денег.
>Опыт не менее двух лет
>Отличное знание С++, STL (опыт не менее 2-х лет)
>Требуемый опыт работы: не требуется
Это опыт программирования, а не опыт работы.
Ты пытаешься троллить? В этой же вакансии на которую ты ссылаешься, по тексту далее:
https://hh.ru/vacancy/25606305?query=разработчик c++
"пыт написания программ для управления процессом съёмки с использованием промышленных камер (например, камеры Basler, Автоматическое управление экспозицией, Exposure control, Gain)."
Тут явно речь не об "опыте программирования", блядь. Угу, студиозусы через одного по приколу пишут софт для камер Basler и т.д.
Угу, я покупаю весь необходимый обвес, год пишу эту дипломную, затем захожу на Hh - вакансия закрыта. Доброе утро.
Не пизди, что не троллишь. Требования, описанные в вакансии, неприменимы к студенту. Тут же фактически требуется знать относительно узкую предметную область. То есть пришел на работу и сразу хуяришь набело нужный софт для конкретных каких-то камер. Джуна они ищут, прости господи.
Ты какой-то дурак, ты хочешь, чтобы тебя взяли работать, платили тебе деньги и при этом ты нихуя не умел.
>Всё знать невозможно, тем более джуну, важно обучаемость показать и адекватность.
Это твои слова или тот анон куда-то съебал, и ты решил поотвечать за него? Ты (вы) уж определись (-тесь), надо ли задрачивать гитхаб или ходить по собеседованиям (ну я пока что делаю и то и другое), знать предметную область или чисто плюсы с stl. Я студент, блядь, я не могу по выпуску из своей шараги знать технологию производства говяжьих анусов, но я могу ей научиться. Кто может меня взять на работу без опыта, чтобы я (без шуток) вникал в эту самую область и пилил свой говнокод?
Я это к тому, что "обучаемость и одыкватность" разбиваются об:
>Опыт написания программ для управления процессом съёмки с использованием промышленных камер (например, камеры Basler, Автоматическое управление экспозицией, Exposure control, Gain).
https://career.ru/vacancy/23914795?query=разработчик c++ вот это вакансия без опыта (вернее на нее похожа).
Хуета про камеры - это типичный ооо вектор (особенно строчка про исторический центр Москвы порадовала - вектор векторный)
Короче, пора перепиливать всё нахуй не под MVC, а под M(VC), чтобы класс игрока включал в себя и ввод и вывод? Или есть еще надежда на спасение и я не настолько объебался в проектировании?
int main() {
setlocale(LC_ALL, "rus");
WIN32_FIND_DATA f;
HANDLE hf;
hf = FindFirstFile("./", &f);
if (hf != INVALID_HANDLE_VALUE) {
do {
puts(f.cFileName);
} while (FindNextFile(hf, &f) != 0);
FindClose(hf);
}
Что сделать чтобы он этот список ещё и в файл сохранял?
Пробовал обычным дедовским способом file<<f.cFilename дак он мне туда вместо списка выводит targetver.h* не ебу что это вообще такое
Гугли dirent.h, там попроще работа с файлами - когда-то правил простую прогу для вывода списка файлов в папке, разобрался быстро
Можешь кинуть сюда свою почту, но не обещаю, что откопаю файл с кодом
> Гугли dirent.h, там попроще работа с файлами
Зачем что-то гуглить, если давно есть стандарт для работы с файлами? Пусть изучает std::filesystem и не ебёт мозг. Полностью поддерживается в VS 2017 15.7 - последней (на данный момент) стабильной версии вижуал студии.
>давно есть стандарт для работы с файлами
Так давно, что пиздец.
Сколько лет он есть? 30? 40? 50?
Год уже есть. Если бы это был жаваскрипт, то уже успело бы смениться двадцать фреймворком и три принципиально новых подходов к программированию.
>Год уже есть.
https://www.iso.org/standard/68564.html ISO/IEC 14882:2017
Publication date : 2017-12
Что обычно спрашивают на что обращают внимание.
Я не программист, но некоторые моменты скажу. Скорее всего там будет такой человек, который будет анализировать твоё поведение в обществе и коллективе. Не рассказывай ничего такого, что может тебя показать необщительным и зажатым человеком.
Хорошо, попробую, спасибо за совет.
UCLASS()
class AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyActor();
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
};
А?
Макросы
>Пацаны, расскажите, если ваш байтострел такой охуенный, то зачем
Макросы? Это часть охуенного языка. В чём проблема?
Приват там всякий протектед и ебля с друзьями.
Асло, не сумел на скомпилить некоторые либы на минГВ, прост компиляция обрывалась с ошибками и хуй его знает в чём дело. В итоге поставил пингвина порядком подизъёбся с ним недели две, но вся хуйня успешно работает. Насколько полезен вреден/линукс для изучения крестов и Си? Не впустую ли я трачу время читая мануалы?
Пердачую этого >>95135
Причины аж две - во-первых перейди на язык с ООП, реализованным без киллер-фич вроде дружественных функций и множественного наследования, а во-вторых ты серьезно не осилил всю эту хуйню про ООП? Ну Лафоре штоле прочитай, у него есть книга про ООП. Хотя я когда на втором курсе шараги добрался до нее, мне было очевидно 90% хуйни что там написана, и 80% я умел написать руками сразу и набело.
А чоу, френды и множественное наследования разве только на крестах есть? За наводку на Лафоре спасибо.
Попробуй cline
Visual Studio (2017) Ctrl + K, Ctrl + D
NetBeans.
Наверное любая, потому что этим занимается не ide а посторонние инструменты - astyle, ckang formatter и так далее. К креатору точно подключаются
Представь, идёшь ты по дороге, а впереди развилка с надписями. Направо - Москва, Налево - Москва. Тебе это введёт в заблуждение? Так вот, компилятор тоже охуеет.
"Разработка информационно-поисковой системы «Деканат»
Для хранения информации использовать файл. Функционал программы:
1) добавление информации;
2) удаление информации;
3) редактирование информации;
4) поиск информации по заданным критериям."
При написании использовать классы и другую ООП хуйню.
Какие книжечки/статьи/сайтики покурить?
Ну а хули делать
И ещё как!
Ты же спрашивал книгу по классам и ООП, а не по языку программирования. По языку — это нужен Стенли Липпман, но вот у него-то как раз совсем и не разобрано ООП, не хватило места, наверное. Тысяча страниц...
Тут нужна четырехслойная архитектура бизнес-приложения (уровень бизнеса, сценариев, интерфейсов и инфраструктуры). Описываешь сущности на уровне бизнеса, описываешь сценарии работы пользователя с сущностями на уровне сценариев, интерфейсы вызывают активность в твоем приложении, а в инфраструктуре хоронишь всякий убогий вырвиглазный низкоуровневый пиздец.
CLI - консолька. rest - web-сервис (хотя можно сделать и на websocket если нужен пирформанс и получение событий от сервера без геморроя).
https://habr.com/post/271157/
Это надо долго и внимательно раскуривать, разрабатывая свою архитектуру.
Короче, насколько я понял, поху как это реализовано будет.
Да ему это нахуй не нужно. Пусть создаст простые классы для хранения инфы (надеюсь хоть типы хранимых данных ему известны). Сделает реализацию сериализации/десериализации. В файл будут записываться классы.
Поиск >по заданным критериям< можно сделать элементарно перебором всех классов и сравнением критериев (ну или если хочется пирформанса, то можно сделать индексы).
Остаётся вопрос взаимодействия с пользователем. Как мне кажется это будет самая сложная часть, учитывая, что тот хуй даже не знает что от него требуется.
Если типы данных неизвестны и могут меняться при работе программы, то только могу предложить сделать недо-документоориентированную БД, а данные хранить и получать от пользователя в виде JSON.
Ну, вариант с JSON не такой уж и сложный. Благо библиотек (в том числе header-only) дохуя. Можно сделать няшный CLI, вроде
create 15:{"name": "Хуй Петрович", "age": 43}
remove "@id"=15
remove "age" = 43
update 15:{"dick_size": 12}
delete "@id"=15
get "@id"=15
Для create или update синтаксис будет такой
(create|update) ID:JSON
обе функции возвращают id объекта или ошибку, если используется поле с именем "@id" (в нём программа хранить id и его использовать нельзя) или в случае create если объект с id уже существует.
remove, delete, get имеют схожий синтаксис. Можешь использовать элементарные логические операции + несколько встроенных функций. Например
get contains("name", "иван") && "age" > 34
возвратить все объекты имя которых содержит "иван" и возраст больше 34.
> Надо за неделю написать курсач. Задание -
> "Разработка информационно-поисковой системы «Деканат»
> Для хранения информации использовать файл. Функционал программы:
> 1) добавление информации;
> 2) удаление информации;
> 3) редактирование информации;
> 4) поиск информации по заданным критериям."
Блокнот что ли?
Структуры, сортировка структур, хранение структур в списке, удаление из списка, поиск в списке по критериям, всё это обёрнутое в классы. Эта ебанина на любом С-языке пишется за час под пиво. Не слушай всех этих мудил которые пишут тебе хуйню и записывай подводящие задачи.
Решаешь эти задачи и приступаешь сразу к написанию своего курсачеговнокода, никакие статьи с книгами тебе не понадобятся.
Итак, задачи:
1) Объявить структуру с парой строк и парой чисел, спросить у пользователя число структур, создать массив структур заданной длины, заполнить его вводом с клавиатуры. Далее спросить у пользователя строку и пройтись по заполненному массиву. Если такая строка найдется в поле одной из структур (скажем поле string name), то вывести номер этой структуры и все ее поля.
2) Всё то же самое, только не массив структур, а список. Пользователь нон-стоп вводит поля структур (заполняет структуру-буфер, которую ты каждую итерацию присоединяешь к имеющемуся списку), а когда он вводит что-то вроде "$exit" - ты переходишь к поиску по строке, как в предыдущем задании.
3) Всё то же самое, только кроме вывода на экран найденной структуры ты ее удаляешь. Из списка.
4) Всё то же самое, только поиск по строке, вывод на экран и удаление - функции.
5) Всё то же самое, только деканат и список - классы, а вся хуйня которую они делают - методы, чтобы можно было сделать так:
db.fill();
db.removeByCriteria(db.findByCriteria());
и в этих двух строках в main умещался весь ход работы.
Не благодари.
2)
Пиши.
И да, при этом на отклики по пхп/пайтон-макакингу сыпятся тонны приглашений, а на крестах хуй кто почесался. Хули то так сложно блять сюда вкатится?
А зачем оно тебе надо? Вакансий меньше, чем на вёб-макакинг. Зарплаты такие же или меньше. Если ты к 30 годам не смог в английский и образование, то видимо ты не очень умный и "сложные штуки" не для тебя.
К вам.
> О: Связанные с софтом вопросы обсуждаются в /s/. Исключение - IDE и прочие инструменты программирования, которые можно обсудить в тредах соответствующих языков.
Ладно, спрошу тут. Перекатился на линух, какой ИДЕ лучше будет? Под виндой юзал Dev C++, вот мне бы такое же, простое и с функционалом. Гуглил, да. Но мне интересен живой опыт, а не описания.
Никакой, берешь любой текстовый редактор, прикручиваешь к нему плагин+подсветку на основе элементов установленного компилятора, и работаешь.
А нахуй нужна IDE в плюсах? Всё равно при использовании шаблонов большая часть фич IDE не работает.
в laba1.cpp да, не нужна. В продакшене нужна.
Толсто.
Это копия, сохраненная 25 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.