Quasi "If" in switch / case [duplicate]

Oct 26 2020

Ho affrontato il nuovo per me C / C ++ switch / if / else / case syntax. Non riesco a trovare la menzione in C standart. Il valore all'interno di "if" non ha importanza, "if (1)" o "if (0)" funziona allo stesso modo. Sembra che questo "se" non si comporti come condizione, ma come ambito. È l'estensione del compilatore o lo zucchero del compilatore?

#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;
}

Risposte

2 EricPostpischil Oct 26 2020 at 12:58

A switch saltacase all'etichetta selezionata . Le ifcondizioni non vengono mai valutate perché il controllo del programma non scorre mai su di esse. Questo è specificato dallo standard C e dagli standard C ++.