El hecho de que n = n
se utiliza para comprobar el valor de cmult.gt.0.
y se utiliza como 'condición de punto de interrupción' es una coincidencia en un sentido que es no es el motivo por el que n = n aparece en el fragmento de código anterior.
La razón real por la que n = n se usa en este caso radica en el hecho de que el alcance en el código fuente nunca es traducido por los compiladores más populares al lenguaje ensamblador (la computadora no es lo suficientemente inteligente como para entender qué 'alcance' es a menos que sea explícitamente programado por el programador y si lo hiciera los programas se ejecutarán cientos de veces más lento ... debido a las instrucciones adicionales emitidas para que la lógica respalde el alcance). Solo está ahí para restringir al programador en el código fuente e introducir una estructura en el código para que el compilador & pueda hacer su trabajo o emitir un error si infringe el alcance.
Dado que el alcance no existe enddo
no se puede pausar en a menos que el comipler tenga cuidado de insertar algunas instrucciones (como nop) y símbolos de depuración para permitir mágicamente que el depurador se detenga en enddo
. Sin n = n, el resultado de esta línea p2(kx) = epp_rfc(ipp,k)
no se puede verificar a medida que los valores se restablecen en la parte superior del ciclo. Es por esto que n = n se usa para detenerse después del p2(kx) = epp_rfc(ipp,k)
y verificar el resultado final en cada iteración. Después de que cuando llega este código:
if (cmult.gt.0.) then
n = n
endif
se utiliza por conveniencia (de nuevo no se puede parar en endif o más) los propósitos y sí esto es una especie de punto de interrupción condicional. Pero n = n se utiliza de nuevo porque no se puede dejar de después de comprobarif (cmult.gt.0.)
- se puede dejar de en ella, pero no después de - la siguiente instrucción será después del exterior si otra cosa. Espero que esto tenga sentido.
Editar: Si aún así no tiene mucho sentido que aquí hay información adicional: con el fin de comprobar el valor de p2(kx)
después p2(kx) = epp_rfc(ipp,k)
ha ejecutado el depurador tiene que emitir instrucciones para comprobar/buscarlo - por lo que es se requiere saber a) cuál es el tamaño de p2(kx)
b) su ubicación - ¡recuerde las últimas instrucciones! y c) emitir las instrucciones apropiadas para obtener el valor p2(kx)
. Todo complicado para el depurador ya que esto es realmente lógico: el depurador tiene que ser "inteligente" (cae en el dominio AI), si un depurador pudiera hacer esto, Terminator ya habría existido.
¿Cómo lo supo? Eso es muy interesante. – tofutim
+1, @tofutim la mayoría de los depuradores FORTRAN no son tan buenos como los de .Net, por lo que muchos de estos "hacks" son comunes. He visto estos constructos en la mayoría de los idiomas donde la depuración 'write' /' printf' es común. – user7116