2010-03-07 10 views
6

En C: por qué solo las funciones en línea con vinculación interna (es decir, declaradas con estática) pueden hacer referencia (es decir, copiar dirección, leer, escribir o llamar) una variable o función en el alcance de archivo con duración de almacenamiento estática mientras otras funciones en línea ¿podría no?¿Funciones en línea con enlace interno?

Respuesta

4

Así es como se definen las cosas.

La función en línea se insertaría en el módulo al que se llama. Por lo tanto, no puede acceder a las cosas privadas en su módulo donde está definido.

Si la función en línea es solo se usa en ese módulo (enlace interno). Entonces es seguro otorgarle acceso a las cosas "privadas" de ese módulo.

2

Un objeto o función con alcance de archivo, declarado con el especificador de almacenamiento "estático" tiene enlace interno. Si bien su duración es la ejecución completa del programa, un objeto con enlace interno no se declara para (es decir, es visible desde) otras unidades de traducción.

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

  • llamada la ejemplo dentro de la unidad de traducción en el que la función se declara
  • 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 llamada

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 debe contener una definición de objeto modificable con duración de almacenamiento estático", ya que podría dar lugar a múltiples instancias de ese objeto que probablemente no sea el comportamiento previsto.

Cuestiones relacionadas