形成字符*(*)用于字符变量生成

时间:2017-03-14 12:29:48

标签: 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")
  End

我不理解Character*(*) name语法。不是简单地声明字符串变量的典型方法。 character :: name*4 *4部分指定了字符数?任何人都可以解释这种替代语法的目的吗?它会产生什么样的物体?

1 个答案:

答案 0 :(得分:2)

简而言之:character*(*)声明一个假定长度的字符变量。

有许多方法可以声明字符变量的长度。一个,如问题代码中所示,是

character*1023  ...

其中一个文字常量跟在*之后。相当于

character([len=]1023) ...

len=是可选的)。在这种情况下,长度不必是文字常量。

这两种形式声明了一个特定长度的变量。字符变量有两种其他形式的长度:

  • 假定长度 - character([len=]*) ...;
  • 延迟长度 - character([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'

延期长度留给其他问题。