(d != 0 && n / d > 0)
위와 같이 사용하면 숫자가 0으로 나눠지는 것을 방지 할 수 있다! 흠.. 신기하군..
+
Q 3.6 조건에 따라서 &&, || 연산자의 오른쪽이 평가되지 않는다고 보장할 수 있
나요?
Answer 보장합니다.
if (d != 0 && n / d > 0) {
/* average is greater than 0 */
}
이나,
if (p == NULL || *p == '\0') {
/* no string */
}
는 C 코드에서 매우 자주 볼 수 있는 것입니다. 이는 이른바 ‘short circuit’
이라고 합니다. 만약 이 ‘short circuit’이 없다면, 첫번째 예제의 &&의 오
른쪽에서, d가 0일 경우, 0으로 나누는, ‘divide by 0’ 에러가 발생합니다.
두번째 예제에서는, 만약 p가 널 포인터일 경우, 존재하지 않는 메모리 공
간을 참조하는 에러가 발생할 것입니다.
CHAPTER 3. EXPRESSIONS 64
References [ANSI] x 3.3.13, x 3.3.14
[C89] x 6.3.13, x 6.3.14
[H&S] x 7.7 pp. 217–8
출처 : http://achiven.tistory.com/entry/c-faq-한글판
http://www.cinsk.org/cfaqs/index-ko.html
위와 같이 사용하면 숫자가 0으로 나눠지는 것을 방지 할 수 있다! 흠.. 신기하군..
+
Q 3.6 조건에 따라서 &&, || 연산자의 오른쪽이 평가되지 않는다고 보장할 수 있
나요?
Answer 보장합니다.
if (d != 0 && n / d > 0) {
/* average is greater than 0 */
}
이나,
if (p == NULL || *p == '\0') {
/* no string */
}
는 C 코드에서 매우 자주 볼 수 있는 것입니다. 이는 이른바 ‘short circuit’
이라고 합니다. 만약 이 ‘short circuit’이 없다면, 첫번째 예제의 &&의 오
른쪽에서, d가 0일 경우, 0으로 나누는, ‘divide by 0’ 에러가 발생합니다.
두번째 예제에서는, 만약 p가 널 포인터일 경우, 존재하지 않는 메모리 공
간을 참조하는 에러가 발생할 것입니다.
CHAPTER 3. EXPRESSIONS 64
References [ANSI] x 3.3.13, x 3.3.14
[C89] x 6.3.13, x 6.3.14
[H&S] x 7.7 pp. 217–8
출처 : http://achiven.tistory.com/entry/c-faq-한글판
http://www.cinsk.org/cfaqs/index-ko.html