2009-07-21 9 views
5

¿Por qué las variables no se inicializan a cero en Fortran 2003 en comparación con f90?Variables no inicializadas en Fortran 2003

Tengo una variable en una función de un archivo. está inicializado a 0. Quiero usarlo otra función y luego muestra un valor de basura. incluso para las variables globales también. ¿Hay alguna opción que deba establecer para el compilador de Fortran 2003?

+1

¿Qué compilador de fortran 2003 está usando? – tvanfosson

Respuesta

3

No estoy familiarizado con ningún compilador de Fortran, pero sí sé que, en general, la mayoría de los compiladores no inicializarán las variables globales y locales. La inicialización siempre debe hacerse en código. No debe confiar en el compilador para hacer esto por usted. La basura que está viendo probablemente provenga de la pila o del montón de memoria. Algunos compiladores llenarán el montón con cero al asignar memoria, lo que podría explicar por qué algunos compiladores parecerán inicializar variables con 0. En realidad, no han inicializado nada, solo están usando un área de memoria que se llenó con cero.

+3

Wow: no está familiarizado con ningún compilador de Fortran pero aún está dispuesto a ofrecer una opinión. Simplemente guau. –

+3

Sé cómo funcionan los compiladores, sí. Tener mucha experiencia con los compiladores en general, por lo que Fortran no es muy diferente. Como la pregunta no menciona qué compilador de Fortran se usa, es un poco genérico después de todo. –

7

Puede intentar usar -zero o/Qzero - esto inicializará los escalares locales a cero - pero realmente debería establecer explícitamente los valores iniciales. Dependiendo del compilador que lo haga por usted es, como ha descubierto, una buena forma de introducir errores. Tenga en cuenta que los nombres de las opciones pueden ser diferentes para los diferentes compiladores. Los mencionados son para Intel Visual Fortran.

2

No existe diferencia entre Fortran 90 y Fortran 2003 en la inicialización de variables. Todo código válido de Fortran 90 es válido Fortran 2003, y debería dar el mismo resultado (excepto en algunos casos de esquina poco claros en los que el comportamiento estándar dependiente del compilador ahora está especificado por el estándar; este no es uno de esos).

Ahora, en cuanto a por qué podría ver la diferencia, es difícil de decir sin saber cuáles son sus compiladores, y lo que hace exactamente su código. Sospecho fuertemente que confiabas en el comportamiento dependiente del compilador, y se rompió cuando cambiaste el compilador.

4

Experimentamos este movimiento de Compaq Visual Fortran a Intel Visual Fortran. A pesar de su falta de familiaridad con los compiladores de Fortran, la publicación completa dejados por Workshop Alex es correcta: no debe confiar en que el compilador establezca los valores iniciales. El estándar no dice que los valores de las variables se deben establecer automáticamente. Incluso si lo hizo, confiar en este comportamiento del compilador es arriesgado.

Compaq Visual Fortran inicializa automáticamente las variables. Otros compiladores no. Tu código debe ser reparado. Solo puedes hacer eso al inicializar todas tus variables.

John

Cuestiones relacionadas