Compartir a través de


Clase de almacenamiento

El especificador de clase de almacenamiento en una definición de función proporciona a la función la clase de almacenamiento extern o static .

Sintaxis

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

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

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

storage-class-specifier: /* Para definiciones de función */
extern
static

Si una definición de función no incluye el elemento storage-class-specifier, la clase de almacenamiento utiliza extern de forma predeterminada. Puede declarar explícitamente una función como extern, pero no es necesario.

Si la declaración de una función contiene storage-class-specifier extern, el identificador tiene la misma vinculación que cualquier declaración visible del identificador con ámbito de archivo. Si no hay ninguna declaración visible con ámbito de archivo, el identificador tiene una vinculación externa. Si un identificador tiene ámbito de archivo pero ningún especificador storage-class-specifier, el identificador tiene una vinculación externa. Vinculación externa significa que cada instancia del identificador designa el mismo objeto o función. Para obtener más información sobre la vinculación y el ámbito de archivo, vea Duración, ámbito, visibilidad y vinculación.

Las declaraciones de función de ámbito de bloque con un especificador de clase de almacenamiento distinto de extern generan errores.

Una función con clase de almacenamiento static solo es visible en el archivo de código fuente en el que se define. Todas las demás funciones, ya sea que se les asigne la clase de almacenamiento extern de forma explícita o implícita, están visibles en todos los archivos de código fuente del programa. Si se desea la clase de almacenamiento static , esta debe declararse en la primera aparición de una declaración (si existe) de la función, y en la definición de la función.

Específicos de Microsoft

Cuando las extensiones de Microsoft están habilitadas, una función declarada originalmente sin una clase de almacenamiento (o con la clase de almacenamiento extern ) tiene la clase de almacenamiento static si la definición de función está en el mismo archivo de código fuente y si la definición especifica explícitamente la clase de almacenamiento static .

Cuando se compilan con la opción del compilador /Ze, las funciones declaradas dentro de un bloque mediante la palabra clave extern tienen visibilidad global, lo que es verdadero al compilar con /Za. No debe confiar en esta característica si la portabilidad del código fuente es importante.

FIN de Específicos de Microsoft

Vea también

Definiciones de función de C