C Language
부작용
수색…
사전 / 증분 / 감소 연산자
C에는 매우 일반적인 혼동의 원천 인 '++'와 '-'라는 단항 연산자가 두 개 있습니다. 연산자 ++
는 증가 연산자 라고하고 연산자 --
는 감소 연산자 라고합니다. 이 두 가지 모두 접두사 형식이나 접미사 형식으로 사용할 수 있습니다. ++
연산자에 대한 접두사 형식의 구문은 ++operand
이고 postfix 형식의 구문은 operand++
입니다. 접두사 형식으로 사용되면 피연산자가 먼저 1
씩 증가하고 피연산자의 결과 값이 표현식 평가에 사용됩니다. 다음 예제를 고려하십시오.
int n, x = 5;
n = ++x; /* x is incremented by 1(x=6), and result is assigned to n(6) */
/* this is a short form for two statements: */
/* x = x + 1; */
/* n = x ; */
후위 형식에서 사용되면 표현식에서 피연산자의 현재 값이 사용 된 다음 피연산자의 값이 1
씩 증가합니다. 다음 예제를 고려하십시오.
int n, x = 5;
n = x++; /* value of x(5) is assigned first to n(5), and then x is incremented by 1; x(6) */
/* this is a short form for two statements: */
/* n = x; */
/* x = x + 1; */
감분 연산자의 작업은 --
유사하게 이해 될 수있다.
다음 코드는 각 코드가 수행하는 작업을 보여줍니다.
int main()
{
int a, b, x = 42;
a = ++x; /* a and x are 43 */
b = x++; /* b is 43, x is 44 */
a = x--; /* a is is 44, x is 43 */
b = --x; /* b and x are 42 */
return 0;
}
위의 결과에서 포스트 연산자는 변수의 현재 값을 반환 한 다음 수정하지만, 사전 연산자는 변수를 수정 한 다음 수정 된 값 을 반환합니다.
C의 모든 버전에서 사전 및 사후 연산자의 평가 순서는 정의되지 않았으므로 다음 코드는 예기치 않은 결과를 반환 할 수 있습니다.
int main()
{
int a, x = 42;
a = x++ + x; /* wrong */
a = x + x; /* right */
++x;
int ar[10];
x = 0;
ar[x] = x++; /* wrong */
ar[x++] = x; /* wrong */
ar[x] = x; /* right */
++x;
return 0;
}
성명에서 단독으로 사용되는 경우 선행 후 작업자를 사용하는 것이 좋습니다. 위의 코드를보십시오.
또한 함수가 호출 될 때 함수가 실행되기 전에 인수에 대한 모든 부작용이 발생해야합니다.
int foo(int x)
{
return x;
}
int main()
{
int a = 42;
int b = foo(a++); /* This returns 43, even if it seems like it should return 42 */
return 0;
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow