2011-01-02 16 views
32

Duplicar posibles:
What does “static” mean in a C program?¿Qué significa estática en ANSI-C

¿Qué significa la palabra clave static en C?

Estoy usando ANSI-C. He visto en varios ejemplos de código que usan la palabra clave static frente a las variables y al frente de las funciones. ¿Cuál es el propósito en caso de usar con una variable? ¿Y cuál es el propósito en caso de usar con una función?

+0

Lo hice, pero es difícil de entender el propósito exacto. Pude entender poco acerca de usar con variables. pero usar con la función? – Sency

+1

encontraste esto: http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program –

+1

... o esto: http://stackoverflow.com/questions/943280/ difference-between-static-in-c-and-static-in-c –

Respuesta

57

Al igual que una breve respuesta, hay dos usos de la palabra clave static la hora de definir las variables:

1- Las variables definidas en el ámbito de archivo con static de palabras clave, es decir, funciones externas definidas será visible sólo dentro de ese archivo. Cualquier intento de acceder a ellos desde otros archivos dará como resultado un símbolo no resuelto en el momento del enlace.

2- Las variables definidas como static dentro de un bloque dentro de una función persistirán o "sobrevivirán" a través de diferentes invocaciones del mismo bloque de código. Si se definen inicializados, entonces se inicializan solo una vez. Las variables static generalmente están garantizadas para inicializarse en 0 de manera predeterminada.

+8

En cuanto a 1: static también se puede aplicar a funciones, también ocultándolas al exterior. – datenwolf

+6

Se ha dicho en otras encarnaciones de esta pregunta, pero para aquellos que provienen de Google, en sentido estricto 1 se aplica a las unidades de compilación, no a los archivos. – Jared

+0

@Roux hass: "Si se definen inicializados" ¿Qué significa eso? Si se inicializan con un valor distinto de cero al definirse? – moonman239

30
static dentro del cuerpo de una función, es decir, utilizado como clasificador de almacenamiento variable hace que esa variable retenga su valor entre llamadas a funciones; podría decirse que una variable estática dentro de una función es una variable global visible solo para esa función . Este uso de static siempre hace que la función que se utiliza en el hilo inseguro debe evitarlo.

El otro caso de uso es static en el ámbito global, es decir, variables y funciones globales: las funciones estáticas y globales son locales para la unidad de compilación, es decir, no aparecen en la tabla de exportación del archivo binario compilado objeto. Por lo tanto, no contaminan el espacio de nombres. ¡Declarar estático todas las funciones y variables globales a las que no se puede acceder desde fuera de la unidad de compilación (es decir, el archivo C) en cuestión es una buena idea! Solo tenga en cuenta que las variables estáticas no deben colocarse en archivos de encabezado (excepto en casos especiales muy raros).