<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Комментарии: Обработка ошибок и освобождение ресурсов на C</title>
	<atom:link href="http://typedef.ru/2009/09/c-error-handling/feed/" rel="self" type="application/rss+xml" />
	<link>http://typedef.ru/2009/09/c-error-handling/</link>
	<description>Сан Саныч о программировании, технологиях, Computer Science и вообще.</description>
	<lastBuildDate>Sat, 03 Dec 2011 07:20:39 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
	<item>
		<title>Автор: Сан Саныч</title>
		<link>http://typedef.ru/2009/09/c-error-handling/comment-page-1/#comment-3574</link>
		<dc:creator>Сан Саныч</dc:creator>
		<pubDate>Tue, 27 Oct 2009 17:59:44 +0000</pubDate>
		<guid isPermaLink="false">http://typedef.ru/?p=347#comment-3574</guid>
		<description>Да, обычно fallthrough-switch может заменить макаронину из if-ов. Но что если переменная ret служит для индикации ошибки, а не для указания того, сколько ресурсов было получено? Выходит, что в вашем коде по ret можно только понять, &lt;i&gt;где&lt;/i&gt; произошла ошибка, но не &lt;i&gt;какая&lt;/i&gt; это была ошибка.</description>
		<content:encoded><![CDATA[<p>Да, обычно fallthrough-switch может заменить макаронину из if-ов. Но что если переменная ret служит для индикации ошибки, а не для указания того, сколько ресурсов было получено? Выходит, что в вашем коде по ret можно только понять, <i>где</i> произошла ошибка, но не <i>какая</i> это была ошибка.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Dron</title>
		<link>http://typedef.ru/2009/09/c-error-handling/comment-page-1/#comment-3569</link>
		<dc:creator>Dron</dc:creator>
		<pubDate>Mon, 26 Oct 2009 19:55:34 +0000</pubDate>
		<guid isPermaLink="false">http://typedef.ru/?p=347#comment-3569</guid>
		<description>Какой то gotoфобский вариант излишне изощеренный, в C-ях для этой цели преврасно реализован switch, позволяющий почти буквально повторить идею goto подхода

&lt;code&gt;
int function(...) {
    // ...здесь объявления переменных...
 
    do {
        if (get_res1(&amp;res1)) {
            ret = ERROR1;
            break;
        }
        if (get_res2(&amp;res2)) {
            ret = ERROR2;
            break;
        }
        // ...
        if (get_res25(&amp;res25)) {
            ret = ERROR25;
            break;
        }
        // ...какой-то содержательный код...
        // ...ошибка!
        if (error) {
            ret = SOME_ERROR;
            break;
        }
        // ...
    } while(0);
 
    switch (ret){
        deafault:
            release_res25(&amp;res25);
        case ERROR25:
            release_res24(&amp;res24);
            ...
        case ERROR1:
            return ret;
    }
}

&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>Какой то gotoфобский вариант излишне изощеренный, в C-ях для этой цели преврасно реализован switch, позволяющий почти буквально повторить идею goto подхода</p>
<p><code><br />
int function(...) {<br />
    // ...здесь объявления переменных...</p>
<p>    do {<br />
        if (get_res1(&amp;res1)) {<br />
            ret = ERROR1;<br />
            break;<br />
        }<br />
        if (get_res2(&amp;res2)) {<br />
            ret = ERROR2;<br />
            break;<br />
        }<br />
        // ...<br />
        if (get_res25(&amp;res25)) {<br />
            ret = ERROR25;<br />
            break;<br />
        }<br />
        // ...какой-то содержательный код...<br />
        // ...ошибка!<br />
        if (error) {<br />
            ret = SOME_ERROR;<br />
            break;<br />
        }<br />
        // ...<br />
    } while(0);</p>
<p>    switch (ret){<br />
        deafault:<br />
            release_res25(&amp;res25);<br />
        case ERROR25:<br />
            release_res24(&amp;res24);<br />
            ...<br />
        case ERROR1:<br />
            return ret;<br />
    }<br />
}</p>
<p></code></p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Сан Саныч</title>
		<link>http://typedef.ru/2009/09/c-error-handling/comment-page-1/#comment-3151</link>
		<dc:creator>Сан Саныч</dc:creator>
		<pubDate>Mon, 21 Sep 2009 19:53:40 +0000</pubDate>
		<guid isPermaLink="false">http://typedef.ru/?p=347#comment-3151</guid>
		<description>Эмм... SEH на C? И потом, портабельность...</description>
		<content:encoded><![CDATA[<p>Эмм&#8230; SEH на C? И потом, портабельность&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Сан Саныч</title>
		<link>http://typedef.ru/2009/09/c-error-handling/comment-page-1/#comment-3150</link>
		<dc:creator>Сан Саныч</dc:creator>
		<pubDate>Mon, 21 Sep 2009 19:52:12 +0000</pubDate>
		<guid isPermaLink="false">http://typedef.ru/?p=347#comment-3150</guid>
		<description>Конечно, в C++ масса вариантов, включая шибко умные указатели и прочую нечисть. Но, увы, в моем случае компилятора C++ для целевой платформы просто не существует.</description>
		<content:encoded><![CDATA[<p>Конечно, в C++ масса вариантов, включая шибко умные указатели и прочую нечисть. Но, увы, в моем случае компилятора C++ для целевой платформы просто не существует.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Oleg</title>
		<link>http://typedef.ru/2009/09/c-error-handling/comment-page-1/#comment-3148</link>
		<dc:creator>Oleg</dc:creator>
		<pubDate>Mon, 21 Sep 2009 17:15:03 +0000</pubDate>
		<guid isPermaLink="false">http://typedef.ru/?p=347#comment-3148</guid>
		<description>Если использование С - требование, то выбора не так много. Если же C++ использовать, то проще сделать классы, которые в конструкторах захватывают ресурс и в деструкторе освобождают. И тогда нет никаких проблем больше с освобождением - в любой момент вызываешь return и все освобождается само.
А в С все печально, да.</description>
		<content:encoded><![CDATA[<p>Если использование С &#8212; требование, то выбора не так много. Если же C++ использовать, то проще сделать классы, которые в конструкторах захватывают ресурс и в деструкторе освобождают. И тогда нет никаких проблем больше с освобождением &#8212; в любой момент вызываешь return и все освобождается само.<br />
А в С все печально, да.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: FallenGameR</title>
		<link>http://typedef.ru/2009/09/c-error-handling/comment-page-1/#comment-3146</link>
		<dc:creator>FallenGameR</dc:creator>
		<pubDate>Mon, 21 Sep 2009 16:02:23 +0000</pubDate>
		<guid isPermaLink="false">http://typedef.ru/?p=347#comment-3146</guid>
		<description>А как же SEH под винду?</description>
		<content:encoded><![CDATA[<p>А как же SEH под винду?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

