<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Объясните в чём ошибка.]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=37350</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=37350&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Объясните в чём ошибка.».]]></description>
		<lastBuildDate>Mon, 19 Jan 2015 17:41:14 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=441205#p441205</link>
			<description><![CDATA[<div class="quotebox"><cite>Eeb&gt;ei4m пишет:</cite><blockquote><p>Если я выиграю ты меняешь аватар на месяц</p></blockquote></div><p>ага, зелёную кобылу, на фиолетовую кобылу.</p><div class="quotebox"><blockquote><p>Заблокирован</p></blockquote></div><p>OH SHI~~</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 19 Jan 2015 17:41:14 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=441205#p441205</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=441177#p441177</link>
			<description><![CDATA[<p>ведь это беспонтовая трепня?</p><p>Если я выиграю ты меняешь аватар на месяц<br /></p>]]></description>
			<author><![CDATA[null@example.com (Eeb>ei4m)]]></author>
			<pubDate>Mon, 19 Jan 2015 15:35:58 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=441177#p441177</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=441173#p441173</link>
			<description><![CDATA[<div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>Знаете, Ваше замечание по сути сводится к тезису &quot;а если бы он вез патроны?&quot;.</p></blockquote></div><p>тогда бы он отстрелил-бы себе в лучшем случае ногу. Ну на практики бывает что и яйца, а шибко одарённые — голову.<br /></p><div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>Так вот, мои правила хорошего тона не допускают каких-либо конструкций после секции default.</p></blockquote></div><p>если вы пишете код в одиночку, вы _всегда_ можете придерживаться своих правил. Всегда ваш, К.О.</p><div class="quotebox"><cite>Eeb&gt;ei4m пишет:</cite><blockquote><p>Он даже не знает что использование избыточных функций и переменных увеличивает использование оперативной памяти.</p></blockquote></div><p>на сколько спорим?<br /></p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 19 Jan 2015 15:27:37 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=441173#p441173</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=441161#p441161</link>
			<description><![CDATA[<p>Извините что влез в сообщение которое не предназначалось мне. Оптимизация кода во время написания и после. Вы очень правы. И не спорьте пожалуйста с дактором бутти. Он даже не знает что использование избыточных функций и переменных увеличивает использование оперативной памяти.<br />Нам новичкам всё с ним ясно.</p>]]></description>
			<author><![CDATA[null@example.com (Eeb>ei4m)]]></author>
			<pubDate>Mon, 19 Jan 2015 14:55:45 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=441161#p441161</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=441157#p441157</link>
			<description><![CDATA[<div class="quotebox"><cite>drBatty пишет:</cite><blockquote><div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>Объясните мне - в чем именно правильность сишного кода</p></blockquote></div><p>после default можно ещё case воткнуть, но тогда ваш default будет работать неправильно.</p><p>Проблема в том, что обычно<strong> default — редкая ситуация</strong>, потому ошибку вы заметите не сразу, а вас потом в вашу ошибку ткнут мордой лица.</p></blockquote></div><p>Знаете, Ваше замечание по сути сводится к тезису &quot;а если бы он вез патроны?&quot;. Это первое. Второе - Вы даже не удосужились внимательно посмотреть на шаблон кода, который я привел. И начали рассказывать, что в ряде случаев можно работать и без break. Посмотрите на мой шаблон и Вы это сразу увидите. <br />И наконец - я действительно считаю, что писать надо руководствуясь &quot;правилами хорошего тона&quot;, писать так, чтобы любой читатель твоего кода понял, что ты хотел сказать. Так вот, <span class="bbu">мои</span> правила хорошего тона не допускают каких-либо конструкций после секции default. То есть - вначале обрабатываем явно заданные условия и в конце - дефолтное поведение. Писать код иначе - для меня однозначно быдлокодирование.</p>]]></description>
			<author><![CDATA[null@example.com (Cruiser78)]]></author>
			<pubDate>Mon, 19 Jan 2015 14:45:31 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=441157#p441157</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=441104#p441104</link>
			<description><![CDATA[<div class="quotebox"><cite>voral пишет:</cite><blockquote><p>Вообще для копиляторов (по крайней мере C/C++) не имеют значения отступы. Их можно пропустить. Да и еще 100500 правил &quot;хорошего тона&quot;. Как я сказал выше необходимости ставить break в default лично я не осязаю. Но, раз есть люди, которые это осознанно считают хорошим тоном. Почему нет? Мне не сложно, от этого меня не коробит. Да и мешать оно не будет...</p></blockquote></div><p>Я согласен с тем что надо писать понятно. Но как было сказано выше не имею опыта с С++ а писал в обычном редакторе без подсказок.<br />Буду стараться. И если уж зашла об этом речь, надо всем брать пример с питона в плане написания удобночитаемого кода.</p><p><strong>drBatty</strong>,<br />Теперь понял, спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Eeb>ei4m)]]></author>
			<pubDate>Mon, 19 Jan 2015 11:26:53 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=441104#p441104</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=441087#p441087</link>
			<description><![CDATA[<div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>Объясните мне - в чем именно правильность сишного кода</p></blockquote></div><p>после default можно ещё case воткнуть, но тогда ваш default будет работать неправильно.</p><p>Проблема в том, что обычно<strong> default — редкая ситуация</strong>, потому ошибку вы заметите не сразу, а вас потом в вашу ошибку ткнут мордой лица.<br /></p><div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>покажите мне Сишный стандарт языка явно предписывающий секцию default завершать словом break.</p></blockquote></div><p>по стандарту вы никакие секции не обязаны завершать break&#039;ом. Вполне корректен сл. код:</p><div class="codebox"><pre><code>// перевод 1го символа в число. Что-то типа atoi, но в 16ирчной СС.
switch(c)
{
default:
  // обработка ошибки
  break;
case &#039;a&#039;: 
case &#039;b&#039;: 
case &#039;c&#039;: 
case &#039;d&#039;: 
case &#039;e&#039;: 
case &#039;f&#039;: 
  c -= &#039;a&#039;-&#039;0&#039;;
case &#039;0&#039;: 
case &#039;1&#039;: 
case &#039;2&#039;: 
case &#039;3&#039;: 
case &#039;4&#039;: 
case &#039;5&#039;: 
case &#039;6&#039;: 
case &#039;7&#039;: 
case &#039;8&#039;: 
case &#039;9&#039;: 
  c -= &#039;0&#039;;
  x *= 16;
  x += c;
}</code></pre></div><div class="quotebox"><cite>voral пишет:</cite><blockquote><p>Как я сказал выше необходимости ставить break в default лично я не осязаю. Но, раз есть люди, которые это осознанно считают хорошим тоном.</p></blockquote></div><p>потому-что код написанный &quot;по правилам&quot; легче изменять.</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 19 Jan 2015 07:15:47 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=441087#p441087</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440470#p440470</link>
			<description><![CDATA[<p>Вообще для копиляторов (по крайней мере C/C++) не имеют значения отступы. Их можно пропустить. Да и еще 100500 правил &quot;хорошего тона&quot;. Как я сказал выше необходимости ставить break в default лично я не осязаю. Но, раз есть люди, которые это осознанно считают хорошим тоном. Почему нет? Мне не сложно, от этого меня не коробит. Да и мешать оно не будет...</p>]]></description>
			<author><![CDATA[null@example.com (voral)]]></author>
			<pubDate>Wed, 14 Jan 2015 10:34:57 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440470#p440470</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440469#p440469</link>
			<description><![CDATA[<div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>Вы извращенец?</p></blockquote></div><p>В сочетании со смыслом процитированной вами фразы этот вопрос звучит как предложение поступать так всегда <img src="https://linuxforum.ru/img/smilies/ag.gif" alt="ag" />. Кстати канву предложения я взял из K&amp;R:<br /></p><div class="quotebox"><blockquote><p>Добрый вам совет: даже в конце последней ветви (после default в нашем примере) помещайте инструкцию<br />break, хотя с точки зрения логики в ней нет никакой необходимости. Но эта маленькая предосторожность<br />спасет вас, когда однажды вам потребуется добавить в конец еще одну ветвь case.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (voral)]]></author>
			<pubDate>Wed, 14 Jan 2015 10:27:48 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440469#p440469</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440462#p440462</link>
			<description><![CDATA[<div class="quotebox"><cite>voral пишет:</cite><blockquote><p>Не, ну если предположить совсем быдлокод, то после default можно вставить еще case..... И тогда break нужен.... Ну если это не &quot;мега-ход&quot; с &quot;обдуманным&quot; отсутствием break....</p></blockquote></div><p>Вы извращенец?</p>]]></description>
			<author><![CDATA[null@example.com (Cruiser78)]]></author>
			<pubDate>Wed, 14 Jan 2015 10:06:08 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440462#p440462</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440461#p440461</link>
			<description><![CDATA[<div class="quotebox"><cite>drBatty пишет:</cite><blockquote><div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>Единственное, что требует ставить там break - так это только хороший тон.</p></blockquote></div><p>этого мало?<br /></p><div class="quotebox"><cite>Cruiser78 пишет:</cite><blockquote><p>А так - это совершенно лишнее в конструкции case слово.</p></blockquote></div><p>да, лишнее. Без него тоже работает. Вот только сишка — это вам не пхп и не сишарп. Тут нужно писать код аккуратно и правильно.</p></blockquote></div><p>Вот туплю я неимоверно. Объясните мне - в чем именно правильность сишного кода:<br /></p><div class="codebox"><pre><code>switch(){
 case 1: ....
          break;
 case 2: .....
         break;
 case 3:
 case 4: ....
         break;
 default: .....
         break; 
}</code></pre></div><p>перед кодом<br /></p><div class="codebox"><pre><code>switch(...){
 case 1: ....
          break;
 case 2: .....
         break;
 case 3:
 case 4: ....
         break;
 default: .....
}</code></pre></div><p>компилятор что, иную последовательность команд генерит? Или по завершению команд в &quot;секции&quot; default начнет исполнять невесть что, а не следующие после этого switch команды? покажите мне Сишный стандарт языка явно предписывающий секцию default завершать словом break.</p><p>И последнее - на любом языке надо писать правильно и аккуратно. И, при этом, понимать что именно пишешь. И как оно будет работать.</p>]]></description>
			<author><![CDATA[null@example.com (Cruiser78)]]></author>
			<pubDate>Wed, 14 Jan 2015 10:03:56 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440461#p440461</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440445#p440445</link>
			<description><![CDATA[<p><strong>voral</strong>, ну надо просто помнить, что switch это замаскированное goto, и быть готовым к НЕОЖИДАННЫМ эффектам.</p><p>ИМХО основная ошибка ТСа в том, что он очень сложную логику запихал в switch. Я-бы сделал так:</p><div class="codebox"><pre><code>switch(c)
{
  case 1:
    do_menu1();
    break;
  case 2:
    do_menu2();
    break;
  …
  default:
    // неверный ввод
    …
    break/return/_exit(1);
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Wed, 14 Jan 2015 06:07:52 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440445#p440445</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440443#p440443</link>
			<description><![CDATA[<div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>иногда это удобно, когда есть некий case &#039;X&#039;, который нужно выполнить не только в случае X, но и в случае default тоже. Причём в случае default надо ещё что-то выполнить.</p></blockquote></div><p>Я об этом тоже подумал... И, даже, случалось применять (правда не с default, а с другим case). Но, в этих случаях всегда не дает покоя &quot;а вдруг, кто-то из команды, или сам с будуна, через пару лет воткнем между ними еще один case. Понятно, что такие моменты надо коментить, но тем не менее. Да и вообще, может таки лучше четко разделять, а нужный код объединять темиже функциями...... Тут может, конечно, без конкретного проекта решать не имеет смысла для &quot;вообще&quot;. но.....</p>]]></description>
			<author><![CDATA[null@example.com (voral)]]></author>
			<pubDate>Wed, 14 Jan 2015 05:16:57 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440443#p440443</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440442#p440442</link>
			<description><![CDATA[<div class="quotebox"><cite>voral пишет:</cite><blockquote><p>Не, ну если предположить совсем быдлокод</p></blockquote></div><p>на самом деле, надо понимать, зачем вообще появилось switch/case.</p><p>Эта конструкция избыточна, и может быть отменена. Т.е. она необязательна, без неё можно обойтись, заменив её хотя-бы if/else.</p><p>Однако, почти в любом процессоре есть косвенный jump, т.е. не просто <br /></p><div class="codebox"><pre><code>jump куда_то</code></pre></div><p>а<br /></p><div class="codebox"><pre><code>jump [таблица+индекс]</code></pre></div><p>т.е. мы подготавливаем таблицу переходов, и потом <strong>одной командой</strong> прыгаем на нужный вариант. Это естественно на порядок быстрее, чем перебирать разные альтернативы.</p><p>Goto умеет прыгать только на фиксированную метку, и что-бы в C сделать такой косвенный переход по таблице, K&amp;R придумали switch/case. Т.к. управляющая переменная является индексом, она может быть <strong>только целой</strong>.</p><p>В C++ тоже есть свой косвенный переход, в виртуальных функциях, причём он дважды косвенный: у каждого объекта в C++ имеется (в общем случае) указатель на Virtual Table, а эта VT представляет собой таблицу переходов виртуальных методов. Т.е. что-бы выполнить виртуальный метод для объекта, нам нужно:</p><p>1. разименовать указатель на VT объекта</p><p>2. перейти по адресу указанному в VT+смещение конкретного метода.</p><p>В C++ предпочтительнее использовать виртуальные методы, нежели switch/case. Но в простых случаях это слишком накладно.</p><p>PS: естественно оптимизирующий компилятор вовсе <strong>не обязательно</strong> будет обрабатывать switch/case описанным образом, он сделает так, как быстрее в данном конкретном случае.</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Wed, 14 Jan 2015 04:54:17 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440442#p440442</guid>
		</item>
		<item>
			<title><![CDATA[Re: Объясните в чём ошибка.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=440440#p440440</link>
			<description><![CDATA[<div class="quotebox"><cite>voral пишет:</cite><blockquote><p> и что после default можно писать еще case</p></blockquote></div><p>default/case это просто метка для goto, которое тут называется switch.</p><div class="quotebox"><cite>voral пишет:</cite><blockquote><p>Но мне бы точно по глазам резанул case после default</p></blockquote></div><p>иногда это удобно, когда есть некий case &#039;X&#039;, который нужно выполнить не только в случае X, но и в случае default тоже. Причём в случае default надо ещё что-то выполнить.</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Wed, 14 Jan 2015 04:25:31 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=440440#p440440</guid>
		</item>
	</channel>
</rss>
