Anuncio previo

Una declaración directa es un tipo de declaración en la que el ensamblador (compilador) tiene la capacidad de resolver referencias de varias partes del programa. La declaración directa permite al programador hacer referencia a objetos que el compilador aún no conoce, pero que se determinarán durante el proceso de compilación más adelante.

En programación, una declaración directa es una declaración de un identificador (tipo, variable o función) para el cual el programador aún no lo ha definido por completo. El compilador requiere la declaración del identificador para conocer el tipo (tamaño) del identificador, pero no su valor (en el caso de las variables).

void imprimeEsteEntero ( int );

En C/C++, la cadena dada significa la declaración directa de una función y es su prototipo. Después de procesar esta declaración, el compilador permite que el programador se refiera a la entidad printThisInteger en el resto del programa. La definición de la función debe declararse en otro lugar (en el mismo archivo o en otro; la tarea del enlazador es hacer coincidir las referencias a una función dada en uno o más archivos de objetos con su definición única en otro):

void imprimeEsteEntero ( int x ) { printf ( "%d \n " , x ); }

Las variables pueden o no ser declaradas. Dichas variables se inicializan durante la compilación de acuerdo con las reglas del lenguaje (valor indefinido, cero, puntero NULL, ...). Las variables definidas en otro archivo fuente/objeto deben declararse previamente con la palabra clave extern:

intfoo ; _ //foo podría haberse definido en algún lugar de este archivo extern int bar ; //la barra debe estar definida en otro archivo

En Pascal y otros lenguajes de programación de Wirth, el hecho de que todas las entidades deben declararse antes de que se utilicen por primera vez es una regla general. En C, se aplica la misma regla, con excepciones para funciones no declaradas y tipos incompletos. Entonces, en C existe la posibilidad de implementar un par de funciones mutuamente recursivas:

int primero ( int x ) { si ( x == 0 ) devolver 1 ; volver segundo ( x -1 ); // mirar hacia adelante al segundo } int segundo ( int x ) { si ( x == 0 ) devolver 0 ; regresa primero ( x -1 ); }

En Pascal, una implementación similar requiere una declaración previa de la segunda función antes de su primer uso. Sin una declaración directa, el compilador emitirá un mensaje de error que indica que el segundo identificador se usó sin declararse.

Referencia directa (referencia)

El término "referencia hacia adelante" se usa a veces como sinónimo de declaración hacia adelante [1] . Sin embargo, la mayoría de las veces, la referencia directa (referencia) se refiere al uso real de la entidad antes de cualquier declaración; es decir, la referencia a segundo en el ejemplo anterior es una referencia directa [2] [3] . Por lo tanto, en vista del hecho de que la declaración hacia adelante en Pascal es obligatoria, la referencia hacia adelante (referencia) está prohibida en ella.

Un ejemplo de una referencia directa en C++:

clase C { público : void mutator ( int x ) { myValue = x ; } accesor int () { return myValue ; } privado : int miValor ; };

En este ejemplo, hay dos usos del atributo myValue antes de declararlo. C++ generalmente no permite la búsqueda anticipada. Se permite para un caso especial: los miembros de la clase. Un método que modifica un atributo no se puede compilar antes de que el compilador sepa que myValue existe. Por lo tanto, es responsabilidad del compilador recordar la declaración del método hasta que vea la declaración myValue.

El mantenimiento de referencias directas (referencias) puede aumentar considerablemente la complejidad y los requisitos de memoria del compilador. Esto generalmente se convierte en un obstáculo para la implementación del compilador en un solo paso.

Véase también

Anuncio (informática)

Enlaces

  1. MSDN: Conversión a un tipo de clase de referencia directa . Consultado el 27 de noviembre de 2011. Archivado desde el original el 28 de marzo de 2008.
  2. Copia archivada . Consultado el 27 de noviembre de 2011. Archivado desde el original el 3 de marzo de 2016.
  3. Thinking in C++: Inlines & the compiler Archivado el 9 de julio de 2011.