조건식 연산자

C에는 삼항 연산자인 조건식 연산자가 하나 있습니다( ? : ).

구문

conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression

logical-OR-expression은 정수 계열, 부동 소수점 또는 포인터 형식이어야 합니다. 식은 0과 같은지 여부의 측면에서 평가됩니다. 시퀀스 위치가 logical-OR-expression 뒤에 나옵니다. 피연산자에 대한 평가는 다음과 같이 진행됩니다.

  • logical-OR-expression이 0과 같지 않은 경우 expression이 평가됩니다. 식의 평가 결과는 비터미널 expression에서 제공됩니다. (즉, expression이 true인 경우에만 logical-OR-expression이 평가됩니다.)

  • logical-OR-expression이 0이면 conditional-expression이 평가됩니다. 식의 결과는 conditional-expression의 값입니다. (즉, conditional-expression이 false인 경우에만 logical-OR-expression이 평가됩니다.)

효과는 expression 또는 conditional-expression 중 하나이지만 둘 다 평가되지는 않습니다.

조건부 연산의 결과 형식은 다음과 같이 expression 또는 conditional-expression 피연산자의 형식에 따라 달라집니다.

  • expression 또는 conditional-expression이 정수 계열 또는 부동 소수점 형식인 경우(형식이 서로 다를 수 있음) 연산자는 일반적인 산술 변환을 수행합니다. 결과 형식은 변환 후의 피연산자 형식과 동일합니다.

  • expressionconditional-expression이 둘 다 동일한 구조체, 공용 구조체 또는 포인터 형식인 경우 결과의 형식은 동일한 구조체, 공용 구조체 또는 포인터 형식입니다.

  • 피연산자가 둘 다 void 형식인 경우 결과의 형식은 void입니다.

  • 피연산자 중 하나가 임의의 형식의 개체에 대한 포인터이고 다른 피연산자가 void에 대한 포인터인 경우, 개체에 대한 포인터가 void에 대한 포인터로 변환되고 결과는 void에 대한 포인터입니다.

  • expression 또는 conditional-expression이 포인터이고 다른 피연산자가 값이 0인 상수 식인 경우 결과의 형식은 포인터 형식입니다.

포인터에 대한 형식 비교에서 포인터가 가리키는 형식의 모든 형식 한정자( const 또는 volatile )는 중요하지 않지만 결과 형식은 조건의 두 구성 요소에서 한정자를 상속합니다.

다음 예제에서는 조건 연산자를 사용하는 방법을 보여 줍니다.

j = ( i < 0 ) ? ( -i ) : ( i );

이 예제에서는 i의 절대값을 j에 할당합니다. i가 0보다 작으면 -ij에 할당되고, i가 0보다 크거나 같으면 ij에 할당됩니다.

void f1( void );
void f2( void );
int x;
int y;
    .
    .
    .
( x == y ) ? ( f1() ) : ( f2() );

이 예제에서는 f1f2 함수와 xy 변수가 선언되었습니다. 프로그램의 뒷부분에서 두 변수의 값이 같으면 f1 함수가 호출되고, 그렇지 않으면 f2가 호출됩니다.

참조

조건 연산자: ? :