You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran编程中为何不推荐新程序使用DO WHILE循环?

Fortran中DO WHILE循环相关疑问解答

首先明确核心结论:
DO WHILE既不是不推荐的不良编程实践,也不存在任何运行速度上的劣势。

你看到的教材指引本质是基于结构灵活性的选型建议,而非强制编码规范:

Stephen Chapman在书中提到的“通用性更强的while循环”,指的是Fortran中无名DO块搭配EXIT语句实现的循环结构。作者的推荐出发点是这种结构的场景适配范围更广,而非DO WHILE本身有语法缺陷、性能问题或者规范禁忌。

两种循环的实际差异

  • 性能层面:两种写法在所有主流Fortran编译器(GNU Fortran、Intel Fortran、NVHPC等)开启常规优化后,会被编译为完全一致的机器指令,执行效率没有任何区别。你觉得DO WHILE写法更整洁易用的感受完全合理:对于“循环入口处判断终止条件、循环体内部不需要额外中途退出”的场景,DO WHILE的语义更直白,代码可读性更强。
  • 灵活性层面:无名DO+EXIT结构的优势是支持在循环体的任意位置放置退出判断,甚至可以设置多个不同条件的退出分支,不需要把所有终止逻辑都集中在循环开头。比如读取输入后需要先校验输入格式合法性、再判断是否满足终止条件,或是循环执行中途遇到错误需要直接跳出时,这种结构不需要额外编写跳转逻辑,调整起来更方便。

两种写法参考示例

DO WHILE写法

INTEGER :: i = -1

DO WHILE (i < 0)
    PRINT *, 'Enter a non-negative number:'
    READ(*,*) i
END DO

无名DO+EXIT写法

INTEGER :: i = -1

DO
    PRINT *, 'Enter a non-negative number:'
    READ(*,*) i
    IF (i >= 0) EXIT
END DO

实际使用建议

不需要刻意教条遵循教材的替换要求:

  • 如果你的循环是标准的“先判断条件、再执行循环体”逻辑,且没有循环中途退出的需求,完全可以继续使用DO WHILE,不存在任何规范问题。
  • 如果需要在循环体内部多个位置判断退出条件,再选择无名DO+EXIT的结构即可。

注:不少Fortran教材中的这类建议,是沿袭Fortran 90刚推出块EXIT语法时期的编程习惯,并非当前必须遵守的强制编码规则。

内容的提问来源于stack exchange,提问作者baki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:12:25