함수 호출Function Calls

함수 호출은 컨트롤 및 인수(있는 경우)를 함수에 전달하는 다음 형식의 식입니다.A function call is an expression that passes control and arguments (if any) to a function and has the form:

expression (expression-listopt)expression (expression-listopt)

여기서 expression은 함수 이름이거나 함수 주소로 계산되며, expression-list는 쉼표로 구분된 식 목록입니다.where expression is a function name or evaluates to a function address and expression-list is a list of expressions (separated by commas). 두 번째 식의 값은 함수로 전달되는 인수입니다.The values of these latter expressions are the arguments passed to the function. 함수가 값을 반환하지 않는 경우에는 void를 반환하는 함수로 선언합니다.If the function does not return a value, then you declare it to be a function that returns void.

함수가 호출 전에 선언되었는데 매개 변수와 관련한 정보는 제공되지 않으면 선언되지 않은 인수에 대해서는 일반적인 산술 변환이 진행됩니다.If a declaration exists before the function call, but no information is given concerning the parameters, any undeclared arguments simply undergo the usual arithmetic conversions.

참고

함수 인수 목록의 식은 원하는 순서로 계산할 수 있으므로 다른 인수로부터의 의도하지 않은 결과로 인해 값이 변경될 수 있는 인수의 경우 정의되지 않은 값을 포함합니다.The expressions in the function argument list can be evaluated in any order, so arguments whose values may be changed by side effects from another argument have undefined values. 함수 호출 연산자로 정의되는 시퀀스 위치를 통해 보장되는 사항은, 호출된 함수로 컨트롤이 전달되기 전에 인수 목록의 모든 의도하지 않은 결과가 평가된다는 것뿐입니다.The sequence point defined by the function-call operator guarantees only that all side effects in the argument list are evaluated before control passes to the called function. 스택에서 인수가 푸시되는 순서는 별개의 사항입니다. 자세한 내용은 시퀀스 위치를 참조하세요.(Note that the order in which arguments are pushed on the stack is a separate matter.) See Sequence Points for more information.

함수 호출의 요구 사항은 괄호 앞의 식이 함수 주소로 계산되어야 한다는 것뿐입니다.The only requirement in any function call is that the expression before the parentheses must evaluate to a function address. 즉, 함수 포인터 식을 통해 함수를 호출할 수 있습니다.This means that a function can be called through any function-pointer expression.

Example

이 예제에서는 switch 문에서 호출되는 함수 호출을 보여 줍니다.This example illustrates function calls called from a switch statement:

int main()  
{  
    /* Function prototypes */  

    long lift( int ), step( int ), drop( int );  
    void work( int number, long (*function)(int i) );  

    int select, count;  
    .  
    .  
    .  
    select = 1;  
    switch( select )   
    {  
        case 1: work( count, lift );  
                break;  

        case 2: work( count, step );  
                break;  

        case 3: work( count, drop );  
                /* Fall through to next case */  
        default:  
                break;  
    }  
}  

/* Function definition */  

void work( int number, long (*function)(int i) )  
{  
    int i;  
    long j;  

    for ( i = j = 0; i < number; i++ )  
            j += ( *function )( i );  
}  

이 예제에서는 main의 다음 함수 호출이In this example, the function call in main,

work( count, lift );  

정수 변수 countlift 함수의 주소를 work 함수로 전달합니다.passes an integer variable, count, and the address of the function lift to the function work. 함수 식별자가 포인터 식으로 계산되므로 함수 주소는 단순히 함수 식별자를 제공하는 방식으로 전달됩니다.Note that the function address is passed simply by giving the function identifier, since a function identifier evaluates to a pointer expression. 이러한 방식으로 함수 식별자를 사용하려면 식별자를 사용하기 전에 함수를 선언하거나 정의해야 합니다. 그지 않으면 식별자가 식별되지 않습니다.To use a function identifier in this way, the function must be declared or defined before the identifier is used; otherwise, the identifier is not recognized. 이 경우에는 work에 대한 프로토타입이 main 함수 시작 부분에 제공됩니다.In this case, a prototype for work is given at the beginning of the main function.

functionwork 매개 변수는 int 인수 하나를 가져와 long 값을 반환하는 함수에 대한 포인터로 선언됩니다.The parameter function in work is declared to be a pointer to a function taking one int argument and returning a long value. 매개 변수 이름을 묶는 괄호는 필수 항목입니다. 괄호가 없으면 선언은 long 값으로 포인터를 반환하는 함수를 지정합니다.The parentheses around the parameter name are required; without them, the declaration would specify a function returning a pointer to a long value.

work 함수는 다음 함수 호출을 사용하여 for 루프 내에서 선택한 함수를 호출합니다.The function work calls the selected function from inside the for loop by using the following function call:

( *function )( i );  

이 경우 단일 인수 i가 호출된 함수로 전달됩니다.One argument, i, is passed to the called function.

참고 항목See Also

함수Functions