未初始化复数的Fortran警告

未初始化复数的Fortran警告,fortran,compiler-warnings,complex-numbers,Fortran,Compiler Warnings,Complex Numbers,我有一个fortan函数,它对复数的虚部执行模运算。这里它把虚部减少到-.5 complex(KIND=dpc) function mod_2pi(z) result(mod_z) complex(KIND=dpc), INTENT(IN) :: z mod_z = z-iunit*nint(aimag(z)) end function mod_2pi 然而,当我通过gfortran编译器运行它时,我得到以下警告 warning: ‘IMAGPART_EXPR <psi>’

我有一个fortan函数,它对复数的虚部执行模运算。这里它把虚部减少到-.5
complex(KIND=dpc) function mod_2pi(z) result(mod_z)
  complex(KIND=dpc), INTENT(IN) :: z
  mod_z = z-iunit*nint(aimag(z))
end function mod_2pi
然而,当我通过gfortran编译器运行它时,我得到以下警告

warning: ‘IMAGPART_EXPR <psi>’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     mod_z = z-iunit*nint(aimag(z))
 ^

warning: ‘REALPART_EXPR <psi>’ may be used uninitialized in this function [-Wmaybe-uninitialized]
      mod_z = z-iunit*nint(aimag(z))
 ^
警告:“IMAGPART_EXPR”可在未初始化的情况下在此函数中使用[-Wmaybe uninitialized]
mod_z=z-iunit*nint(省(z))
^
警告:“REALPART_EXPR”在此函数中可能未初始化使用[-Wmaybe uninitialized]
mod_z=z-iunit*nint(省(z))
^

出什么事了?据我所知,实部和虚部都将被初始化?是否有一种在不禁用此标志的情况下解决此问题的方法?

您是否认为,由于编译器会产生虚假警告,因此使用这种方法来破坏好代码真的值得?我个人经常使用
-Wno(可能未初始化)
,因为这些虚假警告非常常见。不仅是复数,而且在更多的情况下。使我谨慎的是
psi
。在调用代码中有这样的变量吗?由于内联,警告可能位于一个奇怪的位置。@VladimirF点,没有解决方法;)。调用此函数的coed部分的形式为
psi=mod_2pi(psi)
,因此那里会显示一个
psi
。因此,如果存在可能导致
psi
无法初始化的代码路径,则必须检查调用代码。实际功能并不重要。谢谢。解决了它。罪魁祸首是初始化是在a
if(..)then psi=。。。否则psi=。。。如果
构造,则结束。因此,初始化是有保证的,但编译器感到困惑。