다음 수식은 a와 b의 최댓값을 계싼하여 z에 저장한다.    


if( a>b)

        z=a;

    else

        z=b;


ternary operator "?:"는 이것과 구조가 비슷한 다른 방법을 제공한다.

다음의 수식에서


expr1 ? expr2 : expr3


expr1이 먼저 계산 된다. 만약 그것이 0이 아니면(참이면)expr2의 값이 계산되고 그것이 그 조건문의 값이 된다. 그렇지 않으면 expr3이 계산되고 그 값이 조건문의 값이 된다. 따라서 z는 a와 b의 최댓값이 된다.


 z = (a > b)? a: b; /* z=max(a,b) */


조건문은 하나의 수식이며 수식이 쓰일수 있는 곳이라면 어디든 사용될수 있다는 점에 주의 해야 한다

만약 expr2와 expr3의 형이 다른경우에 그 결과는 이 장 앞에서 서술한 바와 같이 변환법칙을 따른다.예를들어 f가 float이고 n이 int이면 다음의 수식은 n이 양인지에 관계없이 float형을 갖는다.


(n > 0) ? f :n


위의 지정문에서 처럼 ?: 의 우선순위는 매우 낮기 때문에 조건문의 첫번쨰 수식의 괄호는 필요하지 않다. 그러나 수식의 조건부를 보기쉽게 해 주기 때문에 사용하는 것이 좋다.

조건문은 가끔 간결한 코드를 생성하게 한다. 예를 들어 다음 루프는 n개 원소를 가진 배열의 원소를 가진 배열의 원소를 한줄당 10개씩 인쇄하는데 원소 사이에는 빈칸이 하나씩 들어가고 각 행의 끝에는 행바꿈 문자가 들어가게 된다


for(i=0;i<n;i++)

        printf("%6d%c", a[i], (i%10==9 || i==n-l)) ? '\n' : ' ');


행바꿈은 매 10개 원소마다 그리고 n번쨰 원소에 인쇄된다. 다른 모든 원소 다음에는 공란이 한 개 인쇄된다. 이방법은 꼼수처럼 보이지만 if-else구문을 사용하는것보다 훨씬 압축적인 좋은방법이다. 또 하나의 좋은예는 다음과 같다.


 printf("You have %d item%s.\n",n,n==1 ? " " : "S");



예제 2-10 대문자를 소문자로 바꾸는 함수 lower를 if-else 대신 조건문을 써서 다시 작성하라.


*if문을 다른방법으로 하는방법을 처음 알았다!