조건식 연산자Conditional-Expression Operator

C에는 삼항 연산자인 조건식 연산자가 하나 있습니다(? :).C has one ternary operator: the conditional-expression operator (? :).

구문Syntax

conditional-expression:conditional-expression:
logical-OR-expressionlogical-OR-expression

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

logical-OR-expression은 정수 계열, 부동 소수점 또는 포인터 형식이어야 합니다.The logical-OR-expression must have integral, floating, or pointer type. 식은 0과 같은지 여부의 측면에서 평가됩니다.It is evaluated in terms of its equivalence to 0. 시퀀스 위치가 logical-OR-expression 뒤에 나옵니다.A sequence point follows logical-OR-expression. 피연산자에 대한 평가는 다음과 같이 진행됩니다.Evaluation of the operands proceeds as follows:

  • logical-OR-expression이 0과 같지 않은 경우 expression이 평가됩니다.If logical-OR-expression is not equal to 0, expression is evaluated. 식의 평가 결과는 비터미널 expression에서 제공됩니다.The result of evaluating the expression is given by the nonterminal expression. 즉, logical-OR-expression이 true인 경우에만 expression이 평가됩니다.(This means expression is evaluated only if logical-OR-expression is true.)

  • logical-OR-expression이 0과 같은 경우 conditional-expression이 평가됩니다.If logical-OR-expression equals 0, conditional-expression is evaluated. 식의 결과는 conditional-expression의 값입니다.The result of the expression is the value of conditional-expression. 즉, logical-OR-expression이 false인 경우에만 conditional-expression이 평가됩니다.(This means conditional-expression is evaluated only if logical-OR-expression is false.)

    expression 또는 conditional-expression 중에서 하나만 평가되고 둘 다 평가되지는 않습니다.Note that either expression or conditional-expression is evaluated, but not both.

    조건부 연산의 결과 형식은 다음과 같이 expression 또는 conditional-expression 피연산자의 형식에 따라 달라집니다.The type of the result of a conditional operation depends on the type of the expression or conditional-expression operand, as follows:

  • expression 또는 conditional-expression이 정수 계열 또는 부동 소수점 형식인 경우(형식이 서로 다를 수 있음) 연산자는 일반적인 산술 변환을 수행합니다.If expression or conditional-expression has integral or floating type (their types can be different), the operator performs the usual arithmetic conversions. 결과 형식은 변환 후의 피연산자 형식과 동일합니다.The type of the result is the type of the operands after conversion.

  • expressionconditional-expression이 둘 다 동일한 구조체, 공용 구조체 또는 포인터 형식인 경우 결과의 형식은 동일한 구조체, 공용 구조체 또는 포인터 형식입니다.If both expression and conditional-expression have the same structure, union, or pointer type, the type of the result is the same structure, union, or pointer type.

  • 피연산자가 둘 다 void 형식인 경우 결과의 형식은 void입니다.If both operands have type void, the result has type void.

  • 피연산자 중 하나가 임의의 형식의 개체에 대한 포인터이고 다른 피연산자가 void에 대한 포인터인 경우, 개체에 대한 포인터가 void에 대한 포인터로 변환되고 결과는 void에 대한 포인터입니다.If either operand is a pointer to an object of any type, and the other operand is a pointer to void, the pointer to the object is converted to a pointer to void and the result is a pointer to void.

  • expression 또는 conditional-expression이 포인터이고 다른 피연산자가 값이 0인 상수 식인 경우 결과의 형식은 포인터 형식입니다.If either expression or conditional-expression is a pointer and the other operand is a constant expression with the value 0, the type of the result is the pointer type.

    포인터에 대한 형식 비교에서 포인터가 가리키는 형식의 모든 형식 한정자(const 또는 volatile)는 중요하지 않지만 결과 형식은 조건의 두 구성 요소에서 한정자를 상속합니다.In the type comparison for pointers, any type qualifiers (const or volatile) in the type to which the pointer points are insignificant, but the result type inherits the qualifiers from both components of the conditional.

예제Examples

다음 예제에서는 조건 연산자를 사용하는 방법을 보여 줍니다.The following examples show uses of the conditional operator:

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

이 예제에서는 i의 절대값을 j에 할당합니다.This example assigns the absolute value of i to j. i가 0보다 작으면 -ij에 할당되고,If i is less than 0, -i is assigned to j. i가 0보다 크거나 같으면 ij에 할당됩니다.If i is greater than or equal to 0, i is assigned to j.

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

이 예제에서는 f1f2 함수와 xy 변수가 선언되었습니다.In this example, two functions, f1 and f2, and two variables, x and y, are declared. 프로그램의 뒷부분에서 두 변수의 값이 같으면 f1 함수가 호출되고,Later in the program, if the two variables have the same value, the function f1 is called. 그렇지 않으면 f2가 호출됩니다.Otherwise, f2 is called.

참고 항목See Also

조건 연산자: ? :Conditional Operator: ? :