Increment/decrement operators
증감 연산자는 변수의 값을 1씩 증가/감소시키는 단항 연산자입니다.
이들은 후위 형식을 가질 수 있습니다:
expr
++
|
|||||||||
expr
--
|
|||||||||
접두사 형태와 마찬가지로:
++
expr
|
|||||||||
--
expr
|
|||||||||
`, `
` 태그 내의 `++`, `--` 연산자와 `
` 내의 `expr`은 C++ 용어로 번역에서 제외됩니다. HTML 태그와 속성은 원본 형식을 유지합니다.
전위 및 후위 증가 또는 감소 연산자의 피연산자
expr
는 반드시
수정 가능한 lvalue
여야 하며,
정수형
(
_Bool
및 열거형 포함), 실수 부동소수점형, 또는 포인터형이어야 합니다. cvr 한정자(const, volatile, restrict)가 있을 수 있고, 한정되지 않을 수 있으며,
atomic
일 수 있습니다.
후위 증가 및 감소 연산자의 결과는 expr 의 값입니다.
전위 증가 연산자의 결과는
expr
값에
1
을 더한 값입니다:
++
e
표현식은
e
+
=
1
와 동일합니다. 전위 감소 연산자의 결과는
expr
값에서
1
을 뺀 값입니다:
--
e
표현식은
e
-
=
1
와 동일합니다.
증가 연산자는 피연산자에 적절한 타입의 값
1
을 더하는 부수 효과를 발생시킵니다. 감소 연산자는 피연산자로부터 적절한 타입의 값
1
을 빼는 부수 효과를 발생시킵니다. 다른 모든 부수 효과와 마찬가지로, 이러한 연산들은 다음
시퀀스 포인트
에서나 그 이전에 완료됩니다.
int a = 1; int b = a++; // a+1(즉 2)을 a에 저장 // a의 이전 값(즉 1)을 반환 // 이 줄 이후, b == 1이고 a == 2 a = 1; int c = ++a; // a+1(즉 2)을 a에 저장 // a+1(즉 2)을 반환 // 이 줄 이후, c == 2이고 a == 2
|
모든 atomic 변수 에 대한 후위 증가 또는 후위 감소 연산은 memory_order_seq_cst 메모리 순서를 갖는 원자적 읽기-수정-쓰기 연산입니다. |
(C11부터) |
자세한 내용은 산술 연산자 에서 포인터 산술 연산의 제한 사항과 피연산자에 적용되는 암시적 변환을 참조하십시오.
목차 |
참고 사항
부수 효과가 수반되기 때문에, 증감 연산자는 시퀀싱 규칙 위반으로 인한 정의되지 않은 동작을 피하기 위해 주의해서 사용해야 합니다.
복소수나 허수 타입에 대해서는 증감 연산자가 정의되어 있지 않습니다: 실수 1을 더하거나 빼는 일반적인 정의는 허수 타입에 아무런 영향을 미치지 않을 것이며, 허수에 대해서는
i
를 더하거나 빼고 복소수에 대해서는
1
을 더하거나 빼도록 만들었다면
0+yi
와
yi
를 다르게 처리해야 했을 것입니다.
C++(및 일부 C 구현)와 달리, 증감 표현식 자체는 결상 lvalue가 아닙니다: & ++ a 는 유효하지 않습니다.
예제
#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); }
출력:
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
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 6.5.2.4 후위 증가 및 감소 연산자 (p: TBD)
-
- 6.5.3.1 전위 증가 및 감소 연산자 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 6.5.2.4 후위 증가 및 감소 연산자 (p: TBD)
-
- 6.5.3.1 전위 증가 및 감소 연산자 (p: TBD)
- C11 표준 (ISO/IEC 9899:2011):
-
- 6.5.2.4 후위 증가 및 감소 연산자 (p: 85)
-
- 6.5.3.1 전위 증가 및 감소 연산자 (p: 88)
- C99 표준 (ISO/IEC 9899:1999):
-
- 6.5.2.4 후위 증가 및 감소 연산자 (p: 75)
-
- 6.5.3.1 전위 증가 및 감소 연산자 (p: 78)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 3.3.2.4 후위 증가 및 감소 연산자
-
- 3.3.3.1 전위 증가 및 감소 연산자
참고 항목
| 일반 연산자 | ||||||
|---|---|---|---|---|---|---|
| 대입 |
증가
감소 |
산술 | 논리 | 비교 |
멤버
접근 |
기타 |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
b
]
|
a
(
...
)
|
|
C++ 문서
참조:
증감 연산자
|