Condividi tramite


Prototipi di funzione

Una dichiarazione di funzione precede la definizione di funzione e specifica il nome, il tipo restituito, la classe di archiviazione e altri attributi di funzione.Per essere un prototipo, la dichiarazione della funzione deve anche definire i tipi e identificatori per gli argomenti della funzione.

Sintassi

  • declaration:
    dichiarazione-identificatori attributo-seguentiscegliereinit-dichiaratore-elencoscegliere**;**

    /* attributo-seguente scegliere è Microsoft specifico */

  • dichiarazione-identificatori:
    dichiarazione-identificatori dell'archiviazione-classe-identificatore scegliere

    dichiarazione-identificatori dell'tipo-identificatore scegliere

    dichiarazione-identificatori di tipo-qualificatore scegliere

  • init-dichiaratore-elenco:
    init-dichiaratore

    init-dichiaratore-elenco , init-dichiaratore

  • init-dichiaratore:
    dichiaratore

    dichiaratore = inizializzatore

  • declarator:
    puntatore sceglierediretto-dichiaratore

  • diretto-dichiaratore: Dichiarazione di funzione/* */A
    diretto-dichiaratore ( parametro-tipo-elenco )       dichiaratore stile nuova/* */

    diretto-dichiaratore ( identificatore-elencoscegliere**)**    dichiaratore stile precedente/* */

Il prototipo ha lo stesso formato della definizione di funzione, con la differenza che termina con un punto e virgola immediatamente dopo la parentesi di chiusura e pertanto non ha corpo.In entrambi i casi, il tipo restituito deve corrispondere al tipo restituito specificato nella definizione di funzione.

I prototipi di funzione dispongono di seguito viene utilizzato importanti:

  • Stabiliscono che il tipo restituito per le funzioni che restituiscono tipi diversi da int.sebbene funzioni che restituiscono int i valori non richiedono i prototipi, prototipi è consigliata.

  • Senza prototipi completi, le conversioni standard vengono effettuate, ma non viene eseguito alcun tentativo di controllare il tipo o il numero di argomenti con il numero dei parametri.

  • I prototipi sono utilizzati per inizializzare i puntatori a funzioni prima che le funzioni definirli.

  • L'elenco di parametri viene utilizzato per controllare la corrispondenza degli argomenti nella chiamata di funzione con parametri nella definizione di funzione.

Il tipo converta ogni parametro determina l'interpretazione degli argomenti della chiamata di funzione inserisce nello stack.Una mancata corrispondenza tra un argomento e un parametro può determinare gli argomenti nello stack essere interpretato erroneamente.Ad esempio, in un computer a 16 bit, se un puntatore a 16 bit viene passato come argomento, è dichiarato come classe tempo il parametro, i primi 32 bit nello stack viene interpretato come tempo parametro.L'errore causa dei problemi non solo con tempo parametro, ma con i parametri che il carattere.È possibile rilevare gli errori di questo tipo dichiarando i prototipi completi di funzione per tutte le funzioni.

Un prototipo stabilisce gli attributi di una funzione in modo da poter controllare le chiamate alla funzione che precede la relativa definizione o esempio in altri file di origine) per i dati del tipo restituito e del tipo di argomento.Ad esempio, se si specifica statico identificatore in un prototipo, della classe di archiviazione è inoltre necessario specificare statico classe di archiviazione nella definizione di funzione.

dichiarazioni complete di parametro (int a) può essere combinato con i dichiaratori astratti (int) nella stessa dichiarazione.Ad esempio, la dichiarazione seguente è valida:

int add( int a, int );

Il prototipo può includere sia il tipo di e un identificatore per, ogni espressione passata come argomento.Tuttavia, tali identificatori hanno un ambito solo fino alla fine della dichiarazione.Il prototipo inoltre possibile riflettere il fatto che il numero di argomenti è variabile, o che nessun argomento viene passato.Senza tale elenco, i dati non possono essere rivelati, non è possibile generare messaggi diagnostici relativi.vedere argomenti per ulteriori informazioni sul controllo di tipo.

L'ambito del prototipo nel compilatore C di Microsoft è ora ANSI-compiacente durante la compilazione con l'opzione del compilatore /Za.Ciò significa che se si dichiara un oggetto struct o unione il tag all'interno di un prototipo, il tag viene inserito in tale ambito anziché in ambito globale.Ad esempio durante la compilazione con /Za per compatibilità ANSI, è possibile non chiamare mai questa funzione senza ottenere un errore di mancata corrispondenza:

void func1( struct S * );

per correggere il codice, definire o dichiarare struct o unione in ambito globale prima del prototipo di funzione:

struct S;
void func1( struct S * );

In /Ze, il tag verrà inserito in ambito globale.

Vedere anche

Concetti

Funzioni C ()