Почему когда использую статическую переменную в switch case выдает ошибки : "initialization of "counter" is skipped by 'case' label", "initialization of "counter" is skipped by 'default' label"
int num = 1;
switch (num)
{
case 1:
static int counter = 0;
cout << "COUNTER = " << counter;
counter++;
break;
case 0:
cout << "000";
break;
default:
cout << "Error";
break;
}
Эту ошибку можно исправить путём перемещения статической переменной в самый низ, но почему c++ не допускает указанной ситуации.
Дело в том, что конструкция switch
/case
в С++ является модифицированным оператором goto
, и блоки case
не создают новую область видимости. Соответственно переменная counter
может быть использована в блоках case 0
и default
, но инициализация этой переменной происходит только при выполнении блока case 1
. Это может привести к использованию переменной couter
без инициализации.
Следует вручную создать новую область видимости. Теперь counter
не виден из других блоков и не может быть случайно использован внутри них:
case 1:
{
static int counter = 0;
cout << "COUNTER = " << counter;
counter++;
break;
}
Или вынести эту переменную наружу, тогда counter
может быть использован и в других блоках, но всегда будет инициализирован.
static int counter = 0;
switch (num)
У меня есть основное окно в котором считаются точки, а потом выводятся графикиПочему у меня закрывается вся программа, когда закрываешь окно...
Проверка на пустой ввод или то, что введенная строка НЕ цифра работает через разДопустим, если два раза ввести пустую строку в поток, то когда...
Дан двумерный массивНайти наибольшее значение в строке и наименьшее значение в столбце
Как в таком примере перевести кнопки с YES/NO на свой текст либо загрузке файла с переводом