http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=164559653
#include <stdio.h>
int three_comp(int a, int b, int c)
{
return ( a > b ? a :
b > c ? b : c);
// 아랫줄에 괄호를 써줘도 결과는 마찬가지
// return ( a > b ? a :
// ( b > c ? b : c));
}
void main()
{
int iValue = 0;
iValue = three_comp(10, 20, 30);
printf("10 20 30 : %d\n", iValue);
iValue = three_comp(10, 30, 20);
printf("10 30 20 : %d\n", iValue);
iValue = three_comp(20, 10, 30);
printf("20 10 30 : %d\n", iValue);
iValue = three_comp(20, 30, 10);
printf("20 30 10 : %d\n", iValue);
iValue = three_comp(30, 10, 20);
printf("30 10 20 : %d\n", iValue);
iValue = three_comp(30, 20, 10);
printf("30 20 10 : %d\n", iValue);
}
아래 링크를 클릭한 후 10번을 읽어보세요.
10. 가급적이면 조건 수식 안에 중첩하여 다시 조건 수식을 사용하지 않는다.
http://cafe.daum.net/c-study/4tdN/11
풀어 쓰면 이런 말이 되겠죠.
if (a > b) return a;
else {
if (b > c) return b;
else return c:
}
즉 a가 크면 뒤를 비교하지도 않고 바로 그 값을 리턴하고 조건문을 탈출합니다.
만약 위 프로그램 내에서 아래의 표현처럼 괄호를 써줬다 하더라도
그 괄호 내의 연산을 수행하기 전에 b값만 우선 비교하고 b값보다 크면 탈출하는 구조인가 봅니다.
그것이 그 함수를 제작한 사람의 실수인지 c의 특성인지는 알 수 없지만 현실적인 문제이니
위와 같이 3개의 크기를 상호 비교하는 용도로는 쓰지 않아야 하겠습니다.