Entiendo que una función estática en C permite que esa función particular solo se llame dentro de los límites de ese archivo. Lo que me interesa es cómo ocurre esto. ¿Se está colocando en una parte específica de la memoria o es el compilador que aplica una operación específica a esa función? ¿Se puede aplicar este mismo proceso a una llamada de función en el ensamblaje?¿Cómo C limita el uso de una función estática solo a su archivo?
Respuesta
No entra en la tabla de nombres del objeto que impide que se vincule con otras cosas.
Las funciones y otros nombres se exportan como símbolos en el archivo objeto. El vinculador usa estos símbolos para resolver todo tipo de referencias pendientes en el tiempo del enlace (por ejemplo, una llamada a una función definida en otro archivo). Cuando lo declaras static
, simplemente no se exportará como un símbolo. Por lo tanto, no será recogido por ningún otro archivo. Aún podría llamarlo desde otro archivo si tuviera un puntero a la función.
De hecho, es lo contrario. Cuando una función es no estática, su nombre está escrito en algún lugar del archivo objeto, que luego el enlazador puede usar para vincular otros archivos de objetos usando esta función, a la dirección de esa función.
Cuando la función se declara static
, el compilador simplemente no pone el nombre allí.
Declarar una función static
realmente no impide que sea llamado de otras unidades de traducción.
Lo static
hace es que previene la función de ser referidos (vinculados) de otras unidades de traducción por su nombre. Esto eliminará la posibilidad de llamadas directas a esa función, es decir, llamadas "por nombre". Para lograr eso, el compilador simplemente excluye el nombre de la función de la tabla de nombres externos exportados desde la unidad de traducción. Aparte de eso, no hay absolutamente nada especial acerca de las funciones estáticas.
Aún puede llamar al que funciona desde otras unidades de traducción por otros medios. Por ejemplo, si de alguna manera obtuvo un puntero a la función static
en otra unidad de traducción, puede llamarlo a través de ese puntero.
- 1. BitBucket.org - ¿limita solo el número de usuarios?
- 2. ¿Limita una función de plantilla a tipos base y derivados?
- 3. ¿Se puede llamar a una función estática a través de un puntero de función en C?
- 4. Función estática Ayuda C++
- 5. ASP.Net: Uso de System.Web.UI.Control.ResolveUrl() en una función compartida/estática
- 6. extern en una función estática en C++
- 7. tipos de variables C++ limita
- 8. ¿Cuál es el tiempo de vida de una variable estática en una función de C++?
- 9. declaran hacia adelante función estática C++
- 10. ¿Cómo se limita programáticamente el uso del ancho de banda de mi aplicación C#?
- 11. función no estática frente a función estática y variable
- 12. ¿Cómo crear una función PHP solo visible dentro de un archivo?
- 13. cómo inicializar una estructura estática en C++?
- 14. ¿Cuál es el uso de declarar una variable estática como extern dentro de una función?
- 15. ¿Por qué declarar una variable o función estática en C?
- 16. ¿cómo se interpreta la definición de una función después de su uso en una llamada a función?
- 17. Llamar a una función a través de su dirección en la memoria en c/C++
- 18. Llamar a una función solo una vez
- 19. ¿Cómo uso una función de biblioteca Haskell?
- 20. ¿Hay una función estándar que solo devuelve su parámetro?
- 21. ¿C++ limita la profundidad de recursión?
- 22. C++ función se unen para su uso como argumento de otra función
- 23. ¿Cómo vincular a una biblioteca estática en C?
- 24. Cómo llamar a una clase C++ y su método desde un archivo c
- 25. una variable estática en c
- 26. Cómo usar la función de la biblioteca estática si no tengo el archivo de encabezado
- 27. ¿Por qué solo puedo acceder a miembros estáticos desde una función estática?
- 28. ¿Cómo exportar el informe a UN SOLO archivo html?
- 29. ¿Cómo se calcula y limita el rendimiento de Amazon DynamoDB?
- 30. ¿Cómo hacer referencia a una función desde su propia implementación?