From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- devdocs/c/language%2Foperator_incdec.html | 98 +++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 devdocs/c/language%2Foperator_incdec.html (limited to 'devdocs/c/language%2Foperator_incdec.html') diff --git a/devdocs/c/language%2Foperator_incdec.html b/devdocs/c/language%2Foperator_incdec.html new file mode 100644 index 00000000..37060cb3 --- /dev/null +++ b/devdocs/c/language%2Foperator_incdec.html @@ -0,0 +1,98 @@ +

Increment/decrement operators

Increment/decrement operators are unary operators that increment/decrement the value of a variable by 1.

+

They can have postfix form:

+ + + +
expr ++
expr --

As well as the prefix form:

+ + + +
++ expr
-- expr

The operand expr of both prefix and postfix increment or decrement must be a modifiable lvalue of integer type (including _Bool and enums), real floating type, or a pointer type. It may be cvr-qualified, unqualified, or atomic.

+

The result of the postfix increment and decrement operators is the value of expr.

+

The result of the prefix increment operator is the result of adding the value 1 to the value of expr: the expression ++e is equivalent to e += 1. The result of the prefix decrement operator is the result of subtracting the value 1 from the value of expr: the expression --e is equivalent to e -= 1.

+

Increment operators initiate the side-effect of adding the value 1 of appropriate type to the operand. Decrement operators initiate the side-effect of subtracting the value 1 of appropriate type from the operand. As with any other side-effects, these operations complete at or before the next sequence point.

+
int a = 1;
+int b = a++; // stores 1+a (which is 2) to a
+             // returns the old value of a (which is 1)
+             // After this line, b == 1 and a == 2
+a = 1;
+int c = ++a; // stores 1+a (which is 2) to a
+             // returns 1+a (which is 2)
+             // after this line, c == 2 and a == 2
+ +

Post-increment or post-decrement on any atomic variable is an atomic read-modify-write operation with memory order memory_order_seq_cst.

+
(since C11)

See arithmetic operators for limitations on pointer arithmetic, as well as for implicit conversions applied to the operands.

+

Notes

Because of the side-effects involved, increment and decrement operators must be used with care to avoid undefined behavior due to violations of sequencing rules.

+

Increment/decrement operators are not defined for complex or imaginary types: the usual definition of adding/subtracting the real number 1 would have no effect on imaginary types, and making it add/subtract i for imaginaries but 1 for complex numbers would have made it handle 0+yi different from yi.

+

Unlike C++ (and some implementations of C), the increment/decrement expressions are never themselves lvalues: &++a is invalid.

+

Example

#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);
+}

Output:

+
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

References

See also

Operator precedence

+ + + +
Common operators
assignment increment
decrement
arithmetic logical comparison member
access
other

a = b a += b a -= b a *= b a /= b a %= b a &= b a |= b a ^= b a <<= b a >>= b

+

++a --a a++ a--

+

+a -a a + b a - b a * b a / b a % b ~a a & b a | b a ^ b a << b a >> b

+

!a a && b a || b

+

a == b a != b a < b a > b a <= b a >= b

+

a[b] *a &a a->b a.b

+

a(...) a, b (type) a a ? b : c sizeof

_Alignof
(since C11)

+
+
C++ documentation for Increment/decrement operators
+

+ © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
+ https://en.cppreference.com/w/c/language/operator_incdec +

+
-- cgit v1.2.3