<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914931</guid>
        <pubDate>Sat, 14 Dec 2024 10:06:43 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914931</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914929'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T12:54:27+03:00">14.12.24, 09:54</time></span><div class='quote '>Достаточно было ввести отдельный метод с говорящим названием.</div></div><br>
Остаётся только гадать. Мое предположение такое, что работа именно с указателями в С/C++ является местом более частых багов. Поэтому они решили &quot;о вот вам еще&#33;&quot; :lool:<br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Сообщения были разделены в тему &quot;<a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=454656' target='_blank'>Ошибки IO не ловятся исключениями</a>&quot;</span></span>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914929</guid>
        <pubDate>Sat, 14 Dec 2024 09:54:27 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914929</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914928'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T09:32:20+00:00">14.12.24, 09:32</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914926'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T09:04:25+00:00">14.12.24, 09:04</time></span><div class='quote '>Но да, ниже у них написано, что * без проверки сделали для производительности</div></div><br>
Ну вот про это я сразу подумал, хотя не читал. Это как-то само собой ...</div></div><br>
Да, конечно. Только в данном случае это удар по самой мотивации введения std:: expected (в отличие от примера с вектором). Цитату я привел.<br>
Достаточно было ввести отдельный метод с говорящим названием.<br>
Ну ещё одна вещь, которую будут зубрить в плюсах и спрашивать на собесах :D]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914928</guid>
        <pubDate>Sat, 14 Dec 2024 09:32:20 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914928</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914925'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T03:07:15+00:00">14.12.24, 03:07</time></span><div class='quote '>типобезопасности обработки ошибок нет</div></div><br>
Хотя нет, я тут погорячился - типобезопасность таки есть, безопасности нет :lol:<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914926'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T09:04:25+00:00">14.12.24, 09:04</time></span><div class='quote '>Но да, ниже у них написано, что * без проверки сделали для производительности</div></div><br>
Ну вот про это я сразу подумал, хотя не читал. Это как-то само собой ...]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914926</guid>
        <pubDate>Sat, 14 Dec 2024 09:04:25 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914926</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914925'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T03:07:15+00:00">14.12.24, 03:07</time></span><div class='quote '>Новый способ обработки есть, типобезопасности обработки ошибок нет. И всего-то.</div></div><br>
Одна из главных мотиваций введение expected - сохранить фишку исключений, что ошибку нельзя проигнорировать неявно, но при этом сделать эту необходимость видимой. Это есть у Александреску, это есть даже в предложении std:: expected в стандарте.<br>
И при этом они тут же это фактически нарушают.<br>
<br>
Постепенно, думаю, будет распространенной практикой отказ от разыменования (ну разве что с разрешением его использовать немедленно после проверки в одном блоке) и использование других методов (value, value_or, and_then, or_else, transform и пр.) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-14T09:29:04+00:00">14.12.24, 09:29</time></span></span><br>
Вот цитата из предложения в стандарт (из мотивационной части):<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Error visibility: It takes the best of the exception and error code. It’s visible because the return type is expected&lt;T, E&gt; and <strong class='tag-b'>users cannot ignore the error case if they want to retrieve the contained value</strong>.<br>
</div></div><br>
<br>
А вот нет, могут. Это у Александреску и folly нельзя, а в std можно проигнорировать, просто ставим -&gt; или * и получаем UB.<br>
<br>
Но да, ниже у них написано, что * без проверки сделали для производительности, но что мешало для этого сделать отдельный метод - загадка.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914925</guid>
        <pubDate>Sat, 14 Dec 2024 03:07:15 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914925</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914924'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T00:12:58+00:00">14.12.24, 00:12</time></span><div class='quote '>Для вектора мне понятно, а вот для expected - нет. Мы вводим класс для типобезопасной обработки ошибки</div></div><br>
Неа, ты выдаешь желаемое за действительное. Новый способ обработки есть, типобезопасности обработки ошибок нет. И всего-то.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914924'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T00:12:58+00:00">14.12.24, 00:12</time></span><div class='quote '>Ты мои слова перевираешь зачем-то.</div></div><br>
А вот и нет ;) А кто выше писал о &quot;типобезопасности&quot;? Это по-любому влечет за собой проверки, или на стадии компиляции, или в рантайме, без разницы&#33;<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914924'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-14T00:12:58+00:00">14.12.24, 00:12</time></span><div class='quote '>Завязывай с переходом на личности. Это тематика таки</div></div><br>
Какие мы нежные и чувствительные :lol: Но ок, за &quot;перестраховщика&quot; - прости, я не со зла&#33; :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914924</guid>
        <pubDate>Sat, 14 Dec 2024 00:12:58 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914924</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914898'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T15:46:39+00:00">13.12.24, 15:46</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914737'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-11T14:42:22+00:00">11.12.24, 14:42</time></span><div class='quote '>Я могу понять, зачем так делать для vector. Но для нового класса, еще и предназначенного для ошибок, я бы спрятал беспроверочную версию за отдельным методом (желательно с уродским названием).</div></div><br>
