Condividi tramite


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-specifiersopt opt declarator declaration-list attribute-seq compound-statement

/* attribute-seq è specifico di Microsoft */

declaration-specifiers:
storage-class-specifierdeclaration-specifiersoptare
type-specifierdeclaration-specifiersoptare
type-qualifierdeclaration-specifiersoptare

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 voidrestituito , 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.

Vedi anche

Definizioni di funzioni C