以下是一些示例代码:
! Author: Svetlana Tkachenko svetlana@members.fsf.org
! License: GPLv3 or later
subroutine myprint(var)
! integer :: var
! print *, 'Hi, my ', var
end subroutine
module testing
type triangle
integer :: point(3)
end type
end module
program main
use testing
type(triangle) :: mytriangle
mytriangle%point(1)=5
call myprint(mytriangle%point(1))
end program
它适用于ifort -c file.f90
,但ifort -warn all -c file.f90
会导致错误:
blah.f90(4): warning #6717: This name has not been given an explicit type. [VAR]
subroutine myprint(var)
-------------------^
blah.f90(4): remark #7712: This variable has not been used. [VAR]
subroutine myprint(var)
-------------------^
blah.f90(19): error #6633: The type of the actual argument differs from the type of the dummy argument. [POINT]
call myprint(mytriangle%point(1))
---------------------------^
compilation aborted for blah.f90 (code 1)
为什么-warn all
会抛出错误?该手册页明确指出all
不包含错误。
我知道我可以修复代码,但我正在尝试为遗留代码库设置测试套件,并且我希望能够在开始进行代码更改之前运行带有警告的编译测试。
答案 0 :(得分:5)
选项-warn all
包括选项-warn interfaces
煽动接口检查外部过程,可以确定这些接口。这通常用于使用选项-gen-interfaces
编译的单独文件中的外部过程生成的接口。
此选项-warn interfaces
负责出现错误消息。这可以检查外部子程序的接口,因为该子程序与引用它的程序在同一个文件中。您有两种选择:
-gen-interfaces
; -warn interfaces
。对于后者,您可以使用
ifort -warn all -warn nointerfaces ...
除了界面检查外还有其他所有警告。
然而,优选每个都具有匹配的界面。那么应该注意,
subroutine myprint(var)
! integer :: var
end subroutine
和
subroutine myprint(var)
integer :: var
end subroutine
在存在默认隐式类型规则时,是两个非常不同的东西。它们可能具有相同的最终效果,没有可执行语句(等),但特征是完全不同的。