Zwracany typ
Typ zwracany przez funkcję określa rozmiar i typ wartości zwracanej przez funkcję i odpowiada specyfikatorowi typu w składni poniżej:
Składnia
function-definition:
declaration-specifiers optattribute-seq optdeclarator declaration-list optcompound-statement/* attribute-seq jest specyficzny dla firmy Microsoft * /
declaration-specifiers:
storage-class-specifier declaration-specifiers opttype-specifier declaration-specifiers opt
type-qualifier declaration-specifiers opt
specyfikator-typu :
pustychar
short
int
long
typ float
double
oznaczony
nieoznaczony
struct-or-union-specifier
enum-specifier
typedef-name
type-specifier może określić dowolny typ podstawowy strukturę lub unię.Jeżeli nie dołączono type-specifier, zakłada się, że zwracany typ to int.
Zwracany typ podany w definicji funkcji musi odpowiadać typowi zwracanemu w deklaracji funkcji gdziekolwiek w programie.Funkcja zwraca wartość gdy wyrażenie return zawierające wyrażenie jest wykonywane.Wyrażenie jest oceniane, w razie potrzeby konwertowane na typ zwracanej wartości, a następnie zwracane do punktu, w którym wywołano funkcję.Jeśli funkcja została zadeklarowana z typem zwracanym void, instrukcja zawierająca wyrażenie generuje ostrzeżenie i wyrażenie nie jest wykonywane.
Poniższe przykłady ilustrują funkcje zwracające wartości.
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 );
}
Ten przykład definiuje typ STUDENT z deklaracją typedef i definiuje funkcję sortstu zwracającą typ STUDENT.Funkcja wybiera i zwraca jeden z jej dwóch argumentów strukturalnych.W kolejnych wywołaniach funkcji kompilator sprawdza czy typy argumentów to STUDENT.
[!UWAGA]
Wydajność, zostałaby ulepszona poprzez przekazywanie 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 );
}
Ten przykład definiuje 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 na pierwszy element tablicy i ma jego typ; w efekcie zwracany typ funkcji to wskaźnik na typ char.
Nie trzeba deklarować funkcji, która zwraca int przed jej wywołaniem, chociaż zaleca się tworzenie prototypów dlatego, że zostanie włączona wtedy kontrola typów dla argumentów i wartości zwracanej.