반환 형식

함수의 반환 형식은 함수에서 반환하는 값의 크기와 형식을 설정합니다. 구문 섹션의 type-specifier에 해당합니다.

구문

function-definition:
declaration-specifiersoptattribute-seqoptdeclaratordeclaration-listoptcompound-statement

/* attribute-seq는 Microsoft 전용 */

declaration-specifiers:
storage-class-specifierdeclaration-specifiersopt
type-specifierdeclaration-specifiersopt
type-qualifierdeclaration-specifiersopt

type-specifier:
void
char
short
int
__int8 /* Microsoft 전용 */
__int16 /* Microsoft 전용 */
__int32 /* Microsoft 전용 */
__int64 /* Microsoft 전용 */
long
long long
float
double
long double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name

type-specifier는 모든 기본, 구조체 또는 공용 구조체 형식을 지정할 수 있습니다.

함수 정의에 지정된 반환 형식은 프로그램의 다른 곳에서 선언된 함수의 반환 형식과 일치해야 합니다. 함수는 식을 포함하는 return 문이 실행될 때 값을 반환합니다. 식이 계산되고 반환 값 형식으로 변환되고(필요한 경우) 함수가 호출된 지점으로 돌아갑니다. 함수가 반환 형식 void로 선언되는 경우 식이 포함된 Return 문은 경고를 발생시키고 식은 계산되지 않습니다.

다음 예제에서는 함수 반환 값을 보여 줍니다.

typedef struct
{
    char name[20];
    int id;
    long class;
} STUDENT;

/* Return type is STUDENT: */

STUDENT sortstu( STUDENT a, STUDENT b )
{
    return ( (a.id < b.id) ? a : b );
}

이 예는 STUDENT 선언으로 typedef 형식을 정의하고 sortstu 함수가 STUDENT 반환 형식을 가지도록 정의합니다. 함수는 해당 구조체 인수 둘 중 하나를 선택하고 반환합니다. 함수에 대한 후속 호출에서 컴파일러는 인수 형식이 STUDENT인지 확인합니다.

참고

전체 구조체가 아니라 포인터를 구조체에 전달하면 효율성을 향상시킬 수 있습니다.

char *smallstr( char s1[], char s2[] )
{
    int i;

    i = 0;
    while ( s1[i] != '\0' && s2[i] != '\0' )
        i++;
    if ( s1[i] == '\0' )
        return ( s1 );
    else
        return ( s2 );
}

이 예제에서는 문자 배열에 대한 포인터를 반환하는 함수를 정의합니다. 함수는 두 문자 배열(문자열)을 인수로 사용하고 두 문자열 중 짧은 문자열에 대한 포인터를 반환합니다. 배열에 대한 포인터는 배열 요소의 처음을 가리키고 해당 형식을 갖고 있으므로 함수의 반환 형식은 char 형식에 대한 포인터입니다.

인수 및 반환 값에 대한 올바른 형식 검사를 사용할 수 있도록 프로토타입을 권장하지만, 이를 호출하기 전에 int 반환 형식의 함수를 선언할 필요가 없습니다.

참조

C 함수 정의