Compartir a través de


Definiciones de funciones de C

Una definición de función especifica el nombre de la función, los tipos y el número de parámetros que espera recibir, y su tipo de valor devuelto. Una definición de función también incluye un cuerpo de la función con las declaraciones de las variables locales y las instrucciones que determinan lo que hace la función.

Sintaxis

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration: /* Solo se permite en el ámbito externo (archivo) */
function-definition
declaration

function-definition:
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

/* attribute-seq es específico de Microsoft */

Los parámetros de prototipo son:

declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

declaration-list:
declaration
declaration-list declaration

declarator:
pointeropt direct-declarator

direct-declarator: /* Un declarador de función */
direct-declarator ( parameter-type-list ) /* Declarador de estilo nuevo */
direct-declarator ( identifier-listopt ) /* Declarador de estilo obsoleto */

La lista de parámetros de una definición utiliza esta sintaxis:

parameter-type-list: /* La lista de parámetros */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declaratoropt

La lista de parámetros de una definición de función de estilo antiguo utiliza esta sintaxis:

identifier-list: /* Se usa en definiciones de función y declaraciones de estilo obsoleto */
identifier
identifier-list , identifier

La sintaxis para el cuerpo de la función es:

compound-statement:
{ declaration-listopt statement-listopt }

Los únicos especificadores de clase de almacenamiento que pueden modificar una declaración de función son extern y static . El especificador extern significa que se puede hacer referencia a la función desde otros archivos; es decir, el nombre de función se exporta al vinculador. El especificador static significa que no se puede hacer referencia a la función desde otros archivos; es decir, el enlazador no exporta el nombre. Si no aparece ninguna clase de almacenamiento en una definición de función, se supone extern. En cualquier caso, la función siempre es visible desde el punto de definición hasta el final del archivo.

El elemento declaration-specifiers opcional y el elemento declarator obligatorio juntos especifican el tipo de valor devuelto y el nombre de la función. declarator es una combinación del identificador que proporciona el nombre de la función y los paréntesis que siguen al nombre de la función. El parámetro attribute-seq opcional no terminal es una característica específica de Microsoft que se define en Atributos de función.

El direct-declarator (en la sintaxis de declarator) especifica el nombre de la función que se define y los identificadores de sus parámetros. Si el direct-declarator incluye una parameter-type-list, la lista especifica los tipos de todos los parámetros. Un declarador de este tipo también actúa como un prototipo de función para las llamadas posteriores a la función.

Una declaration en la declaration-list en las definiciones de función no puede contener un storage-class-specifier distinto de register. El type-specifier en la sintaxis de declaration-specifiers solo se puede omitir si se especifica la clase de almacenamiento register para un valor de tipo int.

El elemento compound-statement es el cuerpo de la función que contiene las declaraciones de variables locales, las referencias a elementos declarados externamente y las instrucciones.

En las secciones Atributos de función, Clase de almacenamiento, Tipo de valor devuelto, Parámetros y Cuerpo de la función se describen los componentes de la definición de función en detalle.

Vea también

Funciones