Fortran Coder

标题: 变量当成数组访问,不清楚是什么用法 [打印本页]

作者: Zhang_kg    时间: 2023-4-27 10:02
标题: 变量当成数组访问,不清楚是什么用法
[Fortran] 纯文本查看 复制代码
REAL  ::                                                        &
            cpmcal, xlcal, diffus,                                &
            viscos, xka, venfac, conden, diffac,                  &
            x


可以看到这里 cpmcal 和 x 都是浮点类型的变量,但是后续代码中出现

[Fortran] 纯文本查看 复制代码
cpmcal(x) = cpd*(1.-max(x,qmin))+max(x,qmin)*cpv


这里 cpmcal(x) 表示将 cpmcal 当成数组来访问,并且 x 作为下标吗?

我尝试在工程中查找cpmcal,发现有如下宏定义:

[C] 纯文本查看 复制代码
#define CPMCAL(x) (cpd*(1.-max(x,qmin))+max(x,qmin)*cpv)


但是感觉也不能很好解释为什么宏定义接受一个赋值。

我是Fortran语言的新手,Google也没有找到非常合适的回答。如果还需要更多细节,请随时和我联系

作者: li913    时间: 2023-4-27 10:38
老代码可能把数据类型和数组属性分开定义
[Fortran] 纯文本查看 复制代码
program Test
implicit none
real a
dimension a(3)
a = [1,2,3]
print*,a
end program

作者: Zhang_kg    时间: 2023-4-27 10:52
本帖最后由 Zhang_kg 于 2023-4-27 10:54 编辑
li913 发表于 2023-4-27 10:38
老代码可能把数据类型和数组属性分开定义
[mw_shl_code=fortran,true]program Test
implicit none


我感觉可能不是这个问题,因为定义和使用中间似乎没有定义数组的属性
作者: li913    时间: 2023-4-27 17:14
那得看完整代码才能知道准确情况。
作者: Zhang_kg    时间: 2023-4-27 19:15
li913 发表于 2023-4-27 17:14
那得看完整代码才能知道准确情况。

但是涉及cpmcal 和 x似乎只有这两个地方,还有一个是

[Fortran] 纯文本查看 复制代码
#define CPMCAL(x) (cpd*(1.-max(x,qmin))+max(x,qmin)*cpv)


还有可能是什么情况嘛

作者: Transpose    时间: 2023-4-27 19:32
这是一个古老古老的语法叫做 语句函数,就是用一句话定义一个只在当前作用域生效的函数



作者: Zhang_kg    时间: 2023-4-27 19:58
Transpose 发表于 2023-4-27 19:32
这是一个古老古老的语法叫做 语句函数,就是用一句话定义一个只在当前作用域生效的函数

哇,感觉可能是这个语法




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2