Voici un exemple simple (non lié à une plateforme spécifique) :
#include <stdio.h>
int main()
{
for(int i = 0; i < 3; ++i)
if(i == 0) printf("1\n");
else if (i == 1) goto checkfor2;
else checkfor2: if(i == 2 || i == 1) printf("2\n");
}
En direct sur wandbox.
Mon code original Windows à partir duquel cette question a été soulevée :
#include <Windows.h>
#include <stdbool.h>
main() //exemple avec API Win32
{
for (;;) //boucle infinie pour ma logique principale
if (WaitForSingleObject(hEvent, 1) != WAIT_TIMEOUT, true) //#1 vérifier un événement
//oops définir comma true pour tester ce code d'événement
{
//faire quelque chose
//mais ici ça va boucler indéfiniment et ne vérifiera pas #3
//donc si quelque chose ne va pas, je ne peux pas sortir
//alors moi, malin, j'ai fait ce qui suit :
goto checkforexit; //voir l'étiquette sur #3 ci-dessous
}
else if (WaitForSingleObject(hEvent2, 1) != WAIT_TIMEOUT) //#2 vérifier un autre événement
{
//faire quelque chose d'autre
}
else checkforexit: /*wow entre else et if*/ if (GetAsyncKeyState(VK_BACK) & 0x8000 && GetAsyncKeyState(VK_CONTROL) & 0x8000) //#3 vérifier le raccourci clavier pour la sortie
exit(0); //code de terminaison
}
J'étais surpris que cela fonctionne - il semble que à la fois le else if
d'origine et l'étiquette du if
fonctionnent comme prévu - comment est-ce possible ?
Je vous serais reconnaissant si vous ajoutez une citation du standard C.
Cela fonctionne à la fois sur gcc (comme testé sur le wandbox) et MSVC.