Здравствуйте, _hum_, Вы писали:
__>Всегда полагал, что семантика switch/case/case/... аналогична if/if/if/... без break-а и if/else if/else if/... c break-ом. А тут решил не ставить break "в конце ветки выбора", и опля — сюрприз. Так что, товарищи, кто еще так же, как и я, заблуждался, будьте внимательны:
__>__>switch(1)
__>{
__> case 1 : cout << '1'; // prints "1",
__> case 2 : cout << '2'; // then prints "2"
__>}
__>
__>__>switch(1)
__>{
__> case 1 : cout << '1'; break; // prints "1" and exits the switch
__> case 2 : cout << '2'; break;
__>}
__>
__>p.s. Вопрос к знатокам — зачем такая неочевидная и "техническая" семантика?
Пользуйся раз тебе не удобно:
#define SCASE_CONTINUE(x) case x:
#define SCASE(x, func) case x: func(); break
#define SCASEARG(x, func) case x: func(x); break
#define SDEFAULT() default: break
// example
void printX() {
std::cout << "in god we trust!" << std::endl; // C++
}
void printArg(int arg) {
std::cout << std::to_string(arg) << std::endl; // C++
}
int main() {
int x = 1;
switch (x) {
SCASE_CONTINUE(1);
SCASE_CONTINUE(2);
SCASE_CONTINUE(3);
SCASE(4, printX);
SCASE(5, printX);
SCASEARG(10, printArg);
SDEFAULT();
}
}
Переписать, что на C++ и на C взлетит =)
P.S. Если честно, то это 3.14здец.