|
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60
|
|
О корректном завершении программ на с++01.11.2025, 19:49. Показов 7291. Ответов 77
Метки нет (Все метки)
Доброго времени суток,
Изучая книгу Страуструппа "Язык программирования С++. Специальное издание", обратил внимание на следующее утверждение "При вызове exit() не будут вызваны деструкторы локальных переменных во всех функциях вверх по цепочке имевших место функциональных вызовов. Генерация и перехват исключений гарантируют корректное уничтожение локальных объектов. Вызов же exit() не позволяет корректно отработать всем функциям из цепочки вызовов. Поэтому лучше не ломать контекст вызова функций и просто сгенерировать исключение, а вопрос о том, что делать дальше, оставить обработчикам" Допустим, в моей программе в месте, далеком по цепочке вызовов от main(), возникло событие, означающее что программа штатно закончило свою работу. Означает ли написанное выше что: 1) не стоит использовать библиотечные фукнции std::exit(), std::abort() 2) можно не заморачиваться с "правильным" завершением всех функций из цепочки вызовов, а достаточно сгенерировать исключение throw finish(), например. Разместить обработчик в main() и предусмотреть в нем вызов деструкторов глобальных объектов? Хотелось бы понять и запомнить как правильно поступать при необходимости завершения сложных программ, от которых зависят в т.ч. другие процессы. Понятно, что простые учебные программы можно завершать как угодно.
0
|
|
| 01.11.2025, 19:49 | |
|
Ответы с готовыми решениями:
77
Корректное закрытие программы при завершении работы Windows Корректное завершение работы сокетов Корректное завершение потока |
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 04.11.2025, 22:10 | |||
|
Который вероятно лишь обертка над уже готовыми функциями и их как оказалось уже достаточно. Больше того, обеспечен функционал порционного доступа к данным. К тому же, был бы смысл сравнивать если бы задача сводилась к нахождению одного паттерна. А если 10 раз делать match, то регулярка будет как минимум в 10 раз медленней.
0
|
|||
|
Нарушитель
6694 / 3090 / 1064
Регистрация: 01.06.2021
Сообщений: 11,929
|
|
| 04.11.2025, 22:43 | |
|
0
|
|
| 05.11.2025, 03:30 | |||||||
|
Немного отрихтовал
Кликните здесь для просмотра всего текста
0
|
|||||||
|
фрилансер
6510 / 5769 / 1135
Регистрация: 11.10.2019
Сообщений: 15,410
|
|
| 05.11.2025, 05:56 | |
|
Royal_X, да, я парсер переделывал даже из-за этого.
Дело в не в парсерах, а в том, что регулярка - это общий случай. Пабысраму накидать прототип парсера или сделать что-то, не требующее спешки (единоразовый парс логов) - нормально. А если нужна ловля миллисекунд, то велкам в
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 05.11.2025, 12:45 | ||
|
Оптимизация если производится то позже. А иногда так вообще когда-то-потом или никогда. Возьмем для примера любой набор компиляторов для одного и того же ЯП. Преждевременная оптимизация - один из камней преткновения при разработке.
0
|
||
|
Нарушитель
6694 / 3090 / 1064
Регистрация: 01.06.2021
Сообщений: 11,929
|
||
| 05.11.2025, 12:57 | ||
|
0
|
||
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,372
|
||||||
| 05.11.2025, 13:32 | ||||||
|
Не пользовал я регулярку. Писал на if/else..
Мой гавнокод - быстрый гавнокод... А где сядешь, раньше выйдешь... Добавлено через 4 минуты
Кошка. На ней блохы...
0
|
||||||
|
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60
|
|||||||
| 05.11.2025, 19:41 [ТС] | |||||||
|
Кликните здесь для просмотра всего текста
0
|
|||||||
| 05.11.2025, 22:03 | |||
|
Вот и весь "современный С++"
0
|
|||
|
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60
|
|||||||
| 05.11.2025, 22:46 [ТС] | |||||||
|
Вот что получилось. Имхо симпатично: Кликните здесь для просмотра всего текста
0
|
|||||||
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|||||||||||||
| 05.11.2025, 23:20 | |||||||||||||
|
(другое дело если оно окажется внутри строкового литерала к примеру) Можно простой регуляркой находить позицию при построчном чтении
1
|
|||||||||||||
| 06.11.2025, 01:37 | |||||||||||||
Сообщение было отмечено ADnD как решение
Решение1. eol - не всегда один символ \n, хотя сейчас почти всегда так. В старых файлах eol может быть \r\n (да, 2 символа) или \r. Использование std::eol не решает проблему, в файлах данные старые 2. включать eol в извлекаемую строку (длину) не следует 3. для поиска одного символа лучше использовать strchr (вместо strstr) Главное Вынужден признать что логика разбора не то чтобы "безумно сложная", но гораздо более запутанная чем хотелось бы, все-таки придется вникать ![]() Добавлено через 1 час 58 минут
![]()
Кликните здесь для просмотра всего текста
1
|
|||||||||||||
|
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60
|
|||||||||||||
| 06.11.2025, 11:00 [ТС] | |||||||||||||
|
Кликните здесь для просмотра всего текста
Мне понравилось, как быстро и просто я внес изменения в эту версию программы и она при этом "не сломалась". Для подсчета слов я напишу long long wordsCount(const char* ioSrc, const char* min), где ioSrc - указатель на начало просматриваемого фрагмента, min - указатель на позицию в которой был обнаружен конец строки или комментарий. Добавлю такие вызовы перед if (!min) в обоих функциях.Построчная обработка в текущей версии присутствует неявно. Указатели slc, mlc, elc можно назвать "точками отсечения", которые делят обрабатываемую строку на части. Количество комментариев определяется подсчетом таких частей. Это позволило уйти от повторных просмотров исходной строки и упростило программу. Проблем с учетом конца строки не наблюдал. В прошлой версии был звиздец с завершающими строками текста, которые заканчивались '\0' без предварительного символа '\n'. Из-за чего пришлось ломать голову и писать такой костыль: Кликните здесь для просмотра всего текста
В текущей версии такой проблемы не наблюдал. С Вашей помощью, я улучшил понимание как сделать более четкую структуру, возьму этот способ построения программы себе на вооружение на будущее. Огромное Вам спасибо! От души!!!
0
|
|||||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 06.11.2025, 15:14 | |||
|
И не пишут +100500 велосипедов изо дня в день. Скорость разработки, поддержания кода и т.д. куда важней тех самых блох. Добавлено через 59 секунд
0
|
|||
|
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60
|
||
| 06.11.2025, 20:02 [ТС] | ||
|
В моем фрагменте нужно для того, чтобы изменение указателя отражалось и в вызывающей процедуре.
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 07.11.2025, 01:09 | ||
|
0
|
||
|
Нарушитель
6694 / 3090 / 1064
Регистрация: 01.06.2021
Сообщений: 11,929
|
|
| 07.11.2025, 12:27 | |
|
Учитывая, что const char*& ioSrc вызвал такой интерес и что термины выше могут ввести в заблуждение новичков, которые в будущем зайдут в тему, то объясняю:
это ссылка на указатель на const char (т.е. на неизменяемые данные). Обратите внимание, что сам указатель не является константным, а таковыми являются только данные. Т.е. сам указатель можно менять, но вот символы не могут быть изменены через указатель. Ссылка же для того, чтобы изменения указателя сохранились снаружи. Такое часто применяется во всяких парсерах. Я не всегда объясняю правильными терминами, поэтому, если что, поправьте меня.
1
|
|
| 07.11.2025, 12:27 | |
|
Корректное завершение работы консольного приложения Корректное освобождение памяти при принудительном завершении потока TThread Потоки и их корректное завершение Корректное завершение
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
Сразу отвечу: А в PvP с ним. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|