Pregunta

C: ¿Por qué es para que sólo las funciones en línea con enlace interno (es decir, declaran con estática) puede hacer referencia (es decir, copiar la dirección, leer, escribir, o una llamada) una variable o función en el ámbito de archivo con una duración de almacenamiento estático, mientras que otra línea Las funciones pueden no?

¿Fue útil?

Solución

Esta es la forma de definir las cosas.

La función inline se insertaría en el módulo donde se llama. Por lo tanto, no se puede acceder al material privado en su módulo donde está definido.

Si la función inline es solamente utilizado porque el módulo (enlace interno). Entonces es seguro que disponga de un acceso a la materia "privado" de ese módulo.

Otros consejos

Un objeto o función con el ámbito de archivo, declarada con la "estática" especificador de almacenamiento tiene enlace interno. Mientras que su vida útil es toda la ejecución del programa, un objeto con enlace interno no se declara para (es decir, visible desde) otras unidades de traducción.

Para una función en línea con enlace externo, el compilador puede:

  • llamar a la ejemplo dentro de la unidad de traducción en el que se declara la función
  • realizar una sustitución en línea en el punto de la llamada
  • crear un idénticos pero separados ejemplo de la función dentro de la unidad de traducción llamar

En los dos últimos casos, los objetos con enlace interno no serían visibles. Por lo tanto una función en línea con enlace externo no puede hacer referencia a un identificador con enlace interno.

Además, "no deberá contener una definición de un objeto modificable con la duración de almacenamiento estático" ya que esto podría dar lugar a múltiples instancias de ese objeto que probablemente no es el comportamiento previsto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top