Егор @Tujh
C & C++ Developer
Information
- Rating
- 2,154-th
- Location
- Eindhoven, Noord-Brabant, Нидерланды
- Date of birth
- Registered
- Activity
Specialization
Embedded Software Engineer, Scrum Master
Lead
C++
C
Embedded system
Embedded Linux
Cmake
Bash
Docker
CI/CD
Git
Python
А кто ж измучил магнитные поля чёрной дыры?
Нет, я понимаю, что гугло-транслейт и ChatGPT именно так и переводят фразу tortured magnetic fields, но неужели даже элементарной вычитки материала не было? Искривлённые, в данном случае это будет - искривлённые магнитные поля, или деформированные, закрученные в спираль...но уж точно не измученные.
Давайте я немного поясню,
Можно было сразу создать не консольное приложение ("пустой проект" с вашего же скриншота), тогда не пришлось бы переключать /SUBSYSTEM:WINDOWS
Да, в этом случае точкой входа была бы функция WinMain() а не main(), но вы всё равно принудительно выставляете mainCRTStartup, так что ни чего бы не изменилось.
mainCRTStartup нужен был бы для кроссплатформенного приложения, которое должно начинаться именно с main(), но проект для VisualStudio - то есть, изначально не переносимый (был бы переносимый - был бы на CMake, к примеру)
Копировать любые библиотеки пуками в Windows\System32 нельзя, во-первых, в современных Windows это должна быть другая папка Windows\WinSxS или Windows\WOW, не помню точно, а Windows под рукой в данный момент проверить нет. Во-вторых, это потенциально может сломать другое приложение, которое случайно "найдёт" вашу версию openal32.dll вместо нужной этому приложению. Читать что такое dll hell.
Если SFML собирается как static, то где в настройках проекта переключение vc runtime на static, что бы не таскать за собой vcredist?
Из всего этого можно сделать вывод, что у вам нужно хорошенько подучить Visual Studio, тогда статьи будут корректными и без "ошибок новичка" ;)
С такими инструкциями и враги не нужны
обычный ping использует дополнительный трюк для того, что бы работать от непривелигированного пользователя
https://unixetc.co.uk/2016/05/30/linux-capabilities-and-ping/
а вот в общем случае "сырые сокеты", о которых говорится в статье, требуют прав Администратора (Windows) или root (unix-like системы) в любом случае, так как позволяют не только отправлять но и читать напрямую из сетевой карты. Поэтому tcpdump, работающий по этому же принципу, требует sudo или членства в соответствующей группе.
То чувство, когда ожидаешь увидеть практическое применение __attrubute(( __cleanup ... и прочего, а по факту просто пишут - а давайте напишем функцию, что бы удалять поля структуры...
В статье ни чего не сказанно про фаззинг, но зато расписан манглинг, о котором ни слова ни в заголовке, ни в тексте.
Ошибка пошла с этой фразы
А кто сказал, что поиск точно такого же решения на С++ является хорошей идеей? Основная же задача была "сделать Clone без дублирования внутренних данных", а не атомарный или нет подсчёт ссылок.
По сути человек хотел атомарный std::move (если я правильно понял), но ушел в какие-то дебри.
Если вдруг ссылка окажется битой снова - искать по заголовку "Его звали Пауль (заметки переводчика)"
https://earlyhawk.livejournal.com/2859364.html
нет, потому что, как минимум, можно положить переменную в кольцевой буфер, который аллоцирован ещё на этапе запуска программы и попытаться установить соединение позже, а не просто терять коннект до клиента. А отбросить подключение с ошибкой, скажем 408 или 504, можно после нескольких итераций, когда уже точно понятно, что или ресурсов нет и не будет, или запрос уже потерял актуальность.
Простой пример - TCP сокет как результат вызова функции accept(). Повторный вызов вернёт другой сокет (и неизвестно через какое время), а соединение с клиентом будет потеряно.
Люблю таких категоричных :)
И ведь не ёкнуло от противоречая в своих же словах: всегда можно создать повторно, но если нельзя...
Отвечу отдельно.
В С и С++ существует множество исключений, которые программа вообще не сможет поймать средствами языка. Для примера - SEH исключения. Поймать SEH исключение возможно только специальными расширениями от Microsoft, соответственно это будет работать только для компилятора из MSVC и не переносимо не то, что на другую платформу, но даже на, к примеру, clang или MinGW.
Так что, в общем случае - finally блока в С++ нет вообще.
Тогда почитайте, пожалуйста, так как это самый огромный недостаток исключений конкретно в С++. Поймать исключение можно несколькими вызовами выще по стеку, когда обьекты, бросившие исключение уже уничтожены, а значит, восстановление работоспособности программы не гарантируется или невозможно.
Наверное интересно увидеть на дисплее автомобиля, мчащегося под 300 км/ч по немецкому автобану - прошивка ЭБУ выполнила недопустимую операцию и контроллер будет выключен? :)
А разве при написании программ бывает иначе?
В некоторых ситуациях объект исключения тоже выделяет память в момент вызова, поэтому бросить std::bad_alloc не получится - приложение перейдёт в бесконечный цикл аллокации исключения и упадёт с stack overflow.
Почитайте об embedded разработке, в частности - bare-metal, полезно будет, там нет операционной системы, там нет глобального пула памяти, там невозможны исключения в принципе.
Это не крутость или простота - это одна из областей где С и С++ находят большое применение сейчас.
Nope
Специально нашёл какой-то древний сайт на народе (оказывается он ещё жив) про Turbo Pascal, а это древность времён MS-DOS.
http://www.borlpasc.narod.ru/docym/br/8/8_15.htm
И чем это принципиально отличается от провери врезультата malloc() по месту вызова?
Более того, исключение полностью ломает стек вызова, а значит логику восстановления (roll out) очень сложно реализовать - поэтому во многих сферах исключения запрещены к использованию.
Ну и можно же попросить new не бросать исключения, тогда результат нужно будет проверять точно так же как и в случае с malloc() и это, между прочим, стандартная практика в embedded и подобных системах.
Про Бейсик и Фортран не помню, а пот про Pascal слышать забавно:
getmem - Allocate new memory on the heap (аналог malloc)
new - Dynamically allocate memory for variable
Ну вот же, сперва отрицание, а потом правильный ответ :)
А кто-то про обобщённый говорил?
С этим-то как раз все согласны, в цитате сказано, что можно испортить память другим приложениям и самой ОС. Потенциально - да, действительно можно, через уязвимости самой ОС, но это уже целенаправленное действие, а не случайность из-за обращения по невалидному адресу.
Не верно со времён i386 и ОС на нём.
Читать про защищённый режим работы CPU, страничную организацию памяти и защиту памяти.
В частности
и далее по ссылкам.
Какой shared в Си без плюсов?
В С++ практически не используется malloc() подобные функции. Статья явно написана для чисто си, без плюсов.
Дальше уже можно не читать, так как становится ясно, что за автора статью писал AI.
У codingame есть один существенный недостаток как раз в соревновательном режиме, кроме того, что там код расшаривается по желанию. Можно написать сколько угодно интересное решение, но победит олимпиадник, который засунет всё решение в одну нечитаемую строку на питоне.
А вот пазлы у них - одни из лучших для обучения.