본문으로 이동

미디어위키 1.45 안정화가 거의 끝났습니다. 다만 Flow 확장 기능 관련 이슈가 있어서 대체하는 작업을 수행할 계획입니다.

  1. 큰숲백과:청사진에서 위키 발전의 대략적인 방향성을 제시했습니다. 의견이 있으신 분은 큰숲백과토론:청사진에서 의견을 남겨주시면 좋겠습니다.
  2. 기능상의 오류로 지원하지 않고 있는 기능에 대해서는 큰숲백과토론:이슈 트래커에 요약했습니다. 참고하시기 바랍니다.
  3. 데이터베이스 덤프 받고싶으신 분은 큰숲백과 가입 후에 사용자토론:Bigforest에 의견 남겨주시면 ftp 주소, 계정, 비밀번호를 특수:EmailUser를 통해서 공개할 예정입니다.

작은숲:위키노트/초보자를 위한 C 언어 강의/증가·감소 연산자: 두 판 사이의 차이

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
잔글 문자열 찾아 바꾸기 - "</source>" 문자열을 "</syntaxhighlight>" 문자열로
잔글 Utolee90님이 위키노트:초보자를 위한 C 언어 강의/증가·감소 연산자 문서를 넘겨주기를 만들지 않고 작은숲:위키노트/초보자를 위한 C 언어 강의/증가·감소 연산자 문서로 이동했습니다: 위키노트 문서 작은숲으로 이동
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
47번째 줄: 47번째 줄:
당연한 이야기이지만, 위 두 문장은 다르다. 저 두 문장을 각각 실행하고 난 다음의 a의 값은 어떻게 바뀔까? 처음 문장에서는 a의 값이 바뀌지 않지만, 두번째 문장에서는 a의 값이 1 증가된다. 즉, 출력되는 값은 같을 지 모르지만, 저 두 문장이 실행되고 난 다음에는 결과가 다르다. 가끔 이 부분을 혼동하는 경우도 있는데 증가·감소 연산자는 증가·감소한 값을 변수에 저장한다.
당연한 이야기이지만, 위 두 문장은 다르다. 저 두 문장을 각각 실행하고 난 다음의 a의 값은 어떻게 바뀔까? 처음 문장에서는 a의 값이 바뀌지 않지만, 두번째 문장에서는 a의 값이 1 증가된다. 즉, 출력되는 값은 같을 지 모르지만, 저 두 문장이 실행되고 난 다음에는 결과가 다르다. 가끔 이 부분을 혼동하는 경우도 있는데 증가·감소 연산자는 증가·감소한 값을 변수에 저장한다.
{{초보자를 위한 C 언어 강의}}
{{초보자를 위한 C 언어 강의}}
[[분류:공유]]
[[분류:위키노트/공유]]
[[분류:C 언어]]{{퍼온문서|위키노트|{{#invoke:string|replace|위키노트:|}}}}[[분류:위키노트에서 가져온 문서]]
[[분류:C 언어]]{{퍼온문서|위키노트|{{#invoke:string|replace|위키노트:|}}}}[[분류:위키노트에서 가져온 문서]]

2022년 5월 7일 (토) 19:24 기준 최신판

C 언어의 연산자 중에 재미있는 것이 증가·감소 연산자이다. 증가 연산자는 ++이라고 쓰고, 감소 연산자는 --이다. 증가 연산자는 피연산자의 값을 하나 증가시키는 역할을 하고, 감소 연산자는 값을 하나 감소시키는 역할을 한다. 즉, 다음과 같다.

i++;    /* => i = i + 1; */
i--;    /* => i = i - 1; */

C 언어에 익숙한 사람들은 위의 예에서 나오는 뒤의 수식 대신 증가·감소 연산자를 많이 사용하는데 거기에는 이유가 있다.

  • 증가·감소 연산자를 사용하게 되면 코드가 한결 간결해진다. 따라서, 가독성이 높아진다.
  • 증가·감소 연산자는 실제로 기계어와 비슷한 형태이므로, 효율적으로 기계어 코드를 생성할 수 있다. 실제로 컴파일 후 실행 속도도 더 빠르다.

하지만, 이 증가·감수 연산자를 사용하는데는 한가지 골치 아픈 문제가 있다. 다름 아닌, 전위형이냐 후위형이냐에 따른 문제이다. 다음의 예를 보도록 하자.

a = ++b + c;
a = b++ + c;

이 두 연산식은 같아 보인다. 다른 것이 있다면 증가 연산자가 b라는 변수 앞에 왔는냐, 뒤에 왔느냐는 것이 다르다. 증가·감소 연산자가 변수 앞에 오게 되면, 이것을 전위형이라고 부른다. 이렇게 전위형 연산자가 되면 b의 값을 연산식에 사용하기 전에 값을 증가시킨다. 반대로 변수 뒤에 오게 되면 후위형이라고 부르는데, 이렇게 후위형 연산자의 경우는 수식의 계산이 끝난 다음에 값을 증가시킨다. 즉, 전위형 연산자의 경우 아래와 같이 두 수식으로 쓸 수 있을 것입니다.

b = b + 1;
a = b + c;

반대로 후위형 연산자는

a = b + c;
b = b + 1;

이와 같이 전위형이냐 후위형이냐에 따라 수식의 연산 결과는 달라진다. 따라서, 전위형, 후위형을 적절하게 사용하는 것은 상당히 중요한 문제이다. 수식 내에서 전위형, 후위형 연산자를 잘못 사용했을 때는 컴파일러도 오류를 찾아주지를 못한다. 애상치 못한 심각한 버그가 될 수도 있다. 하나의 예를 보도록 하자.

void main()
{    int i = 1;
    while (i <= 10) {
        printf("%d\n", i);
        i++;
    }
}

위의 예에서 i++;++i;라고 해도 똑같은 결과를 얻을 수 있다. 증가 연산자가 단독으로 쓰였기 때문이다. 하지만 아래의 예에서는 다른 결과를 보일 것이다.

void main()
{    int i = 1;
    while (++i <= 10)
        printf("%d\n", i);
}

이와 같이 증가 연산자가 문장 내에서 사용됐다면 이것이 전위형인지 후위형인지에 따라 결과는 달라진다. 전위형으로 쓰였다면 2부터 출력되고, 반대로 후위형으로 쓰이면 1부터 출력이 된다. 또, 얼마까지 출력이 될 것인가도 달라진다. 한번 생각해보도록 하자. 아직 증가·감소 연산자에 익숙치 않다면, 증가·감소 연산자가 연산식 내에 나오면 그 문장을 여러 개의 문장으로 나눠서 생각해 보자. 이 방법은 증가·감소 연산자가 어떤 식으로 동작을 하는지 알 수 있도록 도와줄 것이다. 그리고 한가지 더! 아래 두 문장을 비교해보자.

printf("%d\n", a + 1);
printf("%d\n", a++);

당연한 이야기이지만, 위 두 문장은 다르다. 저 두 문장을 각각 실행하고 난 다음의 a의 값은 어떻게 바뀔까? 처음 문장에서는 a의 값이 바뀌지 않지만, 두번째 문장에서는 a의 값이 1 증가된다. 즉, 출력되는 값은 같을 지 모르지만, 저 두 문장이 실행되고 난 다음에는 결과가 다르다. 가끔 이 부분을 혼동하는 경우도 있는데 증가·감소 연산자는 증가·감소한 값을 변수에 저장한다.

이 작은숲 문서의 출처는 위키노트의 위키노트: 문서입니다.