У меня есть предположение ...<br>
<br>
С++ никогда не позиционировался как язык программирования с &quot;исключительной поддержкой безопасности&quot;. Даже вспомнить спичи про его предшественника Си - про него часто говорили мол это &quot;высокоуровневый ассемблер&quot;. Вывод? Простой. С++ предоставляет сперва самые быстрые варианты обработки. И только потом &quot;помогает&quot; в случае х3 чего контролить процесс исполнения. Простой пример. Ты явно задаешь вектор из 16Гб элементов, явно и строго&#33; Зачем тебе в этом случае контролить счётчик индексов, чтобы он не вышел за диапазоны? Для этого и нужны методы без проверок, они сокращают время исполнения. <br>
<br>
Но тебе ни кто не запрещает влепить операторы с контролем. Только в продакшене это кому-нить будет нужно?&#33;</div></div><br>
Для вектора мне понятно, а вот для expected - нет. Мы вводим класс для типобезопасной обработки ошибки и он тут же нам подкидывает undefined behaviour на самой распространенной операции, которые незнающие люди будут использовать по умолчанию. Это в каком-то смысле обесценивает вообще наличие std::expected. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-14T00:17:07+00:00">14.12.24, 00:17</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914905'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T16:16:11+00:00">13.12.24, 16:16</time></span><div class='quote '>Везде во всех либах С++ &quot;стремится&quot; к производительности, и тут внезапно ДиКей запустил &quot;желалку&quot;&#33; Мол, а &quot;давайте все проверять по умолчанию&#33;&quot;. И я тут против. Не для такого как &quot;он&quot; Си писались, &quot;перестраховщик&quot;&#33; :lol:</div></div><br>
Ты мои слова перевираешь зачем-то.<br>
<br>
Во-первых, я согласен с политикой std::vector. Во-вторых, я пояснил, почему считаю это плохим дизайном именно для std:: expected. Лучше бы они вообще тогда не делали operator* и -&gt;<br>
И именно отдельные методы с проверкой и без проверки, с нормальными именами. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-14T00:18:43+00:00">14.12.24, 00:18</time></span></span><br>
Завязывай с переходом на личности. Это тематика таки ;) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-14T00:23:34+00:00">14.12.24, 00:23</time></span></span><br>
В общем, Expected из folly (либа от Facebook), выглядит приятнее. Ну и там чувствуется рука Александреску, который идею expected и продвигал.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914914</guid>
        <pubDate>Fri, 13 Dec 2024 17:25:02 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914914</link>
        <description><![CDATA[Qraizer: Ну, меняющиеся ТЗ ничто не победит. Кроме денег. Новый директор, новые правила — новый ценник]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914913</guid>
        <pubDate>Fri, 13 Dec 2024 17:21:14 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914913</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong>, это не самое плохое&#33; Хуже, когда работаешь в режиме &quot;динамического ТЗ&quot;. У меня был такой опыт. Делал проект в районе 3-х лет, когда (по моим оценкам) он должен был исполнится в 3-4 месяца. Заказчик - &quot;государство&quot;. Какие нахер правила, стандарты и прочее?&#33; Приходит &quot;очередной&quot; директор, и всё начинается по-новой. Так что твой  MISRA по сравнению ... самый красивый кросавчег&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914911</guid>
        <pubDate>Fri, 13 Dec 2024 17:05:06 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914911</link>
        <description><![CDATA[Qraizer: P.S. В MISRA вообще дохрена вредных правил. Вот быстро в голову пришло что-то с локальными переменными, чтобы они мол назывались не так, как глобальные. А то ай-яй-яй случайно можно заюзать не то, что думаешь заюзать. Та ёлки ж&#33; индустрия 40 лет вынашивала правило всё локализовывать по максимуму как раз ради того, чтобы не влиять на глобальный контекст, когда оно не нужно. И тут приходят авторы правил MISRA и говорят вы все эти 40 лет были неправы. Ага, счас. :fool:]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914910</guid>
        <pubDate>Fri, 13 Dec 2024 17:01:29 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914910</link>
        <description><![CDATA[Majestio: Итог? Простой - ни какой язык программирования тебя не спасет от &quot;кодинга по синьке&quot; =) И не нужно ДиКею что-то требовать от Стандарта сверх меры его &quot;компетенции&quot;. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-13T17:02:21+00:00">13.12.24, 17:02</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914909'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T16:54:54+00:00">13.12.24, 16:54</time></span><div class='quote '>Упомянутая выше Ада как раз и нафик никому не сдалась по этой причине. Да, строгая, да, безопасная. Компилер мало что пропустит, а остальное чекается в ран-тайм. Только толку от этого, если в коде программер вместо sin() случайно вкопипастил cos() и не поправил. Без тестирования всё равно не обойтись, и внезапно выясняется, что все ран-тайм чеки, жрущие до 75% ресурсов, уже не нужны, т.к. всё вылизано до идеала. А не отключишь, бо язык вот такой и больше никакой.</div></div><br>
+1  :good:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914909</guid>
        <pubDate>Fri, 13 Dec 2024 16:54:54 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914909</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914905'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T16:16:11+00:00">13.12.24, 16:16</time></span><div class='quote '>Везде во всех либах С++ &quot;стремится&quot; к производительности, и тут внезапно ДиКей запустил &quot;желалку&quot;&#33; Мол, а &quot;давайте все проверять по умолчанию&#33;&quot;. И я тут против. Не для такого как ты Си писались, &quot;перестраховщик&quot;&#33; </div></div>Именно. Я вообще не понимаю назначение этих вот MISRA. Либо ты пишешь фигофину, надёжность которой по большому счёту ничего не решает. Тогда можешь для пущего эффекта натравить на неё MISRA и всякие там стат.анализаторы. Только зачем? Либо ты пишешь серьёзный продукт, и тогда будь добр обеспечить его надёжность. ИМХО проще взять Плюсы и задействовать их потенциал безотказного кодинга на полную. Кодревью будет достаточно, чтобы не прошляпить самые очевидные промахи, а с остальным разберётся функциональное тестирование. Для Cей или консервативных Плюсов придётся тестировать куда глубже, без модульных обойтись не получится, а обычный вчерашний выпускник онлайн курсов тестирования просто охренеет, поймёт, что его ничему не научили толком, и пойдёт запивать потраченные к₽ водкой. И опять же причём тут MISRA, непонятно.<br>
Если ты обеспечиваешь качество, то какая разница, как оно написано. По факту MISRA требует отказаться от всего, ради чего C/C++ выбирают, ну и зачем тогда их выбирать? Пишите на Паскале или Питоне. Только от архитектурных и алгоритмических багов ни язык, ни MISRA вас всё равно не спасут. А если всё функциональные (хотя бы) тесты дают добро, то все проверки можно убрать и не париться. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-13T17:00:02+00:00">13.12.24, 17:00</time></span></span><br>
Упомянутая выше Ада как раз и нафик никому не сдалась по этой причине. Да, строгая, да, безопасная. Компилер мало что пропустит, а остальное чекается в ран-тайм. Только толку от этого, если в коде программер вместо sin() случайно вкопипастил cos() и не поправил. Без тестирования всё равно не обойтись, и внезапно выясняется, что все ран-тайм чеки, жрущие до 75% ресурсов, уже не нужны, т.к. всё вылизано до идеала. А не отключишь, бо язык вот такой и больше никакой.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914905</guid>
        <pubDate>Fri, 13 Dec 2024 16:16:11 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914905</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914901'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T16:06:49+00:00">13.12.24, 16:06</time></span><div class='quote '>А &quot;продакш&quot; разве есть? Вопрос в том, что изменяется, если отключить проверки. Ответ прост: безопасность не увеличивается. Для &quot;продакшна&quot; также важно, чтобы не уменьшилась, а это возможно лишь тогда, когда доказана их избыточность. Тесты на это ...ну, способны.</div></div><br>
Согласен на 114%&#33; Но это не отменяет того, что C++ (равно как и Си) ... сперва ратует за производительность, а уже во вторую очередь - за &quot;безопасность&quot; (которую и нужно шерстить тестами). Это я к чему? Везде во всех либах С++ &quot;стремится&quot; к производительности, и тут внезапно ДиКей запустил &quot;желалку&quot;&#33; Мол, а &quot;давайте все проверять по умолчанию&#33;&quot;. И я тут против. Не для такого как &quot;он&quot; Си писались, &quot;перестраховщик&quot;&#33; :lol: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-13T16:19:10+00:00">13.12.24, 16:19</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914901'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T16:06:49+00:00">13.12.24, 16:06</time></span><div class='quote '>А &quot;продакш&quot; разве есть?</div></div><br>
Конечно&#33; Его другое имя - &quot;релиз&quot;. Т.е. всё то, что не дебаг. Издеваесся? :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914901</guid>
        <pubDate>Fri, 13 Dec 2024 16:06:49 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914901</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914900'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T16:03:47+00:00">13.12.24, 16:03</time></span><div class='quote '>В языках программирования нет понятия &quot;покрытие тестами&quot;. </div></div>А &quot;продакш&quot; разве есть? Вопрос в том, что изменяется, если отключить проверки. Ответ прост: безопасность не увеличивается, но может уменьшиться. Для &quot;продакшна&quot; важно, чтобы не уменьшилась, а это возможно лишь тогда, когда доказана их избыточность. Тесты на это ...ну, способны.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914900</guid>
        <pubDate>Fri, 13 Dec 2024 16:03:47 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914900</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914899'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-13T15:51:50+00:00">13.12.24, 15:51</time></span><div class='quote '>После покрытия тестами – нет. Но покрытие тестами должно быть 100%. Дорого? Да.</div></div><br>
Не совсем понял. В языках программирования нет понятия &quot;покрытие тестами&quot;. Это есть в методах разработки и введения в эксплуатацию, не?]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914899</guid>
        <pubDate>Fri, 13 Dec 2024 15:51:50 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914899</link>
        <description><![CDATA[Qraizer: После покрытия тестами – нет. Но покрытие тестами должно быть 100%. Дорого? Да. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-13T16:02:32+00:00">13.12.24, 16:02</time></span></span><br>
P.S. Дабы предотвратить избыточный флейм. Покрытие тестами не гарантирует отсутствия ошибок, оно гарантирует лишь поведение кода совпадающее с описанным. При этом описание не коррелирует с качеством реализованной архитектуры. Отсутствие ошибок проектирования обеспечивает верификация, которая опирается на тестирование как один из этапов своих процедур. Вот это по-настоящему дорого. И даже она не гарантирует совпадения спроектированного с ожидаемым, это задача валидации.<br>
Есть такая вся из себя супер-пупер безопасная и строгая Ада. Практически не используется. Флай-код обычно – это даже не куда как более развитые в этом отношении Плюсы, а абсолютно небезопасные и весьма лояльные к программерским сумасбродиям C и капелька ассемблера. Несложно догадаться, почему.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914898</guid>
        <pubDate>Fri, 13 Dec 2024 15:46:39 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914898</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914737'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-11T14:42:22+00:00">11.12.24, 14:42</time></span><div class='quote '>Я могу понять, зачем так делать для vector. Но для нового класса, еще и предназначенного для ошибок, я бы спрятал беспроверочную версию за отдельным методом (желательно с уродским названием).</div></div><br>
У меня есть предположение ...<br>
<br>
С++ никогда не позиционировался как язык программирования с &quot;исключительной поддержкой безопасности&quot;. Даже вспомнить спичи про его предшественника Си - про него часто говорили мол это &quot;высокоуровневый ассемблер&quot;. Вывод? Простой. С++ предоставляет сперва самые быстрые варианты обработки. И только потом &quot;помогает&quot; в случае х3 чего контролить процесс исполнения. Простой пример. Ты явно задаешь вектор из 16Гб элементов, явно и строго&#33; Зачем тебе в этом случае контролить счётчик индексов, чтобы он не вышел за диапазоны? Для этого и нужны методы без проверок, они сокращают время исполнения. <br>
<br>
Но тебе ни кто не запрещает влепить операторы с контролем. Только в продакшене это кому-нить будет нужно?&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914737</guid>
        <pubDate>Wed, 11 Dec 2024 14:42:22 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914737</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914731'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-11T13:55:57+00:00">11.12.24, 13:55</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914729'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-11T13:25:37+00:00">11.12.24, 13:25</time></span><div class='quote '>Я не знаю, зачем они так сделали.</div></div>Затем же, зачем operator[] в std::vector&lt;&gt; при живом-то std::vector&lt;&gt;::at(). Сам заюзал, не проверив, сам и отвечаешь.</div></div><br>
Я могу понять, зачем так делат для vector. Но для нового класса, еще и предназначенного для ошибок, я бы спрятал беспроверочную версию за отдельным методом (желательно с уродским названием).]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914731</guid>
        <pubDate>Wed, 11 Dec 2024 13:55:57 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914731</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914729'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-11T13:25:37+00:00">11.12.24, 13:25</time></span><div class='quote '>Я не знаю, зачем они так сделали.</div></div>Затем же, зачем operator[] в std::vector&lt;&gt; при живом-то std::vector&lt;&gt;::at(). Сам заюзал, не проверив, сам и отвечаешь. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-11T14:05:31+00:00">11.12.24, 14:05</time></span></span><br>
К слову, отладочная STL от MS этот * не пропустит. Как и operator[] для векторов. В дебаге всё проверяется само, поэтому тормозит безбожно]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914730</guid>
        <pubDate>Wed, 11 Dec 2024 13:31:22 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914730</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914729'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-11T13:25:37+00:00">11.12.24, 13:25</time></span><div class='quote '>Ну конкретно тут косяк дизайна std::expected (ИМХО).<br>
Если ты будешь использовать result.value(), то все будет как я писал. Ты не сможшь пойти дальше, если там нет значения, ты получишь исключение. Просто не используй * при работе с expected, кроме редких случаев, когда точно проверил, что там лежит. Я не знаю, зачем они так сделали.</div></div><br>
Ну вот и я о чём. Но, спасибо, учту.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914729</guid>
        <pubDate>Wed, 11 Dec 2024 13:25:37 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914729</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914662'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-11T00:11:47+00:00">11.12.24, 00:11</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914651'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:30:22+00:00">10.12.24, 17:30</time></span><div class='quote '>Суть-то в том, что &quot;обычный&quot; код ошибки ты можешь проигнорировать случайно и т.п., а тут придется обработать.</div></div><br>
А кто же меня заставит? :lol: Вот тебе пример, где я взял и не обработал, и ничего мне не пришлось, и получил х3 что</div></div><br>
Ну конкретно тут косяк дизайна std::expected (ИМХО).<br>
Если ты будешь использовать result.value(), то все будет как я писал. Ты не сможшь пойти дальше, если там нет значения, ты получишь исключение. Просто не используй * при работе с expected, кроме редких случаев, когда точно проверил, что там лежит. Я не знаю, зачем они так сделали.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914662</guid>
        <pubDate>Wed, 11 Dec 2024 00:11:47 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914662</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914656'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:58:32+00:00">10.12.24, 17:58</time></span><div class='quote '>Так строчек кода больше не станет. Я не понимаю, о чем ты </div></div><br>
Ну так я выше давал ссылку на статью с Хабра. Там чел расписал как по его мнению правильно использовать std::expected - накидал портянку кода без какой-то предметной &quot;нагрузки&quot;. Я об этом.<br>
<br>
Ну а так да, std::expected, если без извращений хорош. Ho ...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914651'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:30:22+00:00">10.12.24, 17:30</time></span><div class='quote '>Суть-то в том, что &quot;обычный&quot; код ошибки ты можешь проигнорировать случайно и т.п., а тут придется обработать.</div></div><br>
А кто же меня заставит? :lol: Вот тебе пример, где я взял и не обработал, и ничего мне не пришлось, и получил х3 что:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;expected&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">std::expected&#60;double, std::string&#62; safe_divide(double numerator, double denominator) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (denominator == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return std::unexpected(&quot;Division by zero&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return numerator / denominator;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto result1 = safe_divide(10, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Result: &quot; &#60;&#60; *result1 &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Это обработка, которую я убрал</div><div class="code_line">&nbsp;&nbsp; &nbsp;//if (result1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// &nbsp; &nbsp;std::cout &#60;&#60; &quot;Result: &quot; &#60;&#60; *result1 &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// &nbsp; &nbsp;std::cout &#60;&#60; &quot;Error: &quot; &#60;&#60; result1.error() &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Просто std::expected позволяет тягать за собой код ошибки. Более &quot;стандартно&quot;, нежели я как-то выше показывал вариант возврата структуры. Вот и все.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914656</guid>
        <pubDate>Tue, 10 Dec 2024 17:58:32 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914656</link>
        <description><![CDATA[D_KEY: Так строчек кода больше не станет. Я не понимаю, о чем ты :)]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914654</guid>
        <pubDate>Tue, 10 Dec 2024 17:52:23 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914654</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>D_KEY</strong>, хе-хе&#33;<br>
<br>
Я всегда за разумный компромисс. Подчёркиваю - <strong class='tag-b'>разумный</strong>&#33; Кодинг в стиле &quot;на давай на<span class="tag-color tag-color-named" data-value="red" style="color: red">фигач</span>им 100500 строчек кода, которые в 3-5 местах нам помогут избежать ошибок&quot; мне не нравится. В любом случае, когда ты из беты вылезаешь в релиз - ты каждую строчку кода анализируешь? Это закон. И если ты видишь, к примеру, игнор кода возврата ошибки, и ничего не делаешь (если нужно) - это чисто твои проблемы. Кстати это ещё один вопрос - а не кинуть ли исключение? И это в плюс в обработку ошибок/ситуаций исключениями.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914653</guid>
        <pubDate>Tue, 10 Dec 2024 17:41:57 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914653</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914652'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:32:10+00:00">10.12.24, 17:32</time></span><div class='quote '>или <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">if</span></span>-фю код возврата</div></div><br>
или не объявляешь :) А компилятор молчит, к сожалению. Плюс даже если объявил, сможешь случайно обратиться к результату. А это исключено в std::expected или std::optional. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-10T17:42:54+00:00">10.12.24, 17:42</time></span></span><br>
И я тебя не уговариваю, используй что хочешь. Страдать тебе потом самому :D]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914652</guid>
        <pubDate>Tue, 10 Dec 2024 17:32:10 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914652</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914649'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:19:36+00:00">10.12.24, 17:19</time></span><div class='quote '>что ты не забываешь вид ошибки</div></div><br>
Искусственное усложнение, детектед&#33; Есть набор ошибок - этого для обработки хватает. А вот для анализа ... но это уже потом ... собирай их в группы как хочется. В свои эти &quot;виды&quot;. Но зачем эту шляпу внедрять в код? Хватит номеров ошибок, не? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-10T17:35:08+00:00">10.12.24, 17:35</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914651'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:30:22+00:00">10.12.24, 17:30</time></span><div class='quote '>Суть-то в том, что &quot;обычный&quot; код ошибки ты можешь проигнорировать случайно и т.п., а тут придется обработать. Собственно, мотивация Result&lt;T, E&gt; в Rust такая же.</div></div><br>
Т.е. я объявляю секцию <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">catch</span></span> или <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">if</span></span>-фю код возврата и ... сразу &quot;случайно&quot; забываю нахрена я это делаю?&#33;&#33; :wacko: Мама, роди меня обратно.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914651</guid>
        <pubDate>Tue, 10 Dec 2024 17:30:22 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914651</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914650'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:27:06+00:00">10.12.24, 17:27</time></span><div class='quote '>Я вид/тип ошибки могу успешно не забывать и кодом ошибки?</div></div><br>
В optional не сможешь :) <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914650'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:27:06+00:00">10.12.24, 17:27</time></span><div class='quote '>Убеди меня что мне ну вот очень-очень нужно ошибки &quot;типизировать&quot; :lol: Ну убеди меня&#33; :lol:</div></div><br>
Ну можешь использовать std::expected&lt;T, int&gt; и использовать свои int&#39;овые коды на здоровье :) <br>
<br>
Суть-то в том, что &quot;обычный&quot; код ошибки ты можешь проигнорировать случайно и т.п., а тут придется обработать. Собственно, мотивация Result&lt;T, E&gt; в Rust такая же.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914650</guid>
        <pubDate>Tue, 10 Dec 2024 17:27:06 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914650</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914649'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T17:19:36+00:00">10.12.24, 17:19</time></span><div class='quote '>Существенная разница с optional тут в том, что ты не забываешь вид ошибки. </div></div><br>
