如何避免整数除法警告?

时间:2017-08-26 11:49:10

标签: fortran compiler-warnings gfortran

在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),我宁愿修改代码而不是使用特定文件的编译器选项,特定的编译器版本等。

1 个答案:

答案 0 :(得分:2)

您可以使用-Wno-[warningname]表单turn off specific warnings。仍然会报告任何未明确否定的警告。对于您的情况,您可以使用:

-Wall -Wno-integer-division

编辑:请注意,所有编译器都不使用-Wall(例如,ifort)。也就是说,如果您使用-Wall,并希望避免使用-Wno-integer-division,那么我不知道在不使用real和{{1的情况下阻止整数除法警告的任何方法进行适当的转换。

但是,由于您不想使用编译器选项,并且发现额外的类型转换很麻烦,只要您可以在int不是a的情况下生活(也就是说,只是normal 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的子程序。然后,任何改变其值的尝试都会发出错误,因此您会得到相同的行为。

相关问题