Fortran 用于生成字符变量的表格字符*(*)
我有一个第三方脚本,用于我需要使用的子例程。该子程序如下所示Fortran 用于生成字符变量的表格字符*(*),fortran,Fortran,我有一个第三方脚本,用于我需要使用的子例程。该子程序如下所示 Subroutine COpen(io, Name ) Character*(*) Name Character*1023 NameIn, NameOut NameIn = Trim(Name)//' ' Call Get_OrMakeFileName( NameIn, NameOut ) Open(io,file=NameOut,access="APPEND") E
Subroutine COpen(io, Name )
Character*(*) Name
Character*1023 NameIn, NameOut
NameIn = Trim(Name)//' '
Call Get_OrMakeFileName( NameIn, NameOut )
Open(io,file=NameOut,access="APPEND")
End
我不理解字符*(*)名称
语法。不是简单地声明字符串变量的典型方法<代码>字符::名称*4,其中*4
部分指定字符数?有人能解释一下这种替代语法的用途吗?它生成什么类型的对象?简而言之:字符*(*)
声明一个假定长度的字符变量
有许多方法可以声明字符变量的长度。从问题代码中可以看出,一个是
character*1023 ...
其中,*
后面跟着一个文字常量。相当于
character([len=]1023) ...
(len=
可选)。在这种情况下,长度不必是文字常量
这两种形式声明一个特定长度的变量。字符变量的长度还有两种其他形式:
- 假定长度-
李>字符([len=]*)…
- 延迟长度-
字符([len=]:)…
character*1023
一样,假定长度声明和延迟长度声明可以使用以下样式编写:
character*(*) ... ! Assumed length
character*(:) ... ! Deferred length
character*(1023) ... ! For completeness
“假定长度”是什么意思
对于诸如Name
之类的伪参数,其长度取自过程实际参数的长度。使用character::Name*4
时,参数的长度为4,与子例程的参数长度无关(只要其长度至少为4)。当虚拟对象的长度为假定长度时,如果参数的长度为12,则虚拟对象的长度为12,依此类推
虽然不在问题中,但名为constant的字符也可以从定义表达式中假定其长度:
character*(*), parameter :: label='This long'
延迟的长度由其他问题决定。谢谢。你介意检查一下我的后续问题吗?我把问题简化了一点。