Я вид/тип ошибки могу успешно не забывать и кодом ошибки? И это считаю (пока) самым простым и изящным решением. Убеди меня что мне ну вот очень-очень нужно ошибки &quot;типизировать&quot; :lol: Ну убеди меня&#33; :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914649</guid>
        <pubDate>Tue, 10 Dec 2024 17:19:36 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914649</link>
        <description><![CDATA[D_KEY: <strong class='tag-b'>Majestio</strong>, ну первый же пример из статьи понятен?<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">enum class MathError : unsigned char</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;ZeroDivision,</div><div class="code_line">&nbsp;&nbsp; &nbsp;NegativeNotAllowed</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">std::expected&#60;int, MathError&#62; Bar(int a, int b)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;if (b == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;return std::unexpected(MathError::ZeroDivision);</div><div class="code_line">&nbsp;&nbsp;if (a &#60; 0 || b &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;return std::unexpected(MathError::NegativeNotAllowed);</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;return a / b;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Существенная разница с optional тут в том, что ты не забываешь вид ошибки. Это близко к Rust&#39;овскому Result&lt;T, E&gt;.<br>
<br>
А дальше он в статье о чем-то другом уже начал :)]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914631</guid>
        <pubDate>Tue, 10 Dec 2024 14:35:44 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914631</link>
        <description><![CDATA[Majestio: А тебе не кажется, что это <span class="tag-color tag-color-named" data-value="red" style="color: red"><strong class='tag-b'>немотивированное</strong></span> усложнение гораздо простого вопроса? Ну если честно, Только если честно? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-10T14:38:23+00:00">10.12.24, 14:38</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914627'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-10T14:01:58+00:00">10.12.24, 14:01</time></span><div class='quote '>Решение наиуниверсальнейшее, так что почему бы и нет.</div></div><br>
Стоп&#33; Ты тоже считаешь - что ошибки нужно типизировать? И что это реально даст профит?&#33;&#33;&#33;  :blink:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914627</guid>
        <pubDate>Tue, 10 Dec 2024 14:01:58 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914627</link>
        <description><![CDATA[Qraizer: Ну, человек поставил себе задачу, человек её решил и поделился решением. Решение наиуниверсальнейшее, так что почему бы и нет. Я бы вот не стал настолько заморачиваться, но положа руку на сердце, ведь именно за то мы и любим Плюсы, что можем наваять либу так, что пользоваться ею можно будет так же, как будто это языковое средство.<br>Скажем так: если тебе интересно, как оно устроено, то любая либа внутри выглядит страшно, но если тебе интересно лишь, как оно работает, то юзаешь и не паришься.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914608</guid>
        <pubDate>Tue, 10 Dec 2024 10:56:44 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914608</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914544'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T15:00:38+00:00">09.12.24, 15:00</time></span><div class='quote '>std::expected</div></div><br>
Мой первый блин комом - <a class='tag-url' href='https://habr.com/ru/articles/737408/' target='_blank'>статья на Хабре</a>. Читал сперва вдумчиво. Потом, в какой-то момент, мысль &quot;поплыла&quot;, потому как параллельно возникла вторая - &quot;начали городить огород&quot;. Дальше читал еще чуть бегло. Ну потом как обычно, какие-то лешие вышли из леса, русалки на ветвях уселись... Шютка  :lol: Возникло уточнение второй мысли &quot;начали городить огород <strong class='tag-b'><span class="tag-color tag-color-named" data-value="red" style="color: red">могильной</span></strong> оградкой&quot;. В результате, как говорится, в сухом остатке - я понял, что чел начал типизировать ошибки просто по беспределу&#33; Ну и что с того, что С++ поддерживает шаблонизацию? Это не значит, что нужно плодить сущности-ошибки просто от балды&#33; &gt;:( И законный вопрос - на-хре-на?&#33;<br>
<br>
Любая проектируемая система обладает своим набором уникальных состояний. Соответственно обладает своим набором и типовых ошибок. Да, часть множества ошибок и состояний может пересекаться от <strong class='tag-b'>системе-к-системе</strong>. По типу &quot;файл не найден&quot;, &quot;ошибка записи&quot; &amp; etc. Но это не означает их идентичность&#33; Везде же есть свой контекст. Что чел хотел сделать в статье, а тем более где-то там в глубинах статьи он еще присобачил динамический полиморфизм&#33; :wacko: Карл, динамический полиморфизм, для каста типов ошибок&#33;  :wacko: <br>
<br>
Возможно мой &quot;старт&quot; стартанул некузяво. Но такая кухня мне явно не надо&#33; Мой принцип давно и надолго - Бритва Оккама. А тут ни бритвы не видно, и Оккама давно не сидел.<br>
<br>
... попробую поискать что-то более вменяемое :-?]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914557</guid>
        <pubDate>Mon, 09 Dec 2024 15:42:15 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914557</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914544'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T15:00:38+00:00">09.12.24, 15:00</time></span><div class='quote '>Кажется, что ты опять игнорируешь std::expected  Он таки получше std::optional будет для подобного.</div></div><br>
Ты прав. Я пока не дошёл до чтения фич  std::expected. Но я исправлюсь, скорее всего завтра.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914544'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T15:00:38+00:00">09.12.24, 15:00</time></span><div class='quote '>Этому решению очень много лет. Тогда исключения были достаточно медленными и мне кажется плохо ложились на дизайн qt и его кодогенрацию и объектную модель. Т.е. считай исторические причины.<br>
ИМХО.</div></div><br>
Похоже на то. Если я не ошибаюсь? Qt свой старт начал даже задолго до C++11. Т.е. еще на &quot;ламповой&quot; версии С++.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914544</guid>
        <pubDate>Mon, 09 Dec 2024 15:00:38 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914544</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914492'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T07:30:31+00:00">09.12.24, 07:30</time></span><div class='quote '>Ну тут просто. Создается enum со всеми видами ошибок.</div></div><br>
Кажется, что ты опять игнорируешь std::expected :) Он таки получше std::optional будет для подобного. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-09T15:03:24+00:00">09.12.24, 15:03</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914540'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T14:32:12+00:00">09.12.24, 14:32</time></span><div class='quote '>И пытаемся (одно из) определить почему Qt почти <a class='tag-url' href='https://doc.qt.io/qt-6/exceptionsafety.html' target='_blank'>отказались от обработки исключений</a> в угоду другим способам обработки ошибок.</div></div><br>
Этому решению очень много лет. Тогда исключения были достаточно медленными и мне кажется плохо ложились на дизайн qt и его кодогенрацию и объектную модель. Т.е. считай исторические причины.<br>
ИМХО. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-09T15:05:17+00:00">09.12.24, 15:05</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914539'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T14:24:29+00:00">09.12.24, 14:24</time></span><div class='quote '>Ты ж не забывай о главном правиле дизайна библиотек: если нет никаких причин предпочитать одно решение остальным, его следует отдать на откуп пользователям библиотеки.</div></div><br>
Ну да, можно пойти по пути asio с его функциями (для синхронного API), которые принимают опционально ссылку на код ошибки, а если не передаешь, то будет исключение.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914540</guid>
        <pubDate>Mon, 09 Dec 2024 14:32:12 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914540</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914539'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T14:24:29+00:00">09.12.24, 14:24</time></span><div class='quote '>А оно надо? </div></div><br>
Надо&#33; Мы тут синтетические примеры решаем. И пытаемся (одно из) определить почему Qt почти <a class='tag-url' href='https://doc.qt.io/qt-6/exceptionsafety.html' target='_blank'>отказались от обработки исключений</a> в угоду другим способам обработки ошибок.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914539'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T14:24:29+00:00">09.12.24, 14:24</time></span><div class='quote '>А оно надо?</div></div><br>
И второе, что О-Ч-Е-Н-Ь надо ... таки решить или обозначить тему топика. Где когда и что лучше?&#33;&#33; Дружище, давай &quot;разговаривать и аргументировать&quot; кодом. Пустые слова тут мало-мало ничего не решают по вопросу.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914539'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T14:24:29+00:00">09.12.24, 14:24</time></span><div class='quote '>на откуп пользователям библиотеки</div></div><br>
А нам, пользователям библиотек, не безразлично&#33; Особенно простой интерес - откуда у вас ноги растут, и почему оттуда? :-)]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914539</guid>
        <pubDate>Mon, 09 Dec 2024 14:24:29 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914539</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914487'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T05:12:27+00:00">09.12.24, 05:12</time></span><div class='quote '>Какие можно внести правки для усложнения, чтобы показать, что вариант с обработкой исключений стал более красивым (компактным, читаемым, эффективным) по сравнению с вариантом на кодах возврата?<br>
Да и, собственно, просьба - внесите и покажите&#33;</div></div>А оно надо? Ты ж не забывай о главном правиле дизайна библиотек: если нет никаких причин предпочитать одно решение остальным, его следует отдать на откуп пользователям библиотеки.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914492</guid>
        <pubDate>Mon, 09 Dec 2024 07:30:31 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914492</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914488'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T06:27:35+00:00">09.12.24, 06:27</time></span><div class='quote '>3) Как в первом случае найти точное место возникновения ошибки (не к минусам, а к необходимости усложнения обработки: не равноценные примеры)?</div></div><br>
Ну тут просто. Создается enum со всеми видами ошибок. Другое дело, если один и тот же вид ошибок может быть в разных местах. Но и это решается - вместо числового кода возврата возвращается структура, включающая сам код, и макро __FILE__, __LINE__. Что-то типа:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;optional&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">struct ErrorInfo {</div><div class="code_line">&nbsp;&nbsp;int errorCode;</div><div class="code_line">&nbsp;&nbsp;std::string fileName;</div><div class="code_line">&nbsp;&nbsp;int lineNumber;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">std::optional&#60;ErrorInfo&#62; performOperation(bool shouldFail) {</div><div class="code_line">&nbsp;&nbsp;if (shouldFail) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return ErrorInfo{404, __FILE__, __LINE__}; // Код ошибки, имя файла и номер строки</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return std::nullopt; // Успешное выполнение, ошибки нет</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;auto result = performOperation(true); // Изменяем на false для успешного выполнения</div><div class="code_line">&nbsp;&nbsp;if (result) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Error: Code &quot; &#60;&#60; result-&#62;errorCode</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; &quot;, File: &quot; &#60;&#60; result-&#62;fileName</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; &quot;, Line: &quot; &#60;&#60; result-&#62;lineNumber &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;The operation was successful.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Другое дело, что без стека вызовов, тут часто будет недостаточно инфы для однозначного определения причины. Но это уже другая тема.<br>
<br>
В принципе это же касается и варианта с использованием исключений, а-ля:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;optional&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">#include &#60;stdexcept&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">struct ErrorInfo {</div><div class="code_line">&nbsp;&nbsp;int code;</div><div class="code_line">&nbsp;&nbsp;std::string file;</div><div class="code_line">&nbsp;&nbsp;int line;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class CustomException : public std::runtime_error {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;CustomException(const std::string&amp; message, const std::string&amp; file, int line)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;: std::runtime_error(message), errorInfo{1, file, line} {}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const ErrorInfo&amp; getErrorInfo() const {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return errorInfo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;ErrorInfo errorInfo;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">std::optional&#60;ErrorInfo&#62; riskyOperation() {</div><div class="code_line">&nbsp;&nbsp;// Симулируем ошибку и выбрасываем исключение с информацией о месте выброса</div><div class="code_line">&nbsp;&nbsp;throw CustomException(&quot;Something went wrong!&quot;, __FILE__, __LINE__);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp;riskyOperation();</div><div class="code_line">&nbsp;&nbsp;} catch (const CustomException&amp; e) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Обработка ошибки</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::optional&#60;ErrorInfo&#62; error = e.getErrorInfo();</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (error) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Error Code: &quot; &#60;&#60; error-&#62;code;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;, File: &quot; &#60;&#60; error-&#62;file;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;, Line: &quot; &#60;&#60; error-&#62;line;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;, Message: &quot; &#60;&#60; e.what() &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914488</guid>
        <pubDate>Mon, 09 Dec 2024 06:27:35 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914488</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914487'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-09T05:12:27+00:00">09.12.24, 05:12</time></span><div class='quote '>Какие можно внести правки для усложнения, чтобы показать, что вариант с обработкой исключений стал более красивым (компактным, читаемым, эффективным) по сравнению с вариантом на кодах возврата?<br>
Да и, собственно, просьба - внесите и покажите&#33;</div></div><br>
1) Увеличение глубины вложенности классов. Как в виде наследования, так и в виде просто дополнительных объектов классов. (Это к удобству использования второго варианта)<br>
2) Варианты исправления ошибки и перезапуска операции (допустим ошибка сигнализирует о timeout/retry). (Это к применимости первого варианта)<br>
3) Как в первом случае найти точное место возникновения ошибки (не к минусам, а к необходимости усложнения обработки: не равноценные примеры)?]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914487</guid>
        <pubDate>Mon, 09 Dec 2024 05:12:27 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914487</link>
        <description><![CDATA[Majestio: Ну а по теме ... запилил две синтетические реализации паттерна &quot;Фасад&quot;:<br>
<br>
<strong class='tag-b'>на кодах возврата</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">class SubsystemA {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;int operationA() noexcept {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Имитация успешной операции</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return 0; // 0 - успех</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class SubsystemB noexcept {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;int operationB() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Имитация ошибки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return -1; // -1 - ошибка</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Facade {</div><div class="code_line">&nbsp;&nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;SubsystemA subsystemA;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SubsystemB subsystemB;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;int performOperations() noexcept {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (subsystemA.operationA() != 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1; // Ошибка в A</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (subsystemB.operationB() != 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -2; // Ошибка в B</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return 0; // Успех</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;Facade facade;</div><div class="code_line">&nbsp;&nbsp;int result = facade.performOperations();</div><div class="code_line">&nbsp;&nbsp;if (result == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;The operation was successful.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;An error occurred: &quot; &#60;&#60; result &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<strong class='tag-b'>на обработках исключений</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;stdexcept&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">class SubsystemA {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;void operationA() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Имитация успешной операции</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Ничего не происходит</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class SubsystemB {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;void operationB() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Имитация ошибки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;throw std::runtime_error(&quot;Error in SubsystemB&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Facade {</div><div class="code_line">&nbsp;&nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;SubsystemA subsystemA;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SubsystemB subsystemB;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;void performOperations() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;subsystemA.operationA(); // Успех</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;subsystemB.operationB(); // Может выбросить исключение</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;Facade facade;</div><div class="code_line">&nbsp;&nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp;facade.performOperations();</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;The operation was successful.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;} catch (const std::runtime_error&amp; e) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;An error occurred: &quot; &#60;&#60; e.what() &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Благодаря тому, что оба варианта примитивно-простые, особого преимущества второго варианта перед первым я не наблюдаю. По компактности и читаемости оба варианта примерно равны.<br>
<br>
<strong class='tag-b'>Вопрос знатокам</strong> ;) <br>
<br>
Какие можно внести правки для усложнения, чтобы показать, что вариант с обработкой исключений стал более красивым (компактным, читаемым, эффективным) по сравнению с вариантом на кодах возврата?<br>
Да и, собственно, просьба - внесите и покажите&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914383</guid>
        <pubDate>Thu, 05 Dec 2024 15:58:23 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914383</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914178'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-03T08:20:35+00:00">03.12.24, 08:20</time></span><div class='quote '>Ну да, с твоей подачи я попробовал этот ваш вендовый SEH, да работает:</div></div><br>
Можно ещё заменить ExceptionFilter.<br>
Те перехватить/заменить мессэдж бокс типа<br>
&quot;..инструкция по адресу ... обратилась по адресу ... Память не может быть Read&quot;.<br>
Для этого используется &quot;::SetUnhandledExceptionFilter&quot;.<br>
В результате можно получить всю необходимую диагностику.<br>
Однако, в отличии от многочисленных блоков  __try / __except<br>
обнаружение места исключения будет дольше и сложнее.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914372</guid>
        <pubDate>Thu, 05 Dec 2024 12:34:32 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914372</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914230'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-03T18:36:59+00:00">03.12.24, 18:36</time></span><div class='quote '>P.S. Я тем не менее с удовольствием посмотрел бы на транслятор сигналов POSIX в C++EH хотя бы краем глаза.</div></div><br>
Ну можно замутить отдельную тему для общего участия. Но я бы принял участие только при одном условии - использование &quot;<a class='tag-url' href='https://majestio.info/articles/design-patterns-cheat-sheet.html' target='_blank'>Шаблонов проектирования банды четырех</a>&quot; и &quot;<a class='tag-url' href='https://majestio.info/articles/s.o.l.i.d-cpp.html' target='_blank'>Принципов СОЛИДА</a>&quot;. Ибо просто &quot;а давайте навелосипедим кроссплатформенную шляпу-обёртку на С++&quot; меня как-то не вдохновляет. Причину для себя понимаю - прикладной надобности у меня щя нет по этой теме, соответственно как-то автоматически включается &quot;тонкое искусство пофигизма&quot;. А с ним бороться не айс&#33;  :-? <br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><strong class='tag-b'><span class='tag-size' data-value='14' style='font-size:14pt;'>Тонкое искусство пофигизма</span></strong> <br>
<br>
<span class="b-attach" data-size="130426" data-hits="245" data-attach-id="66591" data-attach-post-id="3914372">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3914372&amp;attach_id=66591' title='Скачать файл' target='_blank'>1753f9375580d294a248c749ac1fbae1.jpg</a> (, : 245)
		</span></div></div>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914219</guid>
        <pubDate>Tue, 03 Dec 2024 14:07:33 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914219</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914210'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-03T12:44:06+00:00">03.12.24, 12:44</time></span><div class='quote '>Разве я что-то сделал не так?</div></div><br>
Ты перевел разговор на аппаратные исключения. Я кагбэ поддержал. Но ловить деление на нуль можно и обычной предварительной проверкой ... с последующей обработкой ... исключений или кодов возврата.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914210'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-03T12:44:06+00:00">03.12.24, 12:44</time></span><div class='quote '>я вообще потерялся в твоих желаниях, ибо оно вообще никоим боком не относится к теме с матрицами.</div></div><br>
А вот и нет  ;)  Мне чуйка подсказывает, что бóльшую красоту обработка ошибок в виде выброса и последующей обработки исключений - покажет при использовании ООП, а не при обычном структурном программировании. В плане примера ООП, в виде темы матриц мне показался самым примитивным и понятным даже школьнику. Вот такой мой довод.  Сорян если я был слишком неточен в выражении своих вопросов :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914210</guid>
        <pubDate>Tue, 03 Dec 2024 12:44:06 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914210</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914178'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-03T08:20:35+00:00">03.12.24, 08:20</time></span><div class='quote '><strong class='tag-b'>Qraizer</strong>, не, всё-таки ты какими-то неведомыми путями мой вопрос &quot;прибил&quot; к аппаратным исключениям.<br>
...<br>
Но на самом деле меня интерсовал только вот такой вопрос: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913829'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-11-27T02:25:52+00:00">27.11.24, 02:25</time></span><div class='quote '>В рамках программирования &quot;здорового человека&quot; нужно немного поправить сигнатуру функции. А именно проверять b на нуль. И принимать одно из решений, учитывая тему топика: 1) Выкидывать свое исключение, оставив сигнатуру функции как есть 2) Либо поступить как поступают в других ЯП типа Rust/Dart - возвращать не int, а Result. Который, для упрощения, есть структура с полями &quot;валидное_значение?&quot; и &quot;значение&quot;. Ну если не структура, пусть будет std::tuple. Не важно, главное принцип - &quot;видишь деление, проверь&quot;. Тоже самое касается и остальных мест, где могут быть проблемсы.</div></div></div></div>Что ты имел в виду, это хорошее пояснение, но я отвечал на это:<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913823'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T17:53:18+00:00">26.11.24, 17:53</time></span><div class='quote '>Давай ты решишь (в рамках сабжа&#33;&#33;&#33;) другую задачу:<br>
<br>
1) Задается произвольная матрица целых чисел размерностью 3x3<br>
2) Одно из чисел (пусть одно) получит значение &quot;нуль&quot;.<br>
3) Нужно получить матрицу-результат = каждое значение исходной матрицы деленное на минимальное значение чисел из матрицы (что явно не есть нуль, но быть может)<br>
<br>
Нужно словить (это просто) когда очередной член матрицы делится на минимальное значение матрицы (равное нулю) - и самое главное, словить в расчетах первое деление на нуль. И вывести стек вызовов.</div></div>Разве я что-то сделал не так? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-03T12:50:21+00:00">03.12.24, 12:50</time></span></span><br>
P.S. Последующее<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913826'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T19:08:42+00:00">26.11.24, 19:08</time></span><div class='quote '>Я правильно прочитал. Ты предлагаешь мне схавать аппаратное исключение? Это оффтоп темы<br>
</div></div>явно показывает моё нежелание продолжать эту тему, но после<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913827'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T19:50:55+00:00">26.11.24, 19:50</time></span><div class='quote '>1) Есть сетевые ошибки, масса<br>
2) Есть ошибки устройств I/O, часто<br>
3) Крайний случай - тупо ошибки RAM, нечасто но видели<br>
<br>
Я тебе предлагаю это схавать&#33; =)</div></div>я вообще потерялся в твоих желаниях, ибо оно вообще никоим боком не относится к теме с матрицами.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914178</guid>
        <pubDate>Tue, 03 Dec 2024 08:20:35 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914178</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914149'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-02T18:20:52+00:00">02.12.24, 18:20</time></span><div class='quote '>А куда от них деться-то? Тема вечная. Я надеялся, что тут она не всплывёт, всё ж о Чистом С++ тут, но коль уж всплыла, а Стандартными методами о ней не поговорить, то либо так, либо раскидать тред по нескольким разделам и темам. Не думаю, что так было бы удобнее, пусть уж в одном месте будет.</div></div><br>
