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

Fortran 90及后续版本中能否复用函数结果变量?

Fortran函数体内复用函数名作为局部变量的语法合规性

结论:在Fortran 90及后续标准中,函数名出现在表达式右侧(比如用作累加变量)属于非标准语法,是未定义行为

Fortran标准规定,函数的结果变量(即函数名,或者result指定的变量)仅允许出现在赋值语句的左侧。如果在表达式右侧直接引用它(例如循环中写my_sum = my_sum + x),这种写法没有标准定义的行为,不属于合规的Fortran语法。

虽然Intel Fortran等部分编译器提供了扩展支持,允许这种写法运行,但这并非标准要求,换用其他编译器可能会报错或产生不可预期的结果。

标准合规的写法示例

应该在函数体内声明局部变量完成累加操作,最后再将局部变量的值赋值给结果变量:

function my_sum(arr) result(res)
    integer, intent(in) :: arr(:)
    integer :: res, i, total
    total = 0
    do i = 1, size(arr)
        total = total + arr(i)  ! 局部变量负责累加
    end do
    res = total  ! 最终赋值给结果变量
end function my_sum

非标准的写法示例(仅部分编译器支持)

function my_sum(arr) result(res)
    integer, intent(in) :: arr(:)
    integer :: res, i
    res = 0
    do i = 1, size(arr)
        res = res + arr(i)  ! 直接复用结果变量,非标准
    end do
end function my_sum

你提到的课件说法是准确的,Fortran标准确实禁止在表达式右侧直接引用函数的结果变量,必须通过局部变量中转后再赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:35:36