Section courante

A propos

Section administrative du site

IF

Si
ISO C99  

Syntaxe

statement := if ( condition ) statement |
if ( condition ) statement else statement
condition ::= expression | type-specifier-seq declarator = assignment-expr

Paramètres

Nom Description
condition Ce paramètre permet d'indiquer une condition vrai
statement Ce paramètre permet d'indiquer une instruction.
type-specifier-seq Ce paramètre permet d'indiquer un spécificateur de type séquentiel.

Description

Ce mot réservé permet d'effectuer le traitement d'une condition.

Remarques

Bonnes pratiques

Lorsque vous avez plusieurs valeurs différentes à évaluer avec la même condition comme ceci :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int a = 5;
  7.     if(a == 1) printf("A vaut un\n");
  8.     else if(a == 2) printf("A vaut deux\n");
  9.     else if(a == 3) printf("A vaut trois\n");
  10.     else printf("A vaut plus que trois\n");
  11.     return 0;
  12. }

Le code devient progressivement moins claire et peut également amener un certain lot d'erreurs comme les omissions de double égalité. Par contre, avec un mot réservé switch, le code devient plus claire et beaucoup plus optimale lors de sa compilation :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int a = 5;
  7.     switch(a) {
  8.         case 1: printf("A vaut un\n");break;
  9.         case 2: printf("A vaut deux\n");break;
  10.         case 3: printf("A vaut trois\n");break;
  11.         default: printf("A vaut plus que trois\n");break;
  12.     }
  13.     return 0;
  14. }

Si vous devez comparer une valeur immédiate dans votre test, il est préférable de mettre la valeur avant plutôt qu'après l'opérateur. Ainsi, c'est une mauvaise pratique :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int a = 5;
  7.     /* MAUVAISE PRATIQUE */
  8.     if(a == 1) printf("TEST");
  9.     return 0;
  10. }

Car si vous oubliez de mettre un symbole égale après l'expression, vous n'aurez pas d'erreur mais votre test ne donnera pas le résultat que vous souhaitez. Voir l'exemple suivant :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int a = 5;
  7.     /* MAUVAISE PRATIQUE */
  8.     if(a = 1) printf("TEST");
  9.     return 0;
  10. }

Ainsi, lorsque l'interpréteur PHP constate l'expression suivante «if($a = 1)», il commence par fixer la valeur de la variable «$a» à la valeur 1, ensuite puisque l'expression est déjà vrai, il affichera le message «TEST» de tout de façon même si la valeur est indéfini ou qu'elle vaut 45 ! Pour cette raison, il est recommander d'inverser lors valeur immédiate et la variable car le compilateur retournera une erreur si vous oubliez de mettre un symbole égale «=». Voici la bonne pratique :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int a = 5;
  7.     /* BONNE PRATIQUE */
  8.     if(1 == a) printf("TEST");
  9.     return 0;
  10. }

Exemples

Cet exemple permet de tester une condition vrai :

Essayer maintenant !
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     if( 1 ) {
  7.         printf("La condition est vrai\n");
  8.     }
  9.     return 0;
  10. }

on obtiendra le résultat suivant :

La condition est vrai

L'exemple suivant permet de faire des combinaisons de tests «ET LOGIQUE» ou «OU LOGIQUE» avec une instruction if :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int a = 1, b = 2;
  7.     // A = 1 ET B = 2 ?
  8.     if((1 == a)&&(2 == b)) {
  9.         printf("A = 1 et B = 2\n");
  10.     } else {
  11.         printf("A != 1 ou B != 2\n");
  12.     }
  13.     // A = 1 OU B = 3 ?
  14.     if((1 == a)||(3 == b)) {
  15.         printf("A = 1 ou B = 3\n");
  16.     } else {
  17.         printf("A != 1 et B != 3\n");
  18.     }
  19.     return 0;
  20. }

on obtiendra le résultat suivant :

A = 1 et B = 2
A = 1 ou B = 3

Voir également

Langage de programmation - C - Les instructions conditionnelles
Langage de programmation - C - Références de mots réservés (mots clefs) - else

Dernière mise à jour : Mardi, le 28 juillet 2015