LINUX.ORG.RU

Как правильно оформлять switch?

 , , ,


1

2

А:

switch (i) {
    case 0:
        zero();
        break;
    case 1:
        one();
        break;
}
Б:
switch (i) {
case 0:
    zero ();
    break;
case 1:
    one ();
    break;
}
В:
switch (i) {
    case 0:
    zero();
    break;

    case 1:
    one();
    break;
}
Г:
switch(i)
{
    case 0:
        zero();
        break;
    case 1:
        one();
        break;
}
Или какой-то другой вариант?

★★★★★

switch(i)
  {
    case 0:
      zero();
      break;
    case 1:
      one();
      break;
  }
Alyssa
()

св. Линус благословил «Б»

/thread

Northsoft ★★
()
switch(i)
{
    case 0:
        zero();
        break;
    case 1:
        one();
        break;
}

или

switch(i)
{
    case 0:
    {
        zero();
        break;
    }
    case 1:
    {
        one();
        break;
    }
}

Deleted
()

Или какой-то другой вариант?

Зависит от кодстайла конкретного приложения.

BaBL ★★★★★
()

Зависит от контекста.
Код надо оформлять так, чтобы данный конкретный участок листинга было удобно читать человеку. Использовать единый способ записи какого-то оборота вне зависимости от ситуации это как, скажем, перейти полностью на английский язык - мол, это «правильно».
Интересно сколько раз в час тебя будут такого праивильного посылать коллеги, друзья и просто случайные люди?

Stahl ★★☆
()

Настрой jslint, jshint и форматтер кода в имаксе - увидишь.

anonymous
()

В Java принято использовать вариант Б. В общеем то мне он кажется самым читабельным.

Legioner ★★★★★
()

либо А либо Б, В адовый, Г неэкономный

umren ★★★★★
()

Мне нравится первый вариант, только break на одном уровне со switch.

Eddy_Em ☆☆☆☆☆
()

Использую способ «Б», но фигурная скобка на отдельной строке.

andreyu ★★★★★
()
Ответ на: комментарий от beastie

Я всегда использую таб вместо четырёх пробелов. Но мои друзья почему-то думают иначе. Они считают, что я использую его вместо восьми, трех, или одного пробела. Мы часто спорим с ними из-за этого. Я говорил этим наркоманам, чтоб они пришли и убедились - ровно вместо четырёх. Я даже не могу понять, кому может придти в голову использовать таб вместо восьми пробелов - зачем это делать? Но друзья не стали меня слушать, а пришли, побили, и выломали кнопку таб из клавиатуры. Теперь в миднайт командере я не могу переключаться между панелями, и моя жизнь наполнилась болью (в том числе, случился баттхерт - только никому не говорите, а то друзья засмеют), мраком и унынием. Даже появились мысли перейти на виду! Но мне сказали там тоже без кнопки таб никуда - нельзя переключаться между приложениями. Пока держусь. Прошу, не повторяйте моей ошибки.

anonymous
()

правильно

Нет такого

Debasher ★★★★★
()
Ответ на: комментарий от anonymous

как в твоём coding style написано, так и правильно.

/thread

Воистену /thread

А то потом приходят к тебе гоблины на работу - а они умеют писать только в одном стиле, и хоть кол на голове теши.

Pavval ★★★★★
()

Так как принято в твоей конторе на твоём проекте.

Fist
()

Вариант 2

Где вариант свитч НИНУЖЕН?

Deleted
()
Ответ на: комментарий от mix_mix

Да всё у меня в порядке с редактором, а вот блондинок, делающих форматирование пробелами, я не понимаю.

beastie ★★★★★
()
Ответ на: комментарий от beastie

Ну если использовать только символы табуляции и только для отступов, то да, табуляция хороша. Но это утопия. Всегда есть строки, в которых нужен и отступ и выравнивание. Или для отступов в коде используется и табуляция и пробелы. Ящитаю, настроить редактор, чтоб при нажатии таба вставлял четыре пробела решение самое удобное.

anonymous
()

Во:

/**
 * printout shutter state
 */
