Namespaces
Variants

Increment/decrement operators

From cppreference.net

증감 연산자는 변수의 값을 1씩 증가/감소시키는 단항 연산자입니다.

이들은 후위 형식을 가질 수 있습니다:

expr ++
expr --

접두사 형태와 마찬가지로:

++ expr
-- expr
**참고:** 제공된 HTML 코드에서 번역이 필요한 텍스트 요소가 없습니다. ` `, ` ` 태그 내의 `++`, `--` 연산자와 ` ` 내의 `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 + = 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
(C11부터)
(C23 이전)

alignof
(C23부터)

C++ 문서 참조: 증감 연산자