Delen via


switch Instructie (C)

De switch en case instructies helpen bij het beheren van complexe voorwaardelijke en vertakkingsbewerkingen. De switch instructie draagt het besturingselement over naar een instructie binnen de hoofdtekst.

Syntaxis

selection-statement:
switch ( expression ) statement

labeled-statement:
case constant-expression : statement
default : statement

Opmerkingen

Een switch instructie zorgt ervoor dat de controle wordt overgedragen naar een labeled-statement in de hoofdtekst van de instructie, afhankelijk van de waarde van expression.

De waarden van expression en elk constant-expression moeten een integraal type hebben. A constant-expression moet een ondubbelzinnige constante integrale waarde hebben op het moment van compileren.

Control wordt doorgegeven aan de instructie waarvan constant-expression de case waarde overeenkomt met de waarde van expression. De switch instructie kan een willekeurig aantal case exemplaren bevatten. Er kunnen echter geen twee constant-expression waarden in dezelfde switch instructie dezelfde waarde hebben. Uitvoering van de hoofdtekst van de switch instructie begint bij de eerste instructie in of na de overeenkomende labeled-statementinstructie. De uitvoering gaat door tot het einde van de hoofdtekst of totdat een break instructie het beheer van de hoofdtekst overdraagt.

Het gebruik van de switch instructie ziet er meestal ongeveer als volgt uit:

switch ( expression )
{
    // declarations
    // . . .
    case constant_expression:
        // statements executed if the expression equals the
        // value of this constant_expression
        break;
    default:
        // statements executed if expression does not equal
        // any case constant_expression
}

U kunt de break instructie gebruiken om de verwerking van een bepaalde gelabelde instructie binnen de switch instructie te beëindigen. Deze vertakt naar het einde van de switch instructie. Zonder break, gaat het programma door naar de volgende gelabelde instructie, waarbij de instructies worden uitgevoerd totdat een break of het einde van de instructie is bereikt. Deze voortzetting kan in sommige situaties wenselijk zijn.

De default instructie wordt uitgevoerd als er geen caseconstant-expression waarde gelijk is aan de waarde van expression. Als er geen default instructie is en er geen case overeenkomst wordt gevonden, wordt geen van de instructies in de switch hoofdtekst uitgevoerd. Er kan maximaal één default verklaring zijn. De default instructie hoeft niet aan het einde te komen. Deze kan ergens in de hoofdtekst van de switch instructie worden weergegeven. Een case of default label kan alleen in een switch instructie worden weergegeven.

Het type switchexpression en caseconstant-expression moet integraal zijn. De waarde van elk caseconstant-expression moet uniek zijn binnen de hoofdtekst van de instructie.

De case en default labels van de hoofdtekst van de switch instructie zijn alleen belangrijk in de eerste test die bepaalt waar de uitvoering in de hoofdtekst van de instructie begint. switch instructies kunnen worden genest. Statische variabelen worden geïnitialiseerd voordat ze in instructies switch worden uitgevoerd.

Opmerking

Declaraties kunnen worden weergegeven aan het hoofd van de samengestelde instructie die de switch hoofdtekst vormt, maar initialisaties die zijn opgenomen in de declaraties worden niet uitgevoerd. De switch instructie draagt het besturingselement rechtstreeks over naar een uitvoerbare instructie binnen de hoofdtekst, waarbij de regels die initialisaties bevatten, worden overgeslagen.

De volgende voorbeelden illustreren switch instructies:

switch( c )
{
    case 'A':
        capital_a++;
    case 'a':
        letter_a++;
    default :
        total++;
}

Alle drie de instructies van de switch hoofdtekst in dit voorbeeld worden uitgevoerd als c deze gelijk is aan 'A', omdat er vóór het volgende casegeen break instructie wordt weergegeven. Het uitvoeringsbeheer wordt overgebracht naar de eerste instructie (capital_a++;) en wordt voortgezet op volgorde door de rest van de hoofdtekst. Als c dit gelijk is aan 'a'en totalletter_a wordt verhoogd. Alleen total wordt verhoogd wanneer c deze niet gelijk is 'A' aan of 'a'.

switch( i )
{
    case -1:
        n++;
        break;
    case 0 :
        z++;
        break;
    case 1 :
        p++;
        break;
}

In dit voorbeeld volgt een break instructie elke instructie van de switch hoofdtekst. De break instructie dwingt af dat de hoofdtekst van de instructie wordt afgesloten nadat één instructie is uitgevoerd. Als i deze gelijk is aan -1, wordt alleen n verhoogd. De break volgende instructie n++; zorgt ervoor dat het uitvoeringsbeheer uit de hoofdtekst van de instructie komt, waardoor de resterende instructies worden overgeslagen. Als het gelijk i is aan 0, wordt alleen z verhoogd. Als i dit gelijk is aan 1, wordt alleen p verhoogd. De laatste break instructie is niet strikt noodzakelijk, omdat de controle aan het einde van de samengestelde instructie uit het lichaam komt. Deze is opgenomen voor consistentie.

Eén instructie kan meerdere case labels bevatten, zoals in het volgende voorbeeld wordt weergegeven:

switch( c )
{
    case 'a' :
    case 'b' :
    case 'c' :
    case 'd' :
    case 'e' :
    case 'f' :  convert_hex(c);
}

Als in dit voorbeeld constant-expression gelijk is aan een letter tussen 'a' en 'f', wordt de convert_hex functie aangeroepen.

Microsoft-specifiek

Microsoft C beperkt het aantal case waarden in een switch instructie niet. Het aantal wordt alleen beperkt door het beschikbare geheugen. ANSI C vereist dat ten minste 257 case labels in een switch instructie zijn toegestaan.

Het default voor Microsoft C is dat de Microsoft-extensies zijn ingeschakeld. Gebruik de optie /Za-compiler om deze extensies uit te schakelen.

Zie ook

switch Instructie (C++)