Typ zwracany

Zwracany typ funkcji określa rozmiar i typ wartości zwracanej przez funkcję. Odpowiada type-specifier on sekcji Składnia:

Składnia

function-definition:
declaration-specifiersZdecydowaćattribute-seqZdecydowaćdeclaratordeclaration-listZdecydowaćcompound-statement

/* attribute-seq jest specyficzny dla firmy Microsoft */

declaration-specifiers:
storage-class-specifierdeclaration-specifiersZdecydować
type-specifierdeclaration-specifiersZdecydować
type-qualifierdeclaration-specifiersZdecydować

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

Może type-specifier określać dowolny podstawowy, strukturę lub typ unii.

Zwracany typ podany w definicji funkcji musi być zgodny z typem zwrotnym w deklaracjach funkcji w innym miejscu w programie. Funkcja zwraca wartość, gdy return jest wykonywana instrukcja zawierająca wyrażenie. Wyrażenie jest oceniane, konwertowane na typ wartości zwracanej w razie potrzeby i zwracane do punktu, w którym została wywołana funkcja. Jeśli funkcja jest zadeklarowana przy użyciu typu voidzwracanego , instrukcja return zawierająca wyrażenie generuje ostrzeżenie, a wyrażenie nie jest oceniane.

W poniższych przykładach przedstawiono wartości zwracane przez funkcję.

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 );
}

W tym przykładzie zdefiniowano STUDENT typ z deklaracją typedef i definiuje funkcję sortstu , która ma zwracać STUDENT typ. Funkcja wybiera i zwraca jeden z dwóch argumentów struktury. W kolejnych wywołaniach funkcji kompilator sprawdza, czy typy argumentów to STUDENT.

Uwaga

Wydajność zostałaby wzmocniona przez przekazanie wskaźników do struktury, a nie całej struktury.

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 );
}

W tym przykładzie zdefiniowano funkcję zwracającą wskaźnik do tablicy znaków. Funkcja przyjmuje dwie tablice znaków (ciągi) jako argumenty i zwraca wskaźnik do krótszego z dwóch ciągów. Wskaźnik do tablicy wskazuje pierwszy z elementów tablicy i ma jego typ; w związku z tym zwracany typ funkcji jest wskaźnikiem do wpisywania char.

Nie trzeba deklarować funkcji z int typem zwracanym przed ich wywołaniem, chociaż zalecane są prototypy, aby poprawne sprawdzanie typu argumentów i zwracanych wartości było włączone.

Zobacz też

Definicje funkcji języka C