Поделиться через


Возвращаемый тип

Возвращаемый тип функции задает размер и тип значения, возвращаемого функцией, и соответствует спецификатору типа в приведенном ниже синтаксисе.

Синтаксис

  • определение-функции:
    спецификаторы-объявления необ последовательность-атрибутов необ декларатор список-объявлений необ составной-оператор

    /* Компонент последовательность-атрибутов относится только к системам Microsoft */

  • спецификаторы-объявления:
    спецификатор-класса-хранения спецификаторы-объявления необ

    спецификатор-типа спецификаторы-объявления необ

    квалификатор-типа спецификаторы-объявления необ

  • спецификатор-типа:
    void

    char

    short

    целое число

    long

    float

    double

    signed

    без знака

    спецификатор-struct-или-union

    спецификатор-enum

    имя-typedef

Компонент спецификатор-типа может задавать любой базовый тип, тип структуры или тип объединения. Если спецификатор-типа не включен, предполагается возвращаемый тип int.

Возвращаемый тип, указанный в определении функции, должен соответствовать возвращаемому типу в объявлениях функций в любом другом месте программы. Функция возвращает значение при выполнении оператора 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