您可以使用使用表格-Wno-[warningname]
。任何未明确否定的警告仍会报告。对于你的情况,你可以使用:
-Wall -Wno-integer-division
编辑:注意-Wall
没有被所有的编译器(例如,ifort)。也就是说,如果您使用-Wall
,并且想要避免使用-Wno-integer-division
,那么我不知道有什么方法可以防止整数除法警告,而无需使用real
和int
来进行正确的转换。
然而,正如你宁可不使用编译器选项,找到多余的类型转换的麻烦,那么只要你生活中可以没有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)
的子程序。然后,任何尝试改变它的值都会产生错误,所以你会得到相同的行为。
@HighPerformanceMark这是一个简化的例子。问题代码的计算时间较长,其他文件中定义的参数依赖于预处理器定义,但仍需要整数除法,其中截断是预期的。 – Jellby
我没有这个版本的gfortran玩,但如果完全有效的代码默认生成警告,那真的是不可接受的。它是否足够聪明,以防止出现确切的整数结果(例如:'n *(n + 1)/ 2'? – agentp
@agentp它不是默认情况下,它与'-Wall'一起使用,它会给出许多其他警告一些有效的代码(隐式转换,未使用的变量等)我不喜欢的是,似乎没有合理的,紧凑的编写代码的方式来避免警告(我不会调用'a = int (real(n)/ m)'“合理)但是,如果'n = 10',警告消失,我想知道为什么它没有给出”可能被截断“的警告(即不是常量)结果:如果(可能是故意的)截断结果值得警告,那么肯定可能截断的结果也是值得的 – Jellby