获取未实例化的用户定义数据类型中的数组大小

时间:2015-11-26 14:49:02

标签: fortran fortran95

说给我以下模块,我不允许编辑它:

module somemod
  type somestruct
    character(40) somestr
  end type
end module

我在这段代码中使用它:

program myprog
  use somemod

  implicit none

  character(size(somestruct%somestr)) localstr   !Is this possible?
end program

是否有语法完成标记线试图做的事情?也就是说,我可以在用户定义的数据结构中获取数组的大小而无需实例化数据结构吗?

1 个答案:

答案 0 :(得分:2)

首先,

character(40) somestr

不是数组,而是长度为40的字符串。

差异很大,不仅仅是挑剔。您使用不同的数组和字符串。有关详情,请参阅Difference between "character*10 :: a" and "character :: a(10)"

字符串的长度由内在函数len()查询。

但遗憾的是,如果没有该类型的变量(实例),则不能在派生类型的组件上调用它。

所以你需要

program myprog
  use somemod

  implicit none

  type(somestruct) :: o
  character(len(o%somestr)) localstr   !This is possible.
end program

如果您需要数组组件的大小,它将是相同的,但具有size()内在函数。