Increment/decrement operators
Los operadores de incremento/decremento son operadores unarios que incrementan/decrementan el valor de una variable en 1.
Pueden tener forma postfija:
expr
++
|
|||||||||
expr
--
|
|||||||||
Así como la forma de prefijo:
++
expr
|
|||||||||
--
expr
|
|||||||||
El operando
expr
tanto del incremento como del decremento prefijo y postfijo debe ser un
lvalue modificable
de
tipo entero
(incluyendo
_Bool
y enumeraciones), tipo flotante real, o un tipo puntero. Puede estar calificado cvr, no calificado, o ser
atómico
.
El resultado de los operadores de incremento y decremento postfijos es el valor de expr .
El resultado del operador de incremento prefijo es el resultado de sumar el valor
1
al valor de
expr
: la expresión
++
e
es equivalente a
e
+
=
1
. El resultado del operador de decremento prefijo es el resultado de restar el valor
1
del valor de
expr
: la expresión
--
e
es equivalente a
e
-
=
1
.
Los operadores de incremento inician el efecto secundario de agregar el valor
1
del tipo apropiado al operando. Los operadores de decremento inician el efecto secundario de restar el valor
1
del tipo apropiado del operando. Como con cualquier otro efecto secundario, estas operaciones se completan en o antes del siguiente
punto de secuencia
.
int a = 1; int b = a++; // almacena 1+a (que es 2) en a // retorna el valor antiguo de a (que es 1) // Después de esta línea, b == 1 y a == 2 a = 1; int c = ++a; // almacena 1+a (que es 2) en a // retorna 1+a (que es 2) // después de esta línea, c == 2 y a == 2
|
El post-incremento o post-decremento en cualquier variable atómica es una operación atómica de lectura-modificación-escritura con orden de memoria memory_order_seq_cst . |
(desde C11) |
Consulte operadores aritméticos para conocer las limitaciones de la aritmética de punteros, así como las conversiones implícitas aplicadas a los operandos.
Contenidos |
Notas
Debido a los efectos secundarios involucrados, los operadores de incremento y decremento deben usarse con cuidado para evitar comportamiento indefinido debido a violaciones de las reglas de secuenciación .
Los operadores de incremento/decremento no están definidos para tipos complejos o imaginarios: la definición habitual de sumar/restar el número real 1 no tendría efecto en tipos imaginarios, y hacer que sume/reste
i
para imaginarios pero
1
para números complejos habría hecho que maneje
0+yi
diferente de
yi
.
A diferencia de C++ (y algunas implementaciones de C), las expresiones de incremento/decremento nunca son lvalues por sí mismas: & ++ a es inválido.
Ejemplo
#include <stdio.h> #include <stdlib.h> int main(void) { int a = 1; int b = 1; printf("valores originales: a == %d, b == %d\n", a, b); printf("resultado de operadores postfijos: a++ == %d, b-- == %d\n", a++, b--); printf("después de aplicar operadores postfijos: a == %d, b == %d\n", a, b); printf("\n"); // Reset a and b. a = 1; b = 1; printf("valores originales: a == %d, b == %d\n", a, b); printf("resultado de operadores prefijos: ++a == %d, --b == %d\n", ++a, --b); printf("después de aplicar operadores prefijos: a == %d, b == %d\n", a, b); }
Salida:
valores originales: a == 1, b == 1 resultado de operadores postfijos: a++ == 1, b-- == 1 después de aplicar operadores postfijos: a == 2, b == 0 valores originales: a == 1, b == 1 resultado de operadores prefijos: ++a == 2, --b == 0 después de aplicar operadores prefijos: a == 2, b == 0
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 6.5.2.4 Operadores de incremento y decremento postfijos (p: TBD)
-
- 6.5.3.1 Operadores de incremento y decremento prefijos (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 6.5.2.4 Operadores de incremento y decremento postfijos (p: TBD)
-
- 6.5.3.1 Operadores de incremento y decremento prefijos (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 6.5.2.4 Operadores de incremento y decremento postfijos (p: 85)
-
- 6.5.3.1 Operadores de incremento y decremento prefijos (p: 88)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 6.5.2.4 Operadores de incremento y decremento postfijos (p: 75)
-
- 6.5.3.1 Operadores de incremento y decremento prefijos (p: 78)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 3.3.2.4 Operadores de incremento y decremento postfijos
-
- 3.3.3.1 Operadores de incremento y decremento prefijos
Véase también
| Operadores comunes | ||||||
|---|---|---|---|---|---|---|
| asignación |
incremento
decremento |
aritméticos | lógicos | comparación |
acceso a
miembros |
otros |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
b
]
|
a
(
...
)
|
|
Documentación de C++
para
Operadores de incremento/decremento
|