#include <stdio.h>
int main(){
int a=5,b=-7,c=0,d;
d=++a && ++b || ++c;
printf("%d %d %d %d",a,b,c,d);
}
여기에서 c의 값은 1로 증가하지만 0을주는 이유는 무엇입니까 ??왜 사전 증가가 평가되지 않는가
#include <stdio.h>
int main(){
int a=5,b=-7,c=0,d;
d=++a && ++b || ++c;
printf("%d %d %d %d",a,b,c,d);
}
여기에서 c의 값은 1로 증가하지만 0을주는 이유는 무엇입니까 ??왜 사전 증가가 평가되지 않는가
|| 왼쪽 편이 true로 평가되면 오른쪽 편을 평가하지 않습니다. 귀하의 예에서,
++a && ++b
은 0으로 평가되며, 사실로 취급됩니다. 따라서 지연 평가 규칙에 따라 ++c
은 완전히 무시됩니다.
단락의 원인입니다. a && b
이있는 경우 이 true 인 경우에만 b
이 계산됩니다. 마찬가지로 a || b
인 경우 b
은 a
이 거짓 인 경우에만 평가됩니다.
++a && ++b || ++c
그룹의 경우 (++a && ++b) || ++c
입니다. 먼저 ++a
이 평가되고 사실이므로 ++b
이 평가되며 그 또한 마찬가지입니다. 이 시점에서 ||
연산자의 결과가 참임을 확신하므로 평가가 중지되므로 ++c
은 평가되지 않습니다.
[(부울) 단락 회로 평가] (https://en.wikipedia.org/wiki/Short-circuit_evaluation)가 다시 나타납니다. – alk
첫 번째 부분 인'&&'가 이미'true'이므로 실행하지 않는'||'연산자로 인해서 만 알 수 있습니다. 따라서'|| ++ c'는 중요하지 않습니다. –
@ AnteJablanAdamović 왜 그런가? –