Dzisiaj przypadkowo odkryłem, że mój kompilator nie uskarża się na pisanie kodu wewnątrz instrukcji przełączania bez obudowy. (Narzekało to na brak instrukcji postępowania, ale po dodaniu jednego po kodzie, nie było aż tak ostrzeżenia, aby dać mi znać, że kod był bezużyteczny.)Przełączanie bez obudowy
Próbuję ustalić, czy istnieje cel, aby zezwolić na poniższy kod lub jeśli jest to jedna z tych rzeczy, w których "więcej pracy należy ograniczyć, więc jest to dozwolone".
#include <iostream>
void foo() {
std::cout << "foo" << std::endl;
}
int main()
{
for (int a = -10; a < 10; ++a)
{
switch(a)
{
foo();
case 4:
std::cout << "4" << std::endl;
}
}
}
Teraz wyprowadza "4" zgodnie z oczekiwaniami, gdy a == 4, i nigdy nie wysyła foo. Pytanie brzmi, czy istnieje jakiś (potencjalnie ezoteryczny, ale użyteczny) powód, aby zezwolić na oświadczenie przed pierwszym przypadkiem? Wiem na pewno, że nie wolno mi zadeklarować i zainicjować tam zmiennych.
(FWIW, ja testowałem to na kilku kompilatorów, a oni wszyscy uzyskując takie samo zachowanie. Co ciekawe, oni też nie wszystko zrobić wyjście ostrzeżenie.)
Jaki to kompilator? – turnt
Testowałem to zarówno na MSVC 2012 i GCC 4.8.1. – Shirik
Hmm interesujące. Jedną z myśli, która przychodzi do głowy, nie jest zapisywanie wartości domyślnej: zamiast tego wystarczy napisać kod pod ostatnim przypadkiem. Ale to krzyczy potencjalnie zła praktyka :) –