더북(TheBook)

4.4 삼항 연산자와 조건 연산자

삼항 연산자(ternary operator)if문처럼 두 가지 갈래 중 조건에 맞는 것을 골라서 리턴하는 표현식이다.

size_t size_min(size_t a, size_t b) {
  return (a < b) ? a : b;
}

&&|| 연산자와 마찬가지로 두 번째와 세 번째 피연산자는 꼭 필요할 때만 평가된다. tgmath.h 헤더 파일에 정의된 sqrt 매크로는 음이 아닌 값의 제곱근을 계산한다. 이 매크로에 음수를 지정해서 호출하면 도메인 에러(domain error)C가 발생한다.

#include <tgmath.h>

#ifdef __STDC_NO_COMPLEX__
# error "we need complex arithmetic"
#endif

double complex sqrt_real(double x) {
  return (x < 0) ? CMPLX(0, sqrt(-x)) : CMPLX(sqrt(x), 0);
}

이 함수에서 sqrt는 단 한 번만 호출되며, 인수는 절대 음수가 되지 않는다. 따라서 sqrt_real에서 오류가 발생할 일이 없다. sqrt에 잘못된 값이 전달될 일이 없기 때문이다.

복잡한 산술 연산을 수행하거나 그런 연산이 많을 때는 complex.h 헤더 파일을 사용해야 한다. tgmath.h에서는 이 헤더 파일을 직접 인클루드한다. 이에 대해서는 5.7.7절에서 자세히 소개한다.

앞의 예제는 전처리기 지시자(preprocessor directive)C를 사용하여 조건부 컴파일을 지정했다. #ifdef 구문은 _ _STDC_NO_COMPLEX_ _ 매크로가 정의된 경우에만 #error 조건이 적용되도록 설정한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.