Heute habe ich zufällig entdeckt, dass mein Compiler nicht beim Schreiben von Code innerhalb einer Switch-Anweisung ohne einen Fall zu klagen. (Es beschwerte sich über das Fehlen von Case-Anweisungen, aber nach dem Hinzufügen eines nach dem Code, gab es nicht einmal eine Warnung, um mich wissen zu lassen, dass der Code nutzlos war.)Switch ohne Case
Ich versuche herauszufinden, ob Es gibt einen Zweck, den folgenden Code zuzulassen, oder wenn es nur eines dieser Dinge ist, bei denen "es mehr Arbeit ist, es einzuschränken, also ist es erlaubt".
#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;
}
}
}
Dies gibt nun "4" wie erwartet, wenn ein == 4, und es nie foo ausgibt. Die Frage ist also, gibt es einen (möglicherweise esoterischen, aber nützlichen) Grund, die Aussage foo();
vor dem ersten Fall zu berücksichtigen? Ich bin mir sicher, dass ich dort keine Variablen deklarieren und initialisieren darf.
(FWIW, habe ich dies auf mehrere Compiler getestet, und sie sind alle das gleiche Verhalten ergibt. Überraschenderweise sie alle Ausgaben auch nicht eine Warnung.)
Welcher Compiler ist das? – turnt
Ich habe dies sowohl auf MSVC 2012 und GCC 4.8.1 getestet. – Shirik
Hmm interessant. Ein Gedanke, der mir in den Sinn kommt, ist, dass ich keinen Standard schreiben muss und stattdessen nur den Code unter dem letzten Fall schreibe. Aber, das schreit möglicherweise schlechte Praxis :) –