<strong class='tag-b'>Qraizer</strong>, не, всё-таки ты какими-то неведомыми путями мой вопрос &quot;прибил&quot; к аппаратным исключениям. Ну да, с твоей подачи я попробовал этот ваш вендовый SEH, да работает:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;windows.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">void div_function() {</div><div class="code_line">&nbsp;int d = 1;</div><div class="code_line">&nbsp;d--;</div><div class="code_line">&nbsp;int p = 10/d;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;__try {</div><div class="code_line">&nbsp;&nbsp; &nbsp;div_function();</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;__except (EXCEPTION_EXECUTE_HANDLER) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;There&#39;s been an exception!&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD exceptionCode = GetExceptionCode();</div><div class="code_line">&nbsp;&nbsp; &nbsp;switch (exceptionCode) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case STATUS_ACCESS_VIOLATION:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Memory access error!&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case STATUS_INTEGER_DIVIDE_BY_ZERO:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Error: division by zero (integer)!&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case STATUS_FLOAT_DIVIDE_BY_ZERO:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Error: division by zero (float)!&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;default:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Unknown error: &quot; &#60;&#60; exceptionCode &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Но на самом деле меня интерсовал только вот такой вопрос: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913829'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-11-27T02:25:52+00:00">27.11.24, 02:25</time></span><div class='quote '>В рамках программирования &quot;здорового человека&quot; нужно немного поправить сигнатуру функции. А именно проверять b на нуль. И принимать одно из решений, учитывая тему топика: 1) Выкидывать свое исключение, оставив сигнатуру функции как есть 2) Либо поступить как поступают в других ЯП типа Rust/Dart - возвращать не int, а Result. Который, для упрощения, есть структура с полями &quot;валидное_значение?&quot; и &quot;значение&quot;. Ну если не структура, пусть будет std::tuple. Не важно, главное принцип - &quot;видишь деление, проверь&quot;. Тоже самое касается и остальных мест, где могут быть проблемсы.</div></div><br>
После обсуждения у меня появилось три варианта:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;optional&#62;</div><div class="code_line">#include &#60;stdexcept&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">bool safe_divide_1(int numerator, int denominator, double&amp; result) noexcept {</div><div class="code_line">&nbsp;&nbsp;if (denominator == 0) return false;</div><div class="code_line">&nbsp;&nbsp;result = static_cast&#60;double&#62;(numerator) / denominator;</div><div class="code_line">&nbsp;&nbsp;return true;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">std::optional&#60;double&#62; safe_divide_2(int numerator, int denominator) noexcept {</div><div class="code_line">&nbsp;&nbsp;if (denominator == 0) return std::nullopt;</div><div class="code_line">&nbsp;&nbsp;return static_cast&#60;double&#62;(numerator) / denominator;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">double safe_divide_3(int numerator, int denominator) {</div><div class="code_line">&nbsp;&nbsp;if (denominator == 0) throw std::runtime_error(&quot;Division by zero!&quot;);</div><div class="code_line">&nbsp;&nbsp;return static_cast&#60;double&#62;(numerator) / denominator;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// первый вариант</div><div class="code_line">&nbsp;&nbsp;double result1;</div><div class="code_line">&nbsp;&nbsp;if (safe_divide_1(10, 0, result1)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Result 1: &quot; &#60;&#60; result1 &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Error 1: Division by zero!&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// второй вариант</div><div class="code_line">&nbsp;&nbsp;auto result2 = safe_divide_2(10, 0);</div><div class="code_line">&nbsp;&nbsp;if (result2) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Result 2: &quot; &#60;&#60; *result2 &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Error 2: Division by zero!&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;// третий вариант &nbsp;</div><div class="code_line">&nbsp;&nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp;double result3 = safe_divide_3(10, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Result 3: &quot; &#60;&#60; result3 &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;} catch (const std::exception &amp;e) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Error 3: &quot; &#60;&#60; e.what() &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Которые <a class='tag-url' href='https://onlinegdb.com/zTJGRdAXyQ' target='_blank'>функционально выполняют всё тоже самое</a>, я имею ввиду именно в этом коде. И по количеству строк, и примерно по количеству буквов, да и по читаемости - они все примерно равны. Хотелось бы какой-то синтетический пример, где обработка исключений делала бы код более компактным, чем использование кодов возврата, но не в ущерб читаемости.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914149</guid>
        <pubDate>Mon, 02 Dec 2024 18:20:52 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914149</link>
        <description><![CDATA[Qraizer: А куда от них деться-то? Тема вечная. Я надеялся, что тут она не всплывёт, всё ж о Чистом С++ тут, но коль уж всплыла, а Стандартными методами о ней не поговорить, то либо так, либо раскидать тред по нескольким разделам и темам. Не думаю, что так было бы удобнее, пусть уж в одном месте будет.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914091</guid>
        <pubDate>Sun, 01 Dec 2024 21:45:12 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914091</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-01T15:57:24+00:00">01.12.24, 15:57</time></span><div class='quote '><strong class='tag-b'>D_KEY</strong>, ну кто ж виноват, что аппаратные исключения неСтандартизированы</div></div><br>
А я так до конца и не понял, откуда тут взялась тема аппаратых исключений :) <br>
Вроде вопрос об исключениях в C++ и вообще дизайне обработки ошибок.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914090</guid>
        <pubDate>Sun, 01 Dec 2024 20:22:08 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914090</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-01T15:57:24+00:00">01.12.24, 15:57</time></span><div class='quote '>Win32 вышел под x86, Alpha, MIPS, PPC и какой-то VLIW, не помню какой.</div></div><br>
Вот под PPC видел, но это когда было... 64-битных сейчас и нету под другие, кроме x86_64, но я может и не встречал.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-01T15:57:24+00:00">01.12.24, 15:57</time></span><div class='quote '>зато на какое-то время к ним добавился Itanium.</div></div><br>
Это же тот же Intel (хотя и другая архитектура)]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914087</guid>
        <pubDate>Sun, 01 Dec 2024 15:57:24 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914087</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>D_KEY</strong>, ну кто ж виноват, что аппаратные исключения неСтандартизированы. Сам подумывал перенести, но контекст потеряется. Та и куда? Вот <strong class='tag-b'>Majestio</strong> счас кинет не менее корявый пример на сигналах и что, опять переносить? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-12-01T16:03:59+00:00">01.12.24, 16:03</time></span></span><br>
