powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / возможности switch()
25 сообщений из 65, страница 1 из 3
возможности switch()
    #39754115
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
возможности switch()
    #39754117
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Какая в этом особенная надобность?

Спросить Вас на интервью и если не знаете урезать ЗП ;)))
...
Рейтинг: 0 / 0
возможности switch()
    #39754128
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
возможности switch()
    #39754151
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

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

т.е можно
...
Рейтинг: 0 / 0
возможности switch()
    #39754173
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
возможности switch()
    #39754180
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

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

Dima T,

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

В С можно. В С++ наверно тоже.
MSVC17 (C++) не компилирует 21775208
...
Рейтинг: 0 / 0
возможности switch()
    #39754203
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
возможности switch()
    #39754220
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
возможности switch()
    #39754226
a.guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98Допустима ли подобная хрень перед метками?Смотря насколько подобная. Как в последующем коде — не допустима.
...
Рейтинг: 0 / 0
возможности switch()
    #39754228
a.guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyВ С можно. В С++ наверно тоже.В C можно, в C++ не можно.
...
Рейтинг: 0 / 0
возможности switch()
    #39754260
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.guestAnatoly MoskovskyВ С можно. В С++ наверно тоже.В C можно, в C++ не можно.
"C отстал и никогда не получит фишек C++"
это фактически цитата Страуса
...
Рейтинг: 0 / 0
возможности switch()
    #39754298
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Какая в этом особенная надобность?
Только если зачем-то ограничить область видимости для y. Других не вижу.
...
Рейтинг: 0 / 0
возможности switch()
    #39754405
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
возможности switch()
    #39754506
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух"C отстал и никогда не получит фишек C++"
это фактически цитата Страуса
Наличие рудиментов синтаксиса С никак не отменяют сути этой фразы.
А суть в том, что С остался ассемблером как и задумывался, где программист должен все писать руками - т.е. без фишек )).
...
Рейтинг: 0 / 0
возможности switch()
    #39754583
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
возможности switch()
    #39760555
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНе перестаю удивляться сколько извращений позволяет С

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

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

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


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

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

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

Ну а в своём личном гитхабе - занимайся творчеством.
...
Рейтинг: 0 / 0
возможности switch()
    #39760667
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
возможности switch()
    #39760999
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev, бред, да, поскольку от фонаря написано.
Верно то, что перед метками не будет работать подобно конструктору. А именно это меня тогда, в билдере, и заинтересовало: для чего думаю, оставили возможность что-то написать между свитч и кэйсом, дай-ка проверю. Но не вышло.
Зато можно
Код: plaintext
1.
case abcde: go to выше;


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

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

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

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

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


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