在 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
),我宁愿修改代码也不愿为特定文件摆弄编译器选项,特定编译器版本等
最佳答案
您可以 turn off specific warnings使用 -Wno-[warningname]
形式。任何未明确否定的警告仍会报告。对于您的情况,您可以使用:
-Wall -Wno-integer-division
编辑:请注意,-Wall
并非被所有编译器使用(例如,ifort)。也就是说,如果您使用 -Wall
,并且想避免使用 -Wno-integer-division
,那么我不知道有什么方法可以防止整数除法警告使用 real
和 int
进行正确的转换。
然而,由于您宁愿不使用编译器选项,并且发现额外的类型转换很麻烦,那么只要您可以在 a
不作为 参数
的情况下生活(也就是说,只是一个普通的 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)
的子例程。然后,任何更改其值的尝试都会引发错误,因此您会得到相同的行为。
关于fortran - 如何避免整数除法警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45895020/