À QUOI ÇA SERT ?
Un programme doit prendre des décisions et répéter des opérations.
Les conditions répondent à :
"Est-ce que je dois exécuter ce bloc ?"
Les boucles répondent à :
"Combien de fois dois-je répéter cette opération ?"
1. if
Code: Select all
if (size == 0)
{
return;
}
"Si size vaut 0, exécute ce bloc."
2. if / else
Code: Select all
if (connected)
{
sendData();
}
else
{
reconnect();
}
3. INITIALIZER DANS if
Code: Select all
if (int result = openFile(); result != 0)
{
handleError(result);
}
result n’existe que dans le if/else.
Cela réduit la portée et évite de conserver inutilement des variables.
4. switch
Très utile pour des codes de commandes.
Code: Select all
switch (command)
{
case 1:
start();
break;
case 2:
stop();
break;
default:
unknown();
break;
}
Code: Select all
switch (ioctlCode)
{
case IOCTL_START:
...
break;
case IOCTL_STOP:
...
break;
}
5. FALLTHROUGH
Sans break :
Code: Select all
case 1:
functionA();
case 2:
functionB();
Si c’est volontaire :
Code: Select all
[[fallthrough]];
6. while
Code: Select all
while (running)
{
process();
}
7. do while
Code: Select all
do
{
readInput();
}
while (!valid);
8. for
Code: Select all
for (int i = 0; i < 10; ++i)
{
}
1. int i = 0
2. test i < 10
3. exécution du corps
4. ++i
5. retour au test
9. RANGE-BASED FOR
Code: Select all
for (const auto& item : items)
{
print(item);
}
- auto déduit le type ;
- & évite une copie ;
- const empêche de modifier l’élément.
Code: Select all
for (auto& item : items)
{
item.reset();
}
10. break
Quitte immédiatement la boucle.
Code: Select all
for (...)
{
if (found)
break;
}
11. continue
Passe directement à l’itération suivante.
Code: Select all
for (int value : values)
{
if (value < 0)
continue;
process(value);
}
À RETENIR
En code système, les conditions sont partout :
- vérification de pointeurs ;
- codes d’erreur ;
- flags ;
- état d’un handle ;
- lecture en boucle ;
- traitement de paquets ;
- dispatch d’IOCTL.
