Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / возможности switch() / 25 сообщений из 65, страница 1 из 3
27.12.2018, 18:20
    #39754115
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Допустима ли подобная хрень перед метками?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int z;
switch(x) {
   int y=67; z=y*x; .....

    case 1 : cout << x
    case 2 : cout << x
}


Кто-нибудь использовал? Какая в этом особенная надобность?
...
Рейтинг: 0 / 0
27.12.2018, 18:23
    #39754117
semen.s.semen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
exp98Какая в этом особенная надобность?

Спросить Вас на интервью и если не знаете урезать ЗП ;)))
...
Рейтинг: 0 / 0
27.12.2018, 18:36
    #39754128
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
exp98Допустима ли подобная хрень перед метками?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int z;
switch(x) {
   int y=67; z=y*x; .....

    case 1 : cout << x
    case 2 : cout << x
}


Кто-нибудь использовал? Какая в этом особенная надобность?
Это компилируется? В хэлпе про такое не написано.
...
Рейтинг: 0 / 0
27.12.2018, 19:17
    #39754151
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Dima T,

написано - это обычный statement - aka блок кода, только со спец метками case etc

т.е можно
...
Рейтинг: 0 / 0
27.12.2018, 19:55
    #39754173
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
SiemarglDima T,

написано - это обычный statement - aka блок кода, только со спец метками case etc

т.е можно
Не компилируется
Код: plaintext
1.
2.
3.
4.
5.
6.
	int x = 10;
	switch (x) {
		int y = 15;
	case 10:
		std::cout << x;
	}


Код: plaintext
error C2360: initialization of 'y' is skipped by 'case' label

MSVC 2017
...
Рейтинг: 0 / 0
27.12.2018, 20:03
    #39754180
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
exp98,

Ну не в таком прямо виде, но используется иногда.
Например: https://en.wikipedia.org/wiki/Duff's_device
Ну или во всяких автоматах состояний.

Dima T,

В С можно. В С++ наверно тоже.
...
Рейтинг: 0 / 0
27.12.2018, 20:31
    #39754198
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Anatoly MoskovskyDima T,

В С можно. В С++ наверно тоже.
MSVC17 (C++) не компилирует 21775208
...
Рейтинг: 0 / 0
27.12.2018, 20:37
    #39754203
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Anatoly MoskovskyНапример: https://en.wikipedia.org/wiki/Duff's_device

Капец
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    register n = (count + 7) / 8;
    switch (count % 8) {
    case 0: do { *to = *from++;
    case 7:      *to = *from++;
    case 6:      *to = *from++;
    case 5:      *to = *from++;
    case 4:      *to = *from++;
    case 3:      *to = *from++;
    case 2:      *to = *from++;
    case 1:      *to = *from++;
            } while (--n > 0);
    }


Не перестаю удивляться сколько извращений позволяет С
...
Рейтинг: 0 / 0
27.12.2018, 21:36
    #39754220
semen.s.semen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Dima TAnatoly MoskovskyНапример: https://en.wikipedia.org/wiki/Duff's_device

Капец
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    register n = (count + 7) / 8;
    switch (count % 8) {
    case 0: do { *to = *from++;
    case 7:      *to = *from++;
    case 6:      *to = *from++;
    case 5:      *to = *from++;
    case 4:      *to = *from++;
    case 3:      *to = *from++;
    case 2:      *to = *from++;
    case 1:      *to = *from++;
            } while (--n > 0);
    }


Не перестаю удивляться сколько извращений позволяет С

Нормальное ревью такой код не пропустит
...
Рейтинг: 0 / 0
27.12.2018, 22:03
    #39754226
a.guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
exp98Допустима ли подобная хрень перед метками?Смотря насколько подобная. Как в последующем коде — не допустима.
...
Рейтинг: 0 / 0
27.12.2018, 22:08
    #39754228
a.guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Anatoly MoskovskyВ С можно. В С++ наверно тоже.В C можно, в C++ не можно.
...
Рейтинг: 0 / 0
28.12.2018, 00:15
    #39754260
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
a.guestAnatoly MoskovskyВ С можно. В С++ наверно тоже.В C можно, в C++ не можно.
"C отстал и никогда не получит фишек C++"
это фактически цитата Страуса
...
Рейтинг: 0 / 0
28.12.2018, 06:13
    #39754298
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
exp98Какая в этом особенная надобность?
Только если зачем-то ограничить область видимости для y. Других не вижу.
...
Рейтинг: 0 / 0
28.12.2018, 10:53
    #39754405
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Dima TAnatoly MoskovskyНапример: https://en.wikipedia.org/wiki/Duff's_device

Капец
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    register n = (count + 7) / 8;
    switch (count % 8) {
    case 0: do { *to = *from++;
    case 7:      *to = *from++;
    case 6:      *to = *from++;
    case 5:      *to = *from++;
    case 4:      *to = *from++;
    case 3:      *to = *from++;
    case 2:      *to = *from++;
    case 1:      *to = *from++;
            } while (--n > 0);
    }


Не перестаю удивляться сколько извращений позволяет С

Почему-то вспомнился цикл Дейкстры.
...
Рейтинг: 0 / 0
28.12.2018, 13:20
    #39754506
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
полудух"C отстал и никогда не получит фишек C++"
это фактически цитата Страуса
Наличие рудиментов синтаксиса С никак не отменяют сути этой фразы.
А суть в том, что С остался ассемблером как и задумывался, где программист должен все писать руками - т.е. без фишек )).
...
Рейтинг: 0 / 0
28.12.2018, 14:56
    #39754583
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
semen.s.semen, послушать Вас, тут всем надо з\п урезать, кроме Siemargl.
Anatoly Moskovsky, офигительный пример!

