i++ vs ++i en C

Jinku Hu 12 octobre 2023
  1. Principales différences entre les notations ++i et i++ en C
  2. Utiliser la notation ++i comme style communément accepté pour les énoncés de boucle en C
i++ vs ++i en C

Cet article expliquera plusieurs méthodes d’utilisation des opérateurs d’incrémentation des préfixes et des postfixes, alias i++ vs ++i, en C.

Principales différences entre les notations ++i et i++ en C

La partie fondamentale de ces deux notations est l’opérateur unaire d’incrément ++ qui augmente son opérande, par exemple i, de 1. L’opérateur d’incrément peut venir avant l’opérande comme préfixe ++i ou après l’opérande comme opérateur de postfixe - i++.

Un comportement légèrement inhabituel se produit lorsque la valeur de la variable incrémentée avec l’opérateur ++ est utilisée dans une expression. Dans ce cas, les incréments de préfixe et de postfixe se comportent différemment. En effet, l’opérateur prefix incrémente son opérande avant que sa valeur ne soit utilisée, alors que l’opérateur postfix incrémente l’opérande après que la valeur ait été utilisée.

En conséquence, la fonction printf qui utilise l’expression i++ comme argument affichera la valeur de i avant qu’elle ne soit incrémentée de un. D’autre part, la fonction printf avec l’opérateur d’incrémentation de préfixe ++i affichera la valeur incrémentée, qui sera de 1 à la première itération comme le montre l’exemple de code suivant.

#include <stdio.h>
#include <stdlib.h>

int main() {
  int i = 0, j = 0;

  while ((i < 5) && (j < 5)) {
    /*
    postfix increment, i++
    the value of i is read and then incremented
    */
    printf("i: %d\t", i++);
    /*
    prefix increment, ++j
    the value of j is incremented and then read
    */
    printf("j: %d\n", ++j);
  }

  printf("At the end they have both equal values:\ni: %d\tj: %d\n\n", i, j);

  exit(EXIT_SUCCESS);
}

Production :

i: 0	j: 1
i: 1	j: 2
i: 2	j: 3
i: 3	j: 4
i: 4	j: 5
At the end they have both equal values:
i: 5	j: 5

Utiliser la notation ++i comme style communément accepté pour les énoncés de boucle en C

Les opérateurs postfix et prefix ont le même comportement fonctionnel lorsqu’ils sont utilisés dans l’instruction de boucle for. Comme les deux itérations for sont exécutées dans l’exemple de code ci-dessous, elles affichent les valeurs de k de manière identique.

Notez qu’il y a plusieurs affirmations sur la meilleure efficacité de performance de l’utilisation de l’incrément de préfixe par rapport au postfix dans les boucles for, mais la différence de temps effective dans la plupart des applications sera négligeable. On peut prendre l’habitude d’utiliser l’opérateur de préfixe comme méthode privilégiée, comme un style communément accepté.

Mais si vous utilisez déjà la notation postfix, alors considérez que l’utilisation de compilateurs modernes avec les drapeaux d’optimisation correspondants éliminera automatiquement les itérations de boucles inefficaces.

#include <stdio.h>
#include <stdlib.h>

int main() {
  for (int k = 0; k < 5; ++k) {
    printf("%d ", k);
  }
  printf("\n");
  for (int k = 0; k < 5; k++) {
    printf("%d ", k);
  }
  printf("\n\n");

  exit(EXIT_SUCCESS);
}

Production :

0 1 2 3 4
0 1 2 3 4
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C Operator