fortran - fortran中的sizeof

标签 fortran sizeof

在 C 代码中看到以下内容很常见:

malloc(sizeof(int)*100);

这将返回一个指向足以容纳 100 个整数的内存块的指针。 fortran中是否有任何等价物?

用例:

我有一个二进制文件,打开为:
open(unit=10,file='foo.dat',access='stream',form='unformatted',status='old')

我知道该文件包含“记录”,其中包含一个包含 20 个整数、20 个实数和 80 个字符的标题,然后是另一个 N实数。每个文件可以有数百条记录。基本上,我想读取或写入此文件中的特定记录(假设 N 为简单起见是一个固定常数)。

如果我知道每种数据类型的大小,我可以很容易地计算出我想要写入的文件中的位置:
header_size = SIZEOF_INT*20 + SIZEOF_FLOAT*20 + SIZEOF_CHAR*80
data_size = N*SIZEOF_FLOAT
position = (record_num-1)*(header_size+data_size)+1

目前我有
!Hardcoded :-(
SIZEOF_INT = 4
SIZEOF_FLOAT = 4
SIZEOF_DOUBLE = 8
SIZEOF_CHAR = 1

有没有办法做得更好?

约束:
  • 该代码旨在使用各种编译器在各种平台上运行。符合标准的解决方案绝对是首选。
  • 最佳答案

    在您的用例中,我认为您可以使用

    inquire(iolength=...) io-list
    

    这将为您提供 io-list 需要多少个“文件存储单元”。使用 Fortran 计算文件中的偏移量的一个警告是“文件存储单元”不必以字节为单位,事实上我记得一个非常流行的编译器默认使用单词(4 个字节)作为文件存储单元。但是,通过使用 iolength 事物,您无需担心这个问题。

    关于fortran - fortran中的sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164967/

    相关文章:

    c++ - 查找 sizeof char 数组 C++

    c - 数据类型不匹配和编译器冲突

    c - 本身具有依赖性的静态库上的 AC_SEARCH_LIBS?

    algorithm - 将 VBA 代码转换为 Fortran

    oop - 不同模块中抽象类型的扩展

    python - 读取由 Python 代码创建的 Fortran 二进制文件

    module - 是否可以确定哪个 Fortran 编译器生成了 ".mod"文件?

    c - sizeof() 具有零长度数组成员的结构

    c - 计算C中的字符串长度

    c - 当 abcde 既是类型又是指针时,C 中的 sizeof(abcde)