<strong class='tag-b'>macomics</strong>, Win32 вышел под x86, Alpha, MIPS, PPC и какой-то VLIW, не помню какой. Постепенно набор платформ сокращался, т.к. они уходили с рынка, вытесняясь Intel и AMD. Последней ушла вроде бы Alpha, зато на какое-то время к ним добавился Itanium.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914086</guid>
        <pubDate>Sun, 01 Dec 2024 13:46:57 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914086</link>
        <description><![CDATA[D_KEY: Зачем вы вообще говорите про WinAPI, мы вроде в &quot;общих вопросах&quot;, кажется, тут обычно мы говорим про стандарт, а если переходить на ОС и архитектуры, то нужно как-то затрагивать как минимум несколько наиболее востребованных.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914085</guid>
        <pubDate>Sun, 01 Dec 2024 13:01:55 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914085</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914075'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-12-01T00:00:22+00:00">01.12.24, 00:00</time></span><div class='quote '>На MIPS, например, FLOAT OVERFLOW является вполне себе дефолтовым поведением после reset.</div></div><br>
Не видел Windows для MIPS]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914084</guid>
        <pubDate>Sun, 01 Dec 2024 12:42:51 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914084</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914076'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-12-01T03:12:45+00:00">01.12.24, 03:12</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914067'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-11-30T14:02:43+00:00">30.11.24, 14:02</time></span><div class='quote '>В плане дизайна обработки ошибок я бы сейчас рекомендовал использовать std::optional (иногда std::variant) и новенький std::expected.<br>
Ну и именно исключения оставить на тот случай, когда совсем никак без них не обойтись (см. первое сообщение Qraizerа)<br>
</div></div><br>
Пасиба&#33; Вот эта тема как-то пролетела мимо меня. Оставлю пока <a class='tag-url' href='https://habr.com/ru/articles/372103/' target='_blank'>это тут</a> чтобы потом почитать.</div></div><br>
Статья про optional только вроде. Если есть возможность использовать новые стандарты и компиляторы, то советую не забыть и про std::expected :)]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914076</guid>
        <pubDate>Sun, 01 Dec 2024 03:12:45 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914076</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914067'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-11-30T14:02:43+00:00">30.11.24, 14:02</time></span><div class='quote '>В плане дизайна обработки ошибок я бы сейчас рекомендовал использовать std::optional (иногда std::variant) и новенький std::expected.<br>
