Forme obsolete di dichiarazioni e definizioni di funzioniObsolete Forms of Function Declarations and Definitions

Rispetto alla sintassi consigliata dallo standard ANSI C, le dichiarazioni e le definizioni delle funzioni obsolete utilizzano regole leggermente differenti per la dichiarazione dei parametri.The old-style function declarations and definitions use slightly different rules for declaring parameters than the syntax recommended by the ANSI C standard. Innanzitutto, le dichiarazioni obsolete non includono un elenco di parametri.First, the old-style declarations don't have a parameter list. In secondo luogo, nella definizione di funzione, i parametri sono elencati, ma i relativi tipi sono dichiarati nell'elenco di parametri.Second, in the function definition, the parameters are listed, but their types are not declared in the parameter list. Le dichiarazioni del tipo precedono l'istruzione composta che costituisce il corpo della funzione.The type declarations precede the compound statement constituting the function body. La sintassi obsoleta non è aggiornata e non deve essere utilizzata nel nuovo codice.The old-style syntax is obsolete and should not be used in new code. Il codice che utilizza la sintassi obsoleta è, tuttavia, ancora supportato.Code using the old-style syntax is still supported, however. In questo esempio vengono illustrati i form obsoleti delle dichiarazioni e delle definizioni:This example illustrates the obsolete forms of declarations and definitions:

double old_style();           /* Obsolete function declaration */  

double alt_style( a , real )  /* Obsolete function definition */  
    double *real;   
    int a;   
{  
    return ( *real + a ) ;  
}  

Alle funzioni che restituiscono un intero o un puntatore con la stessa dimensione di int non è richiesto di contenere una dichiarazione sebbene l'utilizzo della dichiarazione sia consigliato.Functions returning an integer or pointer with the same size as an int are not required to have a declaration although the declaration is recommended.

Per la conformità allo standard ANSI C, le dichiarazioni di funzione obsolete con i puntini di sospensione generano ora un errore durante la compilazione con l'opzione /Za e un avviso di livello 4 durante la compilazione con /Ze.To comply with the ANSI C standard, old-style function declarations using an ellipsis now generate an error when compiling with the /Za option and a level 4 warning when compiling with /Ze. Ad esempio:For example:

void funct1( a, ... )  /* Generates a warning under /Ze or */  
int a;                 /* an error when compiling with /Za */  
{  
}  

È necessario riscrivere questa dichiarazione come prototipo:You should rewrite this declaration as a prototype:

void funct1( int a, ... )  
{  
}  

Anche le dichiarazioni di funzione obsolete generano avvisi se, in un secondo momento, si dichiara o si definisce la stessa funzione con i puntini di sospensione o con un parametro con un tipo che non è uguale al relativo tipo promosso.Old-style function declarations also generate warnings if you subsequently declare or define the same function with either an ellipsis or a parameter with a type that is not the same as its promoted type.

Nella sezione successiva, Definizioni di funzioni C, viene illustrata la sintassi per le definizioni di funzioni, inclusa la sintassi obsoleta.The next section, C Function Definitions, shows the syntax for function definitions, including the old-style syntax. Il non terminale per l'elenco dei parametri nella sintassi obsoleta è identifier-list.The nonterminal for the list of parameters in the old-style syntax is identifier-list.

Vedere ancheSee Also

Panoramica delle funzioniOverview of Functions