C에서 i++ 대 ++i

Jinku Hu 2023년10월12일
  1. C에서++ii++표기법의 주요 차이점
  2. C에서 루프 문에 일반적으로 허용되는 스타일로++i 표기법 사용
C에서 i++ 대 ++i

이 기사에서는 C에서 접두사 증분 대 접미사 증분 연산자 (일명 ‘i ++‘대 ‘++ i’)를 사용하는 몇 가지 방법을 설명합니다.

C에서++ii++표기법의 주요 차이점

이 두 표기법의 기본 부분은 피연산자를 증가시키는 증가 단항 연산자++입니다. i, 1 씩 증가 연산자는 접두사++i로 피연산자 앞에 올 수도 있고 접두사 연산자 -i++로 피연산자 뒤에 올 수 있습니다.

표현식에서++연산자로 증가 된 변수 값을 사용하면 약간 비정상적인 동작이 발생합니다. 이 경우 접두사 및 접미사 증분은 다르게 작동합니다. 즉, 접두사 연산자는 값이 사용되기 전에 피연산자를 증가시키는 반면 접미사 연산자는 값이 사용 된 후에 피연산자를 증가시킵니다.

결과적으로i++표현식을 인수로 사용하는printf 함수는i 값이 1 씩 증가하기 전에 출력합니다. 반면에 접두사 증가 연산자++i가있는printf는 다음 예제 코드에서 보여 주듯이 첫 번째 반복에서 1이되는 증가 된 값을 인쇄합니다.

#include <stdio.h>
#include <stdlib.h>

int main() {
  int i = 0, j = 0;

  while ((i < 5) && (j < 5)) {
    /*
    postfix increment, i++
    the value of i is read and then incremented
    */
    printf("i: %d\t", i++);
    /*
    prefix increment, ++j
    the value of j is incremented and then read
    */
    printf("j: %d\n", ++j);
  }

  printf("At the end they have both equal values:\ni: %d\tj: %d\n\n", i, j);

  exit(EXIT_SUCCESS);
}

출력:

i: 0	j: 1
i: 1	j: 2
i: 2	j: 3
i: 3	j: 4
i: 4	j: 5
At the end they have both equal values:
i: 5	j: 5

C에서 루프 문에 일반적으로 허용되는 스타일로++i 표기법 사용

접미사 및 접두사 연산자는for 루프 문에서 사용할 때 동일한 기능 동작을 갖습니다. 아래 샘플 코드에서 두 개의 for반복이 실행되므로 k값이 동일하게 인쇄됩니다.

for루프에서 접두사 증분보다 접두사 증가를 사용하는 것이 성능 효율성이 더 좋다는 주장이 여러 가지 있지만 대부분의 애플리케이션에서 효과적인 시간 차이는 무시할 수 있습니다. 우리는 일반적으로 받아 들여지는 스타일로 선호하는 방법으로 접두사 연산자를 사용하는 습관을 가질 수 있습니다.

그러나 이미 접미사 표기법을 사용하고 있다면 해당 최적화 플래그와 함께 최신 컴파일러를 사용하면 비효율적 인 루프 반복이 자동으로 제거된다는 점을 고려하십시오.

#include <stdio.h>
#include <stdlib.h>

int main() {
  for (int k = 0; k < 5; ++k) {
    printf("%d ", k);
  }
  printf("\n");
  for (int k = 0; k < 5; k++) {
    printf("%d ", k);
  }
  printf("\n\n");

  exit(EXIT_SUCCESS);
}

출력:

0 1 2 3 4
0 1 2 3 4
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C Operator