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-specifiers
Zdecydowaćattribute-seq
Zdecydowaćdeclarator
declaration-list
Zdecydowaćcompound-statement
/* attribute-seq
jest specyficzny dla firmy Microsoft */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
Zdecydować
type-specifier
declaration-specifiers
Zdecydować
type-qualifier
declaration-specifiers
Zdecydować
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 void
zwracanego , 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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla