FORTRAN77中未声明且未赋值的整型变量默认取值是多少?
FORTRAN77未赋值首字母I变量初始值问题解答
核心结论
FORTRAN77官方标准中没有规定未提前赋值变量的默认初始值,这类变量的取值属于未定义行为,完全由运行时对应内存地址中残留的历史数据决定,不存在固定的0或1默认值。
你给出的代码场景运行逻辑
第一次执行DO 10循环时,I的取值完全是随机的内存垃圾值:
- 如果该垃圾值刚好等于1,就会执行
CALL FUNC - 如果不等于1,就会跳过该调用语句
这种不确定行为在不同编译器、不同运行环境、甚至同一环境的不同次运行中,都可能出现不同结果。
补充说明
- 部分老旧的FORTRAN编译器存在非标准扩展,会默认将静态存储的变量初始化为0,但该行为不属于标准要求,绝对不能作为逻辑正确性的依赖
- 若要验证当前运行环境下的初始值,可在第一次进入
100行的DO循环前添加打印语句输出I的取值即可 - 修复该问题的方案非常简单:在程序入口处显式给
I赋予业务逻辑需要的初始值即可。
内容的提问来源于stack exchange,提问作者jva
相关产品推荐
相关产品推荐

