Compartir a través de


Introducción a las declaraciones

Una "declaración" especifica la interpretación y los atributos de un conjunto de identificadores. Una declaración que también hace que el almacenamiento se reserve para el objeto o la función denominada por el identificador se denomina "definición". Las declaraciones de C para variables, funciones y tipos tienen esta sintaxis:

Sintaxis

declaration:
declaration-specifiers attribute-seq optarinit-declarator-listoptar;

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

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

init-declarator-list:
init-declarator
init-declarator-list , init-declarator

init-declarator:
declarator
declarator = initializer

Nota:

Esta sintaxis de declaration no se repite en las secciones siguientes. La sintaxis de las secciones siguientes suele comenzar con la declarator sintaxis no determinada.

Las declaraciones de contienen init-declarator-list los identificadores que se denominan; init es una abreviatura del inicializador. init-declarator-list es una secuencia separada por comas de declaradores, cada una de las cuales puede tener información de tipo adicional, o un inicializador, o ambos. declarator contiene los identificadores, si los hay, que se declaran. El declaration-specifiers noterminal consta de una secuencia de especificadores de tipo y clase de almacenamiento que indican la vinculación, la duración del almacenamiento y, al menos, parte del tipo de las entidades que indican los declaradores. Las declaraciones se componen de una combinación de especificadores de clase de almacenamiento, especificadores de tipos, calificadores de tipo, declaradores e inicializadores.

Las declaraciones pueden contener uno o varios de los atributos opcionales enumerados en attribute-seq; seq es una abreviatura de secuencia. Estos atributos específicos de Microsoft realizan varias funciones, que se describen detalladamente en este libro.

En la forma general de una declaración de variable, type-specifier proporciona el tipo de datos de la variable. type-specifier puede ser un compuesto, como cuando el tipo se modifica mediante const o volatile. declarator proporciona el nombre de la variable, posiblemente modificado para declarar una matriz o un tipo de puntero. Por ejemplo

int const *fp;

declara una variable denominada fp como puntero a un valor no modificable (const). int Puede definir más de una variable en una declaración mediante varios declaradores, separados por comas.

Una declaración debe tener al menos un declarador o su especificador de tipos debe declarar una etiqueta de estructura, una etiqueta de unión o miembros de una enumeración. Los declaradores proporcionan cualquier información restante sobre un identificador. Un declarador es un identificador que se puede modificar con corchetes ([ ]), asteriscos (*) o paréntesis ( ( ) ) para declarar una matriz, puntero o tipo de función, respectivamente. Al declarar variables simples (como caracteres, enteros y elementos de punto flotante), o estructuras y uniones de variables simples, declarator es solo un identificador. Para obtener más información sobre los declaradores, vea Declaradores y declaraciones de variables.

Todas las definiciones son declaraciones implícitas, pero no todas las declaraciones son definiciones. Por ejemplo, las declaraciones de variables que usan el extern especificador de clase de almacenamiento son "referencias", en lugar de declaraciones "definiendo". Si se va a hacer referencia a una variable externa antes de que se defina, o si se define en otro archivo de origen desde el que se usa, es necesario realizar una extern declaración. Las declaraciones de "referencia" no asignan almacenamiento ni se pueden inicializar variables en declaraciones.

Se requiere una clase de almacenamiento o un tipo (o ambos) en declaraciones de variables. Excepto para __declspec, solo se permite un especificador de clase de almacenamiento en una declaración y no todos los especificadores de clase de almacenamiento se permiten en todos los contextos. La __declspec clase de almacenamiento se permite con otros especificadores de clase de almacenamiento y se permite más de una vez. El especificador de clase de almacenamiento de una declaración afecta a cómo se almacena e inicializa el elemento declarado, y qué partes de un programa pueden hacer referencia al elemento.

Los storage-class-specifier terminales definidos en C incluyen auto, extern, register, static, y typedef. Microsoft C también incluye el storage-class-specifier terminal __declspec. Todos los storage-class-specifier terminales excepto typedef y __declspec se describen en Clases de almacenamiento. Para obtener información sobre typedef, vea typedef Declaraciones. Para obtener información sobre __declspec, vea Atributos de Storage-Class extendidos.

La ubicación de la declaración dentro del programa de origen y la presencia o ausencia de otras declaraciones de la variable son factores importantes para determinar la duración de las variables. Puede haber varias reeclaraciones, pero solo una definición. Sin embargo, una definición puede aparecer en más de una unidad de traducción. En el caso de los objetos con vinculación interna, esta regla se aplica por separado a cada unidad de traducción, ya que los objetos vinculados internamente son únicos para una unidad de traducción. En el caso de los objetos con vinculación externa, esta regla se aplica a todo el programa. Para obtener más información sobre la visibilidad, vea Duración, Ámbito, Visibilidad y Vinculación.

Los especificadores de tipo proporcionan información sobre los tipos de datos de identificadores. El especificador de tipo predeterminado es int. Para obtener más información, vea Especificadores de tipos. Los especificadores de tipos también pueden definir etiquetas de tipo, nombres de componentes de estructura y unión y constantes de enumeración. Para obtener más información, vea Declaraciones de enumeración, Declaraciones de estructura y Declaraciones de unión.

Hay dos type-qualifier terminales: const y volatile. Estos calificadores especifican propiedades adicionales de tipos que solo son relevantes al acceder a objetos de ese tipo a través de valores l. Para obtener más información sobre const y volatile, vea Calificadores de tipos. Para obtener una definición de valores L, vea Expresiones L-Value y R-Value.

Consulte también

Resumen de la sintaxis del lenguaje C
Declaraciones y tipos
Resumen de declaraciones