void print_shutter_state(sendfun s){
	P("shutter ", s);
	switch (Shutter_State){
		case SHUTTER_INITIALIZED:
			P("testing", s);
		break;
		case SHUTTER_READY:
			P("ready", s);
		break;
		case SHUTTER_OPENED:
			P("opened", s);
		break;
		case SHUTTER_CLOSED:
			P("closed", s);
		break;
		case SHUTTER_OPENING:
		case SHUTTER_CLOSING:
			P("charged for ", s);
			if(Shutter_State == SHUTTER_OPENING) P("opening", s);
			else P("closing", s);
		break;
		case SHUTTER_PROC_OPENING:
		case SHUTTER_PROC_CLOSING:
			P("in process", s);
		break;
		default: // not ready or error
			if(shutter_error()){ // ERR==0 -> wire breakage or something else
				P("error", s);
			}else
				P("not initialised or broken", s);
	}
	newline(s);
}
geany пользуюсь. Настроил автодополнения: пишешь switch, жамкаешь TAB — и тебе уже начальная структура готова; пишешь case, жамкаешь TAB — и тебе уже case с отступом и break в конце.

Eddy_Em ☆☆☆☆☆
()

О, тут спрошу!

Поясните, в чём отличие между:

switch(i)
{
    case 0:
        zero();
        break;
    case 1:
        one();
        break;
}

и

switch(i)
{
    case 0: {
        zero();
        break;
    }
    case 1: {
        one();
        break;
    }
}

?

Когда первое нужно юзать, а когда второе? Второе, я так понял обычно используется если внутри блока case объявляется что-то, верно? Говорят, что это плохой тон, как и goto.

EXL ★★★★★
()
Ответ на: комментарий от beastie

(И смысла там с скобках нет.)

Смысл есть - объявление переменной. Без скоупа внутри case переменную не объявить.

andreyu ★★★★★
()

Вообще, если в каждом case одна инструкция, то удобней бывает и так:

switch (i) {
case 0: zero(); break;
case 1: one(); break;
}

Sorcerer ★★★★★
()

как ИДЕ его строит. вариант А или Г - холивар для скобочко-дрочеров. Мне и Б варианта хватает.

bvn13 ★★★★★
()
Ответ на: комментарий от Sorcerer

поддерживаю, ставлю чашку чаю, и люто плюсую! не понимаю людей, которые не распарсивают мелкие однострочные инструкции.

bvn13 ★★★★★
()

я предпочитаю вариант (Б) в своих проектах, а так вообще от coding guidelines проекта зависит. кстати, меня дико бесит что xcode принудительно форматирует в нечто вроде варианта (Г), и нельзя перенастроить.

waker ★★★★★
()
Ответ на: комментарий от beastie

Анонимус одобряэ. Отступы табами. Блондинки не осилившие настроить ширину таба в редакторе нинужны.

anonymous
()
Ответ на: комментарий от waker

такое месиво дебажить трудно, попробуй брякпойнт поставь.

Попробовал. Нормально. Сам попробуй теперь. :)

Sorcerer ★★★★★
()
Ответ на: комментарий от Sorcerer

не нормально (ну разве что у тебя какой-то дебаггер из будущего, который брякпойнты может по горизонтали расставлять)

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 2)
Ответ на: комментарий от mv

На самом деле в «Б» есть свой смысл.

Во первых, т.к. case — это те же метки goto, а их ставят по традиции по левому краю блока, без отступа.

Во вторых так экономится глубина отступа. Опять таки по традиции строки длинее 80-и символов не комильфо.

PS: и не только по традиции. Читать длинные строки просто сложно.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

Или какой-то другой вариант?

Just go fmt it.

dotcoder ★★★★★
()
Ответ на: комментарий от Pavval

а они умеют писать только в одном стиле, и хоть кол на голове теши.

зачем кол, если форматировщик можно настроить?

Deleted
()
Ответ на: комментарий от andreyu

Внимание! Порнография:

#include <stdio.h>
#include <stdlib.h>
#include <sysexits.h>

#define __noop  (void)0

int main(int argc, char** argv)
{
        (void)argc;
        (void)argv;

        int i = 1;

        switch (i)
        {
                case 1: __noop;
                        char* msg = "hello";
                        printf("%s\n", msg);
                        break;
                default: __noop;
                        break;
        }

        exit(EX_OK);
}
post-factum ★★★★★
()

Б. Остальное – нечитабельное говно.

Hertz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.