如何避免整数除法警告?



在 gfortran 6 中,有一个新的警告-Winteger-division,当一个值被整数除法截断时会触发,如3/5.

假设这是预期的结果,有没有办法更改代码以不发出警告?例如:

program test
integer, parameter :: n = 3, m = 5
integer, parameter :: a = n/m
end program

至少比以下更麻烦:

integer, parameter :: a = int(real(n)/real(m))

我想继续使用-Wall(和-Werror(,我宁愿修改代码而不是摆弄特定文件、特定编译器版本等的编译器选项。

您可以使用表单关闭特定警告-Wno-[warningname].任何未明确否定的警告仍会报告。对于您的情况,您可以使用:

-Wall -Wno-integer-division

编辑:请注意,并非所有编译器都使用-Wall(例如,ifort(。也就是说,如果您使用-Wall,并希望避免使用-Wno-integer-division,那么我不知道有什么方法可以在不使用realint进行正确转换的情况下防止整数除法警告。

但是,由于您不想使用编译器选项,并且发现额外的类型转换很麻烦,那么只要您可以a不成为parameter(即只是一个普通的integer(,您就可以编写一个为您执行所有显式转换的过程。例如:

module utility_fcns
implicit none
contains
integer function intdiv(i1, i2) result(this)
integer, intent(in) :: i1, i2
this = int( real(i1) / real(i2) )
end function intdiv
end module utility_fcns

program test
use utility_fcns, only: intdiv
implicit none
integer :: a
integer, parameter :: n = 3, m = 5
a = intdiv(n,m)
print *, a
end program test

所以,使用intdiv(n,m)少打字,但结果不是参数......

如果这是一个交易破坏者,那么请考虑将a传递给带有intent(in)的子例程。然后,任何更改其值的尝试都会发出错误,因此您将获得相同的行为。

相关内容

  • 没有找到相关文章

最新更新