Ну и именно исключения оставить на тот случай, когда совсем никак без них не обойтись (см. первое сообщение Qraizerа)<br>
</div></div><br>
Пасиба&#33; Вот эта тема как-то пролетела мимо меня. Оставлю пока <a class='tag-url' href='https://habr.com/ru/articles/372103/' target='_blank'>это тут</a> чтобы потом почитать.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914075</guid>
        <pubDate>Sun, 01 Dec 2024 00:00:22 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914075</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914072'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2024-11-30T19:12:45+00:00">30.11.24, 19:12</time></span><div class='quote '>Вот эти 4 это просто флаги в fpu.StatusWord и как реальные Exception они не генерируются. Т.е. они софтверные и выбрасываются после проверки флага в регистре после fpu инструкции.</div></div>Ты не учитываешь, что это WinAPI, а не конкретная процессорная архитектура. На MIPS, например, FLOAT OVERFLOW является вполне себе дефолтовым поведением после reset. К тому же не стоит забывать о всяких там _control87(), _controlfp() и __control87_2()]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914074</guid>
        <pubDate>Sat, 30 Nov 2024 20:18:19 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914074</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-11-30T19:55:15+00:00">30.11.24, 19:55</time></span><div class='quote '>Но где и как делать проверку остального, к примеру STATUS_ILLEGAL_INSTRUCTION. Я даже не знаю - смогу ли я такое сгенерировать специально&#33; Ну может быть какими-то ассемблерными вставками ... и то, не уверен.</div></div><br>
На С++ еще интринсики есть. Можно инструкции генерировать без asm вставок. А вот некоторые либы могут быть откомпилированы с использованием либо sse4+ либо на avx/avx256/avx512/avx10.2 (последнее в ближайшем будущем). И вот тут у проца может начаться несварение этих инструкций. Для sse4+ нужен минимум i5 (на i3 или pentium их нет), а для avx256 уже минимум i7. Но это только по линейке интелов. У амд свои приколы с этим с есть свои специфические инструкции.]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914073</guid>
        <pubDate>Sat, 30 Nov 2024 19:55:15 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914073</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914069'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-30T14:25:30+00:00">30.11.24, 14:25</time></span><div class='quote '>Majestio, если заглянуть в winnt.h, то там их вагон и маленькая тележка, штук 60. Не все они аппаратные, но все низкоуровневые. Типа STATUS_GUARD_PAGE_VIOLATION, STATUS_BREAKPOINT, STATUS_STACK_OVERFLOW итп. Конкретно аппаратных немного:</div></div><br>
 :wacko: <br>
<br>
Ну, положим, проверку деления на нуль можно делать, и нужно ... Но где и как делать проверку остального, к примеру STATUS_ILLEGAL_INSTRUCTION. Я даже не знаю - смогу ли я такое сгенерировать специально&#33; Ну может быть какими-то ассемблерными вставками ... и то, не уверен.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914072</guid>
        <pubDate>Sat, 30 Nov 2024 19:12:45 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914072</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914069'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-30T14:25:30+00:00">30.11.24, 14:25</time></span><div class='quote '>STATUS_FLOAT_DIVIDE_BY_ZERO	Деление значения с плавающей запятой на 0,0.<br>
