Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 用于生成字符变量的表格字符*(*)_Fortran - Fatal编程技术网

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'

延迟的长度由其他问题决定。

谢谢。你介意检查一下我的后续问题吗?我把问题简化了一点。