[ 공 부 ]/[ C ]

[ C ] SCE ( Short - Circuit Evaluation )

HiStar__ 2020. 8. 20. 19:02

문 제

 

  • 논리연산자 SCE ( Short - Circuit Evaluation )

 

설 명

#include <stdio.h>

int main() {
	int A{ 1 }, B{ 0 };
	int result;

	result = (B && ++A);
	printf(" result : %d, A : %d \n", result, A);

	result = (A || ++B);
	printf(" result : %d, B : %d \n", result, B);

	return 0;
}

 

위의 코드를 실행 시킨다면,

 

위의 결과가 나온다. A : 1, B : 0
전위 증가를 한다면, A : 2, B : 1의 결과가 나와야 한다.

 

이유는, SCE 때문이다. 

&& 의 경우, &&의 왼쪽에 있는 피연산자가 0이면, 오른편의 피연산자와 상관없이 결과는 0이다.
|| 의 경우, ||의 왼쪽에 있는 피연산자가 1이면, 오른편의 피연산자와 상관없이 결과는 1이다.

C언어에서 이러한 상황에서 오른쪽에 있는 피연산자를 실행하지 않는다고 한다.
이를 SCE라고 한다.
이렇듯 앞에 값으로 인하여 연산의 결과가 나올 경우, 오른쪽에 있는 피연산자가 실행 되지 않는다는 점을 인지하고
구현을 해야한다.

 

그렇다면, 왼쪽의 피연산자가 결과에 상관이 없을 경우에는, 오른쪽에 피연산자가 재대로 실행되는지 확인해 보았다.

#include <stdio.h>

int main() {
	int A{ 1 }, B{ 0 };
	int result;

	result = (A && ++B);
	printf(" result : %d, B : %d \n", result, B);

	A = 1;
	B = 0;

	result = (B || ++A);
	printf(" result : %d, A : %d \n", result, A);

	return 0;
}

위의 코드를 실행 시킨다면, 

오른쪽에 있는 피연산자가 정상적으로 실행되는 것을 알 수 있다.

 

이렇듯 왼쪽 피연산자를 통하여 결과가 나올 경우, 오른쪽 피연산자가 실행되지 않을 수 있는 것을 인지 하고

구현해야 한다.

 

출 처

[ 참고 서적 ] : [오렌지 미디어] 난 정말 C Programming을 공부한 적이 없다구요!