Increment/decrement operators
Les opérateurs d'incrémentation/décrémentation sont des opérateurs unaires qui incrémentent/décrémentent la valeur d'une variable de 1.
Ils peuvent avoir une forme postfixe :
expr
++
|
|||||||||
expr
--
|
|||||||||
Ainsi que la forme préfixe :
++
expr
|
|||||||||
--
expr
|
|||||||||
L'opérande
expr
des opérateurs d'incrémentation et de décrémentation préfixés et postfixés doit être un
lvalue modifiable
de type
entier
(incluant
_Bool
et les énumérations), de type flottant réel, ou de type pointeur. Il peut être qualifié cvr, non qualifié, ou
atomique
.
Le résultat des opérateurs d'incrémentation et de décrémentation postfixés est la valeur de expr .
Le résultat de l'opérateur de pré-incrémentation est le résultat de l'ajout de la valeur
1
à la valeur de
expr
: l'expression
++
e
est équivalente à
e
+
=
1
. Le résultat de l'opérateur de pré-décrémentation est le résultat de la soustraction de la valeur
1
de la valeur de
expr
: l'expression
--
e
est équivalente à
e
-
=
1
.
Les opérateurs d'incrémentation initient l'effet secondaire d'ajouter la valeur
1
du type approprié à l'opérande. Les opérateurs de décrémentation initient l'effet secondaire de soustraire la valeur
1
du type approprié de l'opérande. Comme pour tout autre effet secondaire, ces opérations se terminent au plus tard au prochain
point de séquence
.
int a = 1; int b = a++; // stocke 1+a (qui vaut 2) dans a // retourne l'ancienne valeur de a (qui vaut 1) // Après cette ligne, b == 1 et a == 2 a = 1; int c = ++a; // stocke 1+a (qui vaut 2) dans a // retourne 1+a (qui vaut 2) // après cette ligne, c == 2 et a == 2
|
Le post-incrément ou le post-décrément sur toute variable atomique est une opération atomique de lecture-modification-écriture avec l'ordre mémoire memory_order_seq_cst . |
(depuis C11) |
Voir les opérateurs arithmétiques pour les limitations de l'arithmétique des pointeurs, ainsi que pour les conversions implicites appliquées aux opérandes.
Table des matières |
Notes
En raison des effets secondaires impliqués, les opérateurs d'incrément et de décrément doivent être utilisés avec précaution pour éviter un comportement indéfini dû à des violations des règles de séquencement .
Les opérateurs d'incrémentation/décrémentation ne sont pas définis pour les types complexes ou imaginaires : la définition habituelle d'ajouter/soustraire le nombre réel 1 n'aurait aucun effet sur les types imaginaires, et le fait de les faire ajouter/soustraire
i
pour les imaginaires mais
1
pour les nombres complexes aurait fait qu'ils traiteraient
0+yi
différemment de
yi
.
Contrairement au C++ (et certaines implémentations du C), les expressions d'incrémentation/décrémentation ne sont jamais elles-mêmes des lvalues : & ++ a est invalide.
Exemple
#include <stdio.h> #include <stdlib.h> int main(void) { int a = 1; int b = 1; printf("original values: a == %d, b == %d\n", a, b); printf("result of postfix operators: a++ == %d, b-- == %d\n", a++, b--); printf("after postfix operators applied: a == %d, b == %d\n", a, b); printf("\n"); // Reset a and b. a = 1; b = 1; printf("original values: a == %d, b == %d\n", a, b); printf("result of prefix operators: ++a == %d, --b == %d\n", ++a, --b); printf("after prefix operators applied: a == %d, b == %d\n", a, b); }
Sortie :
original values: a == 1, b == 1 result of postfix operators: a++ == 1, b-- == 1 after postfix operators applied: a == 2, b == 0 original values: a == 1, b == 1 result of prefix operators: ++a == 2, --b == 0 after prefix operators applied: a == 2, b == 0
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 6.5.2.4 Opérateurs de post-incrémentation et post-décrémentation (p: TBD)
-
- 6.5.3.1 Opérateurs de pré-incrémentation et pré-décrémentation (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.5.2.4 Opérateurs de post-incrémentation et post-décrémentation (p: TBD)
-
- 6.5.3.1 Opérateurs de pré-incrémentation et pré-décrémentation (p: TBD)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 6.5.2.4 Opérateurs postfixés d'incrémentation et de décrémentation (p: 85)
-
- 6.5.3.1 Opérateurs préfixés d'incrémentation et de décrémentation (p: 88)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 6.5.2.4 Opérateurs postfixés d'incrémentation et de décrémentation (p: 75)
-
- 6.5.3.1 Opérateurs préfixés d'incrémentation et de décrémentation (p: 78)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 3.3.2.4 Opérateurs de post-incrémentation et post-décrémentation
-
- 3.3.3.1 Opérateurs de pré-incrémentation et pré-décrémentation
Voir aussi
| Opérateurs courants | ||||||
|---|---|---|---|---|---|---|
| assignation |
incrémentation
décrémentation |
arithmétique | logique | comparaison |
accès aux
membres |
autres |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
b
]
|
a
(
...
)
|
|
Documentation C++
pour
Opérateurs d'incrémentation/décrémentation
|