Ну скажм, пример я от фонаря привёл.
Siemarglнаписано - это обычный statement - aka блок кода, только со спец метками case etcПоэтому и спросил.
авторMSVC17 (C++) не компилирует И поэтому тоже.
Не так давно захотелось выпендрится при доработке - именно перед метками, но билдер2009 не пропустил. Вренее, скомпилировал, но в работе игнорировал. Тогда похерил, а сейчас вспомнил и спросил для ради развития.

А так компилится и работает в Си11 и в ++11 в mingw6.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int main(int argc, char** argv) {
    int z,x;
    switch(x) {
       int y; y=67; z=y*x; 
        case 1 :  x=3;
        case 2 :  x=4;
    }
    return 0;
}
...
Рейтинг: 0 / 0
16.01.2019, 22:55
    #39760555
Гирлионайльдо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Dima TНе перестаю удивляться сколько извращений позволяет С

Фичи не извращения, они помогают сэкономить время на чашечку кофе
...
Рейтинг: 0 / 0
16.01.2019, 23:39
    #39760570
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Гирлионайльдо...помогают сэкономить время..

????
с точки зрения производства софта - чем больше закос на не стандартное-специфичное-заумное-или_бестолково_исполненное - тем меньше ценности такой код представляет.

Помню в том веке за одним работничком давали мы премию, за приведение кода к кодинг-рулесу. Он любил уже оттестированный готовый код паковать визуально в КВАДРАТ. Наверное так-же исходил из того, что прокручивать отпадает необходимость - "економия"


удачи вам, она Вам потребуется
(круглый)
ЗЫ
производство - не только работает и забыли, если что..
ЗЫ ЗЫ
Хороший тест на проф НЕ пригодность однака. Если человек без запинки на такую загогулину отвечает - работать будет = плохой программист.
...
Рейтинг: 0 / 0
17.01.2019, 01:48
    #39760580
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Это чортов code-smell и если SonarQube или PVS ничего не выругался - то следует немедленно
фиксить правила которые проверяют стиль кода.

Ну а разработчику которые такое пишет надо отрубить пальцы и стерилизовать чтоб не размножался.

P.S. Кстати где этот хвастун который PVS рекламировал...
...
Рейтинг: 0 / 0
17.01.2019, 05:22
    #39760597
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
maytonНу а разработчику которые такое пишет надо отрубить пальцы и стерилизовать чтоб не размножался.я бы не был так категоричен, потому что программист должен расти и жить в творческой среде. Знать и понимать, почему можно сделать так или как-то ещё, и/или почему так делать не надо или нельзя. Придумывать свои варианты решения и находить их сильные и слабые стороны.
А иначе вы получите человека, который мыслит паттернами, знает много умных слов, но быстро садится в лужу при нетривиальной задаче. Вот таких стоит обрубать.
maytonP.S. Кстати где этот хвастун который PVS рекламировал...ну они странные немного
...
Рейтинг: 0 / 0
17.01.2019, 09:01
    #39760615
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Я говорю о разработке в команде. Закодил какашку - получи люлей от коллег.

Ну а в своём личном гитхабе - занимайся творчеством.
...
Рейтинг: 0 / 0
17.01.2019, 10:26
    #39760667
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
exp98Не так давно захотелось выпендрится при доработке - именно перед метками, но билдер2009 не пропустил. Вренее, скомпилировал, но в работе игнорировал. Тогда похерил, а сейчас вспомнил и спросил для ради развития.Не надо выпендриваться! Надо писать просто, понятно и лаконично, чтобы никто при изучении кода не чертыхался, не переделывал за тобой и чтобы ты сам, вернувшись к коду через год, другой сразу понял зачем ты это написал.

exp98А так компилится и работает в Си11 и в ++11 в mingw6.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int main(int argc, char** argv) {
    int z,x;
    switch(x) {
       int y; y=67; z=y*x; 
        case 1 :  x=3;
        case 2 :  x=4;
    }
    return 0;
}

Это вообще бредятина. Независимо от того, что прилетит в "x", результатом "x" будет либо то, что прилетело, либо "4".
...
Рейтинг: 0 / 0
17.01.2019, 15:58
    #39760999
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
rdb_dev, бред, да, поскольку от фонаря написано.
Верно то, что перед метками не будет работать подобно конструктору. А именно это меня тогда, в билдере, и заинтересовало: для чего думаю, оставили возможность что-то написать между свитч и кэйсом, дай-ка проверю. Но не вышло.
Зато можно
Код: plaintext
1.
case abcde: go to выше;


а там выполнить что-нить полезное и на другую метку перейти.

Правда нафига? Зато пример Duff's впечатлил тем, что можно в цикл войти не через начало.
...
Рейтинг: 0 / 0
17.01.2019, 16:12
    #39761019
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
Некоторые господа в декларацию for-цикла включали тело. По приколу.
...
Рейтинг: 0 / 0
17.01.2019, 23:18
    #39761185
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возможности switch()
mayton, и иже выше.

вы не понимаете логики.

это простой стандартный блок {}, последовательно выполняющийся, просто с метками для гоуту, которое в данный момент свитч

не приписывайте чертовщину - ее тут нет
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / возможности switch() / 25 сообщений из 65, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]