Quase “se” em switch / case [duplicado]

Oct 26 2020

Eu enfrentei uma nova para mim C / C ++ switch / if / else / case sintaxe. Não consigo encontrar sua menção no padrão C. O valor dentro de "if" não importa, "if (1)" ou "if (0)" funciona da mesma forma. Parece que este "se" não age como condição, mas como escopo. É extensão do compilador ou açúcar do compilador?

#include <stdio.h>

int main()
{
    int a = 0, b = -1, c = -1;
    switch(a)
    {
        if(1) { 
            case 0: b = 0;
            printf("%u:b=%d\n", __LINE__, b);
        }
        else if(0) {
            case 1: b = 1; 
            printf("%u:b=%d\n", __LINE__, b);
        }
        else if(0) {
            case 2: b = 2; 
            printf("%u:b=%d\n", __LINE__, b);
        }
        else {
            case 3: b = 3; 
            printf("%u:b=%d\n", __LINE__, b);
        }
        c = 0;
        printf("%u:b=%d, c=%d\n", __LINE__, b, c);
        break;
    }

    printf("b=%d", b);
    return 0;
}

Respostas

2 EricPostpischil Oct 26 2020 at 12:58

A switch pula para o caserótulo selecionado . As ifcondições nunca são avaliadas porque o controle do programa nunca flui para elas. Isso é especificado pelos padrões C e C ++.