Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 这个FORTRAN代码应该是';我不编译。这有什么原因吗?_Compilation_Fortran_Fortran90_Gfortran - Fatal编程技术网

Compilation 这个FORTRAN代码应该是';我不编译。这有什么原因吗?

Compilation 这个FORTRAN代码应该是';我不编译。这有什么原因吗?,compilation,fortran,fortran90,gfortran,Compilation,Fortran,Fortran90,Gfortran,下面的代码可以编译,但我认为它不应该编译。如您所见,输出是垃圾 这是一个小小的失败例子,在我所从事的一个大型项目中,它让我付出了巨大的努力 我的问题是-为什么编译器不抱怨?这是编译器的限制,还是某种程度上的“预期行为”,而我错过了什么 我正在使用gfortran 4.6.3 module dataModule integer :: datum1 = int(1) integer :: datum2 = int(2) end module dataModule progr

下面的代码可以编译,但我认为它不应该编译。如您所见,输出是垃圾

这是一个小小的失败例子,在我所从事的一个大型项目中,它让我付出了巨大的努力

我的问题是-为什么编译器不抱怨?这是编译器的限制,还是某种程度上的“预期行为”,而我错过了什么

我正在使用gfortran 4.6.3

module dataModule
    integer :: datum1 = int(1)
    integer :: datum2 = int(2)    
end module dataModule

program moduleTest
    use dataModule, only: datum1

    write(*,*) "datum 1 is", datum1
    write(*,*) "datum 2 is", datum2

end program moduleTest
示例输出:

datum 1 is           1
datum 2 is  4.58322689E-41

你的代码出错了,而不是编译器。如果
datum2
only
子句相关,并且如果
datum2
的显式初始化被忽略,那么是的,这将是一个顽皮的编译器

不过,答案要平凡得多


datum2
没有使用关联:在缺少
implicit none
的情况下,它是主程序中的隐式类型变量。“垃圾”来自这样一个事实,即在引用其值之前,它没有通过初始化或赋值来定义,并且它是隐式(默认)实数。编译器不需要在编译(或运行)时检测此错误。

您错过了
隐式无
。没有它,代码是非常有效的,输出是允许的。书中最古老的技巧:)啊,当然!谢谢各位。实际上比这更糟糕的是,我在(非常旧的!)代码中编辑的模块有隐式REAL*8(a-h,o-z)这是什么,@francescalus?在回复一条评论几个月后,你会回来接受你的“接受答案”互联网积分吗?哦,那就继续吧;)我所学到的是,使用古老的Fortran代码的一个陷阱是,它没有任何
隐式的none
s,而且生命太短,无法选择并正确键入所有变量。所以我在C++中重新编写了它。奇怪的是我在浏览器的选项卡上打开这个问题六个月。因此,有可能整理互联网和我的桌面上“未回答”的部分;)。