Tipo restituito
Il tipo restituito di una funzione stabilisce le dimensioni e il tipo del valore restituito dalla funzione. Corrisponde a type-specifier
nella sezione Sintassi:
Sintassi
function-definition
:
declaration-specifiers
opt opt declarator
declaration-list
attribute-seq
compound-statement
/* attribute-seq
è specifico di Microsoft */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
optare
type-specifier
declaration-specifiers
optare
type-qualifier
declaration-specifiers
optare
type-specifier
:
void
char
short
int
__int8
/* Specifico di Microsoft */
__int16
/* Specifico di Microsoft */
__int32
/* Specifico di Microsoft */
__int64
/* Specifico di Microsoft */
long
long long
float
double
long double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name
type-specifier
può specificare qualsiasi tipo di unione, struttura o fondamentale.
Il tipo restituito fornito nella definizione di funzione deve corrispondere al tipo restituito nelle dichiarazioni della funzione in altre parti del programma. Una funzione restituisce un valore quando un'istruzione return
che contiene un'espressione viene eseguita. L'espressione viene valutata, convertita in un tipo di valore restituito se necessario e viene restituita al punto in cui la funzione è stata chiamata. Se una funzione viene dichiarata con tipo void
restituito , un'istruzione return contenente un'espressione genera un avviso e l'espressione non viene valutata.
Negli esempi seguenti vengono illustrati i valori restituiti dalla funzione.
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 );
}
Viene definito il tipo STUDENT
con una dichiarazione typedef
e viene definita la funzione sortstu
per avere il tipo restituito STUDENT
. La funzione selezionata e restituisce uno dei propri argomenti struttura. Nelle successive chiamate alla funzione, il compilatore controlla per verificare che i tipi di argomento siano STUDENT
.
Nota
L'efficienza risulta miglioratala passando di puntatori alla struttura, piuttosto che l'intera struttura.
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 );
}
Nell'esempio seguente viene definita una funzione che restituisce un puntatore a una matrice di caratteri. La funzione accetta due matrici di caratteri (stringhe) come argomenti e restituisce un puntatore alla più breve delle due stringhe. Un puntatore a un elemento punta al primo degli elementi della matrice e ha il suo tipo; pertanto, il tipo restituito della funzione è un puntatore al tipo char
.
Non è necessario dichiarare le funzioni con il tipo restituito int
prima di chiamarle, sebbene i prototipi siano consigliati in modo da consentire il controllo del tipo corretto per gli argomenti e i valori restituiti.