代码之家  ›  专栏  ›  技术社区  ›  Denis

确保在第三方库中将Fortran公共变量初始化为零

  •  1
  • Denis  · 技术社区  · 8 年前

    我正在使用C++中的旧Fortran库。此库具有 debug.h 其中有多个公共块 int 定义了在整个库中用于控制终端输出的变量。

    问题是,当我在HPC集群上用gfortran 4.8.5编译这个库时,这些公共块变量不是零。然而,我在macOS或使用gfortran 7.2.0的Ubuntu上对它们没有任何问题。

    由于我根本不使用Fortran(我从C++中调用Fortran函数),我能想到的唯一解释是这些变量没有初始化为零。

    我有没有办法再次检查它们是否确实初始化为零,或者强制它们始终初始化为零?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Vladimir F Героям слава    8 年前

    Fortran变量本身不会设置为任何值,除非使用DATA语句(公共块的块内数据)或Fortran 90+初始化。在代码中为它们赋值之前,它们的值是未定义的。

    您可以使用GCC的编译器特定选项

    -finit-real=zero
    -finit-integer=0
    

    为变量设置初始值。更好的双重检查它确实包括公共块。

    看见 https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html

    推荐文章