Udostępnij za pośrednictwem


Zwracany typ

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

Składnia

function-definition:
declaration-specifiersopt opt attribute-seq declarator declaration-list 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 /* Specyficzne dla firmy Microsoft */
__int16 /* Specyficzne dla firmy Microsoft */
__int32 /* Specyficzne dla firmy Microsoft */
__int64 /* Specyficzne dla firmy Microsoft */
long
long long
float
double
long double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name

Element type-specifier może określać dowolny typ podstawowy, struktury lub unii.

Zwracany typ podany w definicji funkcji musi odpowiadać typowi zwracanemu w deklaracjach funkcji w innym miejscu w programie. Funkcja zwraca wartość, gdy return jest wykonywana instrukcja zawierająca wyrażenie. Wyrażenie jest obliczane, konwertowane na zwracany typ wartości w razie potrzeby i zwracane do punktu, w którym została wywołana funkcja. Jeśli funkcja jest zadeklarowana z typem voidzwracanym , instrukcja return zawierająca wyrażenie generuje ostrzeżenie, a wyrażenie nie jest oceniane.

W poniższych przykładach przedstawiono zwracane wartości funkcji.

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 zdefiniowano 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ść byłaby zwiększona 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 typu char.

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

Zobacz też

Definicje funkcji języka C