回 帖 发 新 帖 刷新版面

主题:fortran 初始化

program main
real::a(5)

a=0
do
....
enddo

end

这样没有问题的吧?
===================================
看到水木上一个帖子

发信人: hyperLee (东哥de征途~~风雨无阻), 信区: NumComp
标  题: fortran的变量初始化太坑爹了!
发信站: 水木社区 (Sat Oct 29 09:12:52 2011), 站内

以前用c/c++的时候,都是定义变量的时候,顺手初始化, 比如 int a = 5;这样每次进入到这个函数的时候,a都被初始为5。

现在用fortran,我写 real*8 :: delta = 0.d0,然后认为每次进入函数的时候delta都是零。delta用来存放一个累加值(积分)。后来程序总是调不通,崩溃了无数次。最后才发现,md delta的值就是第一次进入函数的时候等于0,下一次进入,居然还是上一次函数执行完毕的值!居然不是每次进入都初始化,太坑爹了,太坑爹了!这tm是故意给人挖坑吗?

回复列表 (共5个回复)

沙发

少了个IMPLICIT NONE;
另外没觉得存在这个问题。

板凳

你的没问题, 水木讲的也没问题. 他那个是子函数(子程序), 在定义初始化fortran会认为具有save属性, 而C/C++则每次进入都初始化一次. 在这里我也栽过跟斗.

3 楼

你只要在定义时初始化,那这个变量就默认为SAVE,也就是相当于C语言的static:)这回明白了吧:)喔也:)

4 楼

这个帖子我看了,是各自语言的特性而已。其中有无数网友对 C++ 与 Fortran 孰优孰劣辩论,他们绝大部分都没有真正地学过各自的“标准”。

对 Fortran 用户,要想真正地对 Fortran 语言有“初步”的了解,看 The Fortran 2003 Handbook 至少三遍,并且把其中的大部分条款弄通,能写出示范性的程序。达到这个程度,也许在“菜鸟”看来就是“高手”了。

5 楼

只读过 C 标准但没读完的菜鸟掩面路过...

那个坑早已烂记于心。

我来回复

您尚未登录,请登录后再回复。点此登录或注册