STATUS_FLOAT_OVERFLOW	Превышение максимальной положительной экспоненты с плавающей запятой.<br>
STATUS_FLOAT_UNDERFLOW	Превышение модуля наименьшей отрицательной экспоненты с плавающей запятой.<br>
STATUS_FLOATING_RESEVERED_OPERAND	Использование зарезервированного формата с плавающей запятой (недопустимое использование формата).</div></div><br>
Вот эти 4 это просто флаги в fpu.StatusWord и как реальные Exception они не генерируются. Т.е. они софтверные и выбрасываются после проверки флага в регистре после fpu инструкции.]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914070</guid>
        <pubDate>Sat, 30 Nov 2024 14:48:19 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914070</link>
        <description><![CDATA[Qraizer: P.S. У x86/64 исключений больше.<br>
<table class='post_table tag-table'><strong class='tag-b'>Table 5-1. Protected-Mode Exceptions and Interrupts</strong><tr><th>Vector No.</th><th>Mne-monic</th><th>Description</th><th>Type</th><th>Error Code</th><th>Source</th></tr><tr><td>0</td><td>#DE</td><td>Divide Error</td><td>Fault</td><td>No</td><td>DIV and IDIV instructions.</td></tr><tr><td>1</td><td>#DB</td><td>RESERVED</td><td>Fault/ Trap</td><td>No</td><td>For Intel use only.</td></tr><tr><td>2</td><td>—</td><td>NMI Interrupt</td><td>Interrupt</td><td>No</td><td>Nonmaskable external interrupt.</td></tr><tr><td>3</td><td>#BP</td><td>Breakpoint</td><td>Trap</td><td>No</td><td>INT 3 instruction.</td></tr><tr><td>4</td><td>#OF</td><td>Overflow</td><td>Trap</td><td>No</td><td>INTO instruction.</td></tr><tr><td>5</td><td>#BR</td><td>BOUND Range Exceeded</td><td>Fault</td><td>No</td><td>BOUND instruction.</td></tr><tr><td>6</td><td>#UD</td><td>Invalid Opcode (Undefined Opcode)</td><td>Fault</td><td>No</td><td>UD2 instruction or reserved opcode.<sup class='tag-sup'>1)</sup></td></tr><tr><td>7</td><td>#NM</td><td>Device Not Available (No Math Coprocessor)</td><td>Fault</td><td>No</td><td>Floating-point or WAIT/FWAIT instruction.</td></tr><tr><td>8</td><td>#DF</td><td>Double Fault</td><td>Abort</td><td>Yes (zero)</td><td>Any instruction that can generate an exception, an NMI, or an INTR.</td></tr><tr><td>9</td><td>Coprocessor Segment Overrun (reserved)</td><td>Fault</td><td>No</td><td>Floating-point instruction.<sup class='tag-sup'>2)</sup></td></tr><tr><td>10</td><td>#TS</td><td>Invalid TSS</td><td>Fault</td><td>Yes</td><td>Task switch or TSS access.</td></tr><tr><td>11</td><td>#NP</td><td>Segment Not Present</td><td>Fault</td><td>Yes</td><td>Loading segment registers or accessing system segments.</td></tr><tr><td>12</td><td>#SS</td><td>Stack-Segment Fault</td><td>Fault</td><td>Yes</td><td>Stack operations and SS register loads.</td></tr><tr><td>13</td><td>#GP</td><td>General Protection</td><td>Fault</td><td>Yes</td><td>Any memory reference and other protection checks.</td></tr><tr><td>14</td><td>#PF</td><td>Page Fault</td><td>Fault</td><td>Yes</td><td>Any memory reference.</td></tr><tr><td>15</td><td>—</td><td>(Intel reserved. Do not use.)</td><td>No</td></tr><tr><td>16</td><td>#MF</td><td>x87 FPU Floating-Point Error (Math Fault)</td><td>Fault</td><td>No</td><td>x87 FPU floating-point or WAIT/FWAIT instruction.</td></tr><tr><td>17</td><td>#AC</td><td>Alignment Check</td><td>Fault</td><td>Yes (Zero)</td><td>Any data reference in memory.<sup class='tag-sup'>3)</sup></td></tr><tr><td>18</td><td>#MC</td><td>Machine Check</td><td>Abort</td><td>No</td><td>Error codes (if any) and source are model dependent.<sup class='tag-sup'>4)</sup></td></tr><tr><td>19</td><td>#XM</td><td>SIMD Floating-Point Exception</td><td>Fault</td><td>No</td><td>SSE/SSE2/SSE3 floating-point instructions<sup class='tag-sup'>5)</sup></td></tr><tr><td>20-31</td><td>—</td><td>Intel reserved. Do not use.</td></tr></table>Как к ним относится WINAPI, беспонятия, не интересовался.<br>
<hr><sup class='tag-sup'>1)</sup> The UD2 instruction was introduced in the Pentium Pro processor.<br>
<sup class='tag-sup'>2)</sup> Processors after the Intel386 processor do not generate this exception.<br>
<sup class='tag-sup'>3)</sup> This exception was introduced in the Intel486 processor.<br>
<sup class='tag-sup'>4)</sup> This exception was introduced in the Pentium processor and enhanced in the P6 family processors.<br>
<sup class='tag-sup'>5)</sup> This exception was introduced in the Pentium III processor.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914069</guid>
        <pubDate>Sat, 30 Nov 2024 14:25:30 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914069</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>Majestio</strong>, если заглянуть в winnt.h, то там их вагон и маленькая тележка, штук 60. Не все они аппаратные, но все низкоуровневые. Типа STATUS_GUARD_PAGE_VIOLATION, STATUS_BREAKPOINT, STATUS_STACK_OVERFLOW итп. Конкретно аппаратных немного:<table class='post_table tag-table'><tr><th>Код исключения</th><th>Причина исключения</th></tr><tr><td>STATUS_ACCESS_VIOLATION</td><td>Чтение или запись в недоступный адрес в памяти.</td></tr><tr><td>STATUS_BREAKPOINT</td><td>Обнаружение аппаратной точки останова; используется только в отладчиках.</td></tr><tr><td>STATUS_DATATYPE_MISALIGNMENT</td><td>Чтение и запись в данные по адресу с неверным выравниванием. Например, 16-разрядные записи должны выравниваться относительно машинных слов с границей 2 байта. (Неприменимо к процессорам Intel 80x86.)</td></tr><tr><td>STATUS_FLOAT_DIVIDE_BY_ZERO</td><td>Деление значения с плавающей запятой на 0,0.</td></tr><tr><td>STATUS_FLOAT_OVERFLOW</td><td>Превышение максимальной положительной экспоненты с плавающей запятой.</td></tr><tr><td>STATUS_FLOAT_UNDERFLOW</td><td>Превышение модуля наименьшей отрицательной экспоненты с плавающей запятой.</td></tr><tr><td>STATUS_FLOATING_RESEVERED_OPERAND</td><td>Использование зарезервированного формата с плавающей запятой (недопустимое использование формата).</td></tr><tr><td>STATUS_ILLEGAL_INSTRUCTION</td><td>Попытка выполнить код инструкции, не определенной процессором.</td></tr><tr><td>STATUS_PRIVILEGED_INSTRUCTION</td><td>Выполнение инструкции, которая не разрешена в текущем режиме машины.</td></tr><tr><td>STATUS_INTEGER_DIVIDE_BY_ZERO</td><td>Деление значения целочисленного типа на 0.</td></tr><tr><td>STATUS_INTEGER_OVERFLOW</td><td>Попытка выполнения операции, которая превышает диапазон целочисленного типа.</td></tr><tr><td>STATUS_SINGLE_STEP</td><td>Выполнение одной инструкции в пошаговом режиме; используется только в отладчиках.</td></tr></table>Но тут встаёт вопрос: а можно ли их считать отдельно от вон того списка из 60 элементов?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914068</guid>
        <pubDate>Sat, 30 Nov 2024 14:08:53 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914068</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3914067'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2024-11-30T14:02:43+00:00">30.11.24, 14:02</time></span><div class='quote '>Без понимания этих принципов будет очень сложно (невозможно?) написать качественный код с использованием исключений.</div></div>Бери выше. Без этих принципов писать надёжный код вообще вряд ли получится, и без разницы, исключения или нет и на каком языке пишешь.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914067</guid>
        <pubDate>Sat, 30 Nov 2024 14:02:43 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914067</link>
        <description><![CDATA[D_KEY: В плане дизайна обработки ошибок я бы сейчас рекомендовал использовать <strong class='tag-b'>std::optional</strong> (иногда std::variant) и новенький <strong class='tag-b'>std::expected</strong>.<br>
Ну и именно исключения оставить на тот случай, когда совсем никак без них не обойтись (см. первое сообщение <strong class='tag-b'>Qraizer</strong>а)<br>
<br>
А самое главное не забывать про т.н. гарантии безопасности исключений, введенные Саттером (или возможно Абрахамсом, но лично я впервые прочел у Саттера).<br>
Ну базовая, строгая и гарантия отсутствия исключений. Это достаточно легко гуглится, не вижу смысла тут писать подробности.<br>
Без понимания этих принципов будет очень сложно (невозможно?) написать качественный код с использованием исключений.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914063</guid>
        <pubDate>Fri, 29 Nov 2024 16:17:00 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914063</link>
        <description><![CDATA[macomics: #AC и #BOUND (последнее давно не используется)]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914039</guid>
        <pubDate>Fri, 29 Nov 2024 11:38:10 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3914039</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913898'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-27T14:29:29+00:00">27.11.24, 14:29</time></span><div class='quote '>Ты всё-таки определись, что ты хочешь.</div></div><br>
А я уже определился&#33; Только одно прошу - давай ты без нервов, давай без них самих&#33; =)<br>
<br>
В процессе обсуждения вопроса мы выявили два &quot;важных&quot; момента:<br>
<br>
1) Обеспечение транзакционной целостности объектов - тут понятно и просто<br>
2) Выброс стека вызовов при ловле исключений - тут (лично для меня пока не просто)<br>
<br>
Я все &quot;почитаю и изучу&quot;. Ток одна просьба. <strong class='tag-b'>Qraizer</strong>, не поднимай ни себе и не остальным нервы. Мы тут все более-менее на равных. Кто-то более компетентен, кто менее. Но в этом суть и соль общения. Очень тебя прошу, ты же профи. Держи себя в рамках, даже если к тебе обращаются специалисты гораздо низшего относительно тебя уровня&#33; <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-29T11:55:30+00:00">29.11.24, 11:55</time></span></span><br>
<strong class='tag-b'>Qraizer</strong>, да, кстати, да ... &quot;Деление на нуль&quot; - наверное одно, и наверное, единственное исключение, которое можно обозвать &quot;аппаратным&quot;. Или не? Какие еще подобные исключения можно словить в &quot;юзер-спейсе&quot;, которые не обрабатывала операционная система, а просто &quot;вбросила&quot;? И это не просто стёб, и не <span class="tag-color tag-color-named" data-value="red" style="color: red">censored</span>. Тут дело разработок. Просто скажи - вот они (список), или скажи &quot;я погорячился&quot;. Прощу меня понять - мне важна суть, а не прав ты или не прав. Вообще на второе забей&#33; Я триста раз могу ошибаться, но я тут чтобы получать достоверную инфу. Без обид&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913898</guid>
        <pubDate>Wed, 27 Nov 2024 14:29:29 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913898</link>
        <description><![CDATA[Qraizer: Ты всё-таки определись, что ты хочешь. О ловле контекста, приводящему к аппаратному отказу, с целью его недопущения я уже писал:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::optional&#60;int&#62; g()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return b == 0 ? decltype(g())() : 123 / b; &nbsp; &nbsp; &nbsp; // деление на нуль</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int f()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return g().value();</div><div class="code_line">}</div></ol></div></div></div></div>g() учитывает возможный сбой, f() не учитывает и бросит std::bad_optional_access. Или:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::variant&#60;int, std::error_code&#62; g()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;using retType = decltype(g());</div><div class="code_line">&nbsp;&nbsp;return b == 0 ? retType(std::make_error_code(std::errc::invalid_argument)) : retType(123 / b); &nbsp; &nbsp; &nbsp; // деление на нуль</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int f()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return std::get&#60;int&#62;(g());</div><div class="code_line">}</div></ol></div></div></div></div>Бросит std::bad_variant_access. Но вопрос остаётся: ты от меня хотел, чтобы я просто повторил ранее сказанное?<br>
Если же мы говорим от аппаратных отказах, то Стандартного способа преобразовать исключения низкого уровня в C++EH не существует и вряд ли когда-нибудь будет существовать. В WINAPI испокон веков существовал SEH (даже в Win16, хоть и в очень зачаточном виде). Это часть API, и это позволяет работать с ними единообразным образом на любых уровнях. Даже в ядре. (Даже C++EH в ядре.) Однако WINAPI поддерживает не только C++, поэтому возлагать на ОС прям вот C++EH шоколадно. Однако несложно реализовать трансляцию SEH в C++EH. Выше корявый, но пример. Что до ваших никсов, то это ваши сложности. У вас есть сигналы, вот с ними и ...думайте. Мне влом, не хватало ещё какой-нить в STM32 под realtime tiny os переносить его десяток исключений с парой десятков их источников.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913829</guid>
        <pubDate>Wed, 27 Nov 2024 02:25:52 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913829</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913828'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T20:40:23+00:00">26.11.24, 20:40</time></span><div class='quote '>Majestio, не рекомендую троллить или подменять термины. </div></div><br>
И в помыслах не было&#33; Просто я немножко на позитиве в следствие принятия соответствующих, скажем так, пищевых добавок :drinks: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913826'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T19:08:42+00:00">26.11.24, 19:08</time></span><div class='quote '>Ты предлагаешь мне схавать аппаратное исключение?</div></div><br>
Желаю уточнить. Мы сейчас говорим о юзер-спэйсе. И все что может быть &quot;выкинуто&quot; аппаратурой - мы не ловим напрямую, а ждем реакции исключительно операционной системы. Работу проги в режиме ядра операционной системы, или тем паче, вообще без операционной системы - мы щяс не рассматриваем. Поэтому да - сетевые ошибки, и ошибки I/O могут уверенно прилетать в юзерспейс, уже тёплые, ламповые, готовые. И там (в юзерспейсе) они могут и должны обрабатываться. Что касается аппаратных ошибок RAM - тут согласен. Эту &quot;беду&quot; на прикладном уровне очень сложно, а чаще и невозможно, победить.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913828'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T20:40:23+00:00">26.11.24, 20:40</time></span><div class='quote '>WINAPI</div></div><br>
А вот тут ты очень обидно сказал&#33;&#33;&#33;  :&#39;( Тем самым проигнорировал линуксоидов, бисидишников и большое количество mac-пролетариев&#33;<br>
<br>
И кстати тут:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913828'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T20:40:23+00:00">26.11.24, 20:40</time></span><div class='quote '>int g()<br>
{<br>
  return 123 / b;       // деление на нуль<br>
}</div></div><br>
В рамках программирования &quot;здорового человека&quot; нужно немного поправить сигнатуру функции. А именно проверять <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">b</span></span> на нуль. И принимать одно из решений, учитывая тему топика: 1) Выкидывать свое исключение, оставив сигнатуру функции как есть 2) Либо поступить как поступают в других ЯП типа Rust/Dart - возвращать не <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">int</span></span>, а <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Result</span></span>. Который, для упрощения, есть структура с полями &quot;валидное_значение?&quot; и &quot;значение&quot;. Ну если не структура, пусть будет std::tuple. Не важно, главное принцип - &quot;видишь деление, проверь&quot;. Тоже самое касается и остальных мест, где могут быть проблемсы.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913828</guid>
        <pubDate>Tue, 26 Nov 2024 20:40:23 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913828</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>Majestio</strong>, не рекомендую троллить или подменять термины. Можешь, конечно, подумать на предмет<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">LONG WINAPI translateException(EXCEPTION_POINTERS *excPtr)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;const unsigned EH_EXCEPTION_NUMBER = (&#39;msc&#39; | 0xE0000000); &nbsp; &nbsp;// &#60;- undocumented</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (excPtr-&#62;ExceptionRecord-&#62;ExceptionCode == EH_EXCEPTION_NUMBER)</div><div class="code_line">&nbsp;&nbsp; &nbsp;return EXCEPTION_CONTINUE_SEARCH;</div><div class="code_line">&nbsp;&nbsp;throw StackTrace(excPtr-&#62;ExceptionRecord-&#62;ExceptionCode); &nbsp; &nbsp; // dangerously</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// нуль</div><div class="code_line">int b = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">int g()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return 123 / b; &nbsp; &nbsp; &nbsp; // деление на нуль</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int f()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return g();</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;HANDLE hExc = AddVectoredExceptionHandler(1, translateException);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (hExc == NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp;return std::cout &#60;&#60; &quot;AddVectoredExceptionHandler() fails: &quot; &#60;&#60; GetLastError() &#60;&#60; std::endl,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Guard excRem([=](){ RemoveVectoredExceptionHandler(hExc); });</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;f();</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;catch(const StackTrace&amp; exc)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::clog &#60;&#60; std::hex &#60;&#60; exc.why() &#60;&#60; &quot;\nStack trace --&#62;:\n&quot; &#60;&#60; exc.getStack();</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 2;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>но это не имеет никакого отношения ни к<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913827'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T19:50:55+00:00">26.11.24, 19:50</time></span><div class='quote '>1) Есть сетевые ошибки, масса<br>
2) Есть ошибки устройств I/O, часто<br>
3) Крайний случай - тупо ошибки RAM, нечасто но видели<br>
</div></div>ни к теме C++EH]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913827</guid>
        <pubDate>Tue, 26 Nov 2024 19:50:55 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913827</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913826'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T19:08:42+00:00">26.11.24, 19:08</time></span><div class='quote '>Я правильно прочитал. Ты предлагаешь мне схавать аппаратное исключение? Это оффтоп темы</div></div><br>
А ты что, в сказку попал?&#33;&#33;<br>
<br>
1) Есть сетевые ошибки, масса<br>
2) Есть ошибки устройств I/O, часто<br>
3) Крайний случай - тупо ошибки RAM, нечасто но видели<br>
<br>
Я тебе предлагаю это схавать&#33; =)]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913826</guid>
        <pubDate>Tue, 26 Nov 2024 19:08:42 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913826</link>
        <description><![CDATA[Qraizer: Я правильно прочитал. Ты предлагаешь мне схавать аппаратное исключение? Это оффтоп темы]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913825</guid>
        <pubDate>Tue, 26 Nov 2024 18:01:40 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913825</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913824'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T17:57:43+00:00">26.11.24, 17:57</time></span><div class='quote '>Чего? </div></div><br>
Я там редактировал,  пока ты там читал&#33; =) Перечитай есчо раз =)]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913824</guid>
        <pubDate>Tue, 26 Nov 2024 17:57:43 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913824</link>
        <description><![CDATA[Qraizer: Чего? :blink: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-26T17:58:27+00:00">26.11.24, 17:58</time></span></span><br>
<a class='tag-url' href='https://en.cppreference.com/w/cpp/header/stacktrace' target='_blank'>&lt;stacktrace&gt;</a>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913823</guid>
        <pubDate>Tue, 26 Nov 2024 17:53:18 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913823</link>
        <description><![CDATA[Majestio: Нет. Твой пример некрасивый и не полный. Сорян&#33;<br>
<br>
Давай ты решишь (в рамках сабжа&#33;&#33;&#33;) другую задачу:<br>
<br>
1) Задается произвольная матрица целых чисел размерностью 3x3<br>
2) Одно из чисел (пусть одно) получит значение &quot;нуль&quot;.<br>
3) Нужно получить матрицу-результат = каждое значение исходной матрицы деленное на минимальное значение чисел из матрицы (что явно не есть нуль, но быть может)<br>
<br>
Нужно словить (это просто) когда очередной член матрицы делится на минимальное значение матрицы (равное нулю) - и самое главное, словить в расчетах первое деление на нуль. И вывести стек вызовов.<br>
<br>
Вот это, <strong class='tag-b'>Qraizer</strong>, будет зе бест фром зе уэст&#33; Остальные твои:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">try</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* ... */</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
Кагбэ намекают - слишком тонко для обычного пипла.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913822</guid>
        <pubDate>Tue, 26 Nov 2024 16:29:10 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913822</link>
        <description><![CDATA[Qraizer: Та чё там накидывать... Прям из certGen возьму.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class StackTrace: public std::runtime_error</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;std::stacktrace stack;</div><div class="code_line">&nbsp;</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp;explicit StackTrace(const std::string&amp; msg): std::runtime_error(msg),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack(std::stacktrace::current()) {}</div><div class="code_line">&nbsp;&nbsp;const std::stacktrace&amp; getStack() const throw() { return stack; }</div><div class="code_line">&nbsp;&nbsp;void report(std::ostream&amp; os) const;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">// Класс общего исключения COM. Хранит HRESULT помимо текста.</div><div class="code_line">class COM_Error: public StackTrace</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;HRESULT code;</div><div class="code_line">&nbsp;</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp;explicit COM_Error(HRESULT err): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; StackTrace(&quot;A COM error is occured&quot;), code(err) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COM_Error(HRESULT err, const std::string&amp; msg): StackTrace(msg), &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;code(err) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;~COM_Error()throw() {}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;HRESULT why() const throw() { return code; }</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">// Класс исключения OLE. Основан на общих исключениях COM.</div><div class="code_line">class OLE_Error: public COM_Error</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp;explicit OLE_Error(HRESULT err): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COM_Error(err, &quot;An OLE error is occured&quot;) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OLE_Error(HRESULT err, const std::string&amp; msg): COM_Error(err, msg) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;~OLE_Error() throw() {}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">/* тут не заморачиваемся параметризацией типами символов, аллокаторами итп, т.к. при размотке стека по исключению</div><div class="code_line">&nbsp;&nbsp; всякие там narrow &#60;=&#62; wide конверсии ...ну их на всякий случай; просто юзаем std::ostream и std::string */</div><div class="code_line">void StackTrace::report(std::ostream&amp; os) const</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;static const std::string StackTraceClass= &quot;StackTrace&quot;;</div><div class="code_line">&nbsp;&nbsp;static const std::string COM_ErrorClass = &quot;COM_Error&quot;;</div><div class="code_line">&nbsp;&nbsp;static const std::string OLE_ErrorClass = &quot;OLE_Error&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for (const auto&amp; entry : stack)</div><div class="code_line">&nbsp;&nbsp; &nbsp;// срежем само создание исключения с верхушки стека</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (entry.description().find(StackTraceClass)== std::string::npos &amp;&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;entry.description().find(COM_ErrorClass) == std::string::npos &amp;&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;entry.description().find(OLE_ErrorClass) == std::string::npos) &nbsp;// &#60;= допишите свои фильтры по желанию</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;os &#60;&#60; entry.source_file() &#60;&#60; &quot;, line &quot; &#60;&#60; entry.source_line() &#60;&#60; &quot;: &quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#60;&#60; entry.description() &#60;&#60; &#39;\n&#39;;</div><div class="code_line">&nbsp;&nbsp;os.flush();</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">/* пример использования; всё как обычно, ничего особенного */</div><div class="code_line">struct PropCreator</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;static IDispatch* create(const Variant&amp; src)</div><div class="code_line">&nbsp;&nbsp;{ // создавать свойства на Variant-ах, которые не IDispatch, мы не умеем.</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (src.vt != VT_DISPATCH) throw OLE_Error(E_NOINTERFACE, &quot;PropCreator(): src is not an IDispatch&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return src.pdispVal;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">/* ... */</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* ... */</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;catch(const COM_Error&amp; exc)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::clog &#60;&#60; exc.what() &#60;&#60; &quot;: &quot; &#60;&#60; exc.why() &#60;&#60; &quot; (&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; std::hex &#60;&#60; std::uppercase &#60;&#60; exc.why() &#60;&#60; &quot;)\nStack trace --&#62;:&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; std::dec &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;exc.report(std::clog);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return EXIT_FAILURE;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;catch(const StackTrace&amp; exc)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::clog &#60;&#60; exc.what() &#60;&#60; &quot;\nStack trace --&#62;:\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;exc.report(std::clog);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return EXIT_FAILURE;</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913807</guid>
        <pubDate>Tue, 26 Nov 2024 14:01:14 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913807</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong>, плис, накидай академический пример. Так, чтобы виден был последовательный вызов/создание и такой же вызов уничтожения, ну и сам трасерт вызовов. Тематика вааще пофик. Главное - сам пример.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913806</guid>
        <pubDate>Tue, 26 Nov 2024 13:40:39 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913806</link>
        <description><![CDATA[Qraizer: Впрочем, при желании легко отсеять не относящиеся к своему коду строчки внизу отчёта:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">IDispatch&#39;s error: IDispatch::GetIDsOfNames(&quot;TablesOfContents&quot;) failed w/err 0x80010001</div><div class="code_line">PropCreator(): src is not an IDispatch: -2147467262 (80004002)</div><div class="code_line">Stack trace --&#62;:</div><div class="code_line">censored\certGenUni\property.h, line 32: certGen!Property::Property+0x9D</div><div class="code_line">censored\certGenUni\cases.cpp, line 1037: certGen!`makeReports&#39;::`2&#39;::&#60;lambda_5&#62;::operator()+0x142</div><div class="code_line">censored\certGenUni\cases.cpp, line 1059: certGen!`makeReports&#39;::`2&#39;::&#60;lambda_6&#62;::operator()+0xA15</div><div class="code_line">censored\certGenUni\cases.cpp, line 1102: certGen!makeReports+0x13DA</div><div class="code_line">censored\certGenUni\main.cpp, line 106: certGen!main+0x59B</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913805</guid>
        <pubDate>Tue, 26 Nov 2024 13:22:30 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913805</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913798'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T11:38:04+00:00">26.11.24, 11:38</time></span><div class='quote '>Подозреваю, если закинуть виндовые символы, то и там можно получить вменяемые буковки и циферки. Только толку с этого, коли сырцов всё равно нет<br>
</div></div><br>
Такую тему, я щетаю, нужно выставлять на конкурс сырцов. С призовым фондом минимум 2000Dgm  8-)]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913798</guid>
        <pubDate>Tue, 26 Nov 2024 11:38:04 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913798</link>
        <description><![CDATA[Qraizer: Подозреваю, если закинуть виндовые символы, то и там можно получить вменяемые буковки и циферки. Только толку с этого, коли сырцов всё равно нет]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913797</guid>
        <pubDate>Tue, 26 Nov 2024 11:20:27 +0000</pubDate>
        <title>&amp;quot;обработка исключений&amp;quot; vs &amp;quot;обработка кодов возврата&amp;quot;</title>
        <link>https://forum.sources.ru/index.php?showtopic=453679&amp;view=findpost&amp;p=3913797</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong>, o5 плюсую  :lol: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453679&view=findpost&p=3913793'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2024-11-26T10:53:30+00:00">26.11.24, 10:53</time></span><div class='quote '>А все равно line 0</div></div><br>
Ну, думаю,  тут всё будет зависеть от твоей/своей политики лицензирования ... Билды а-ля LTS конечно можно избавить от дебаг-шлака. Но всякие там релиз-кандидаты ... а почему бы и нет?&#33;&#33;&#33; Я так понимаю, что политику лицензирования каждый пипл волен сам выбирать для себя, равно как и декларацию &quot;качества&quot; предоставляемого программного продукта.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	