为-Wimplicit-interface禁用-Werror

时间:2016-01-13 15:19:43

标签: gcc compiler-errors fortran compiler-warnings gfortran

在GCC中禁用将特定警告视为错误的正确标志或标志顺序是什么?我想为-Wimplicit-interface做到这一点。

>cat test.f90 
 call s
end

> gfortran -c -Werror -Wimplicit-interface -Wno-error=implicit-interface test.f90 -o test.o
test.f90:1.7:

 call s
       1
Warning: Procedure 's' called with an implicit interface at (1)

>ls test*
test.f90

未生成test.o

没有-Werror就行了

> gfortran -c -Wimplicit-interface -Wno-error=implicit-interface test.f90 -o test.o
test.f90:1.7:

 call s
       1
Warning: Procedure 's' called with an implicit interface at (1)
> ls test*
test.f90  test.o

GCC版本为gcc version 4.9.2 20141030 (Cray Inc.) (GCC)

2 个答案:

答案 0 :(得分:1)

这不是问题的明确答案。我发现它足够教育,而且时间太久,不能作为评论。

正如您刚刚发现的那样,如果合并-Werror-Wno-error=implicit-interface,您可能无法实现所需目标。让我解释一下:与doc中的内容相反,特别是下面的句子,

  

正面和负面形式的综合影响是,更具体的选项优先于不太具体的选项,与其在命令行中的位置无关。

似乎在实际实施中并非如此。我最近遇到了类似的问题,通过谷歌搜索,我发现this包含了这句话:

  

' -w'无论

上设置了什么特定警告,都会永久设置所有警告

它实际上建议通过使用一些非特定选项,实际实现不允许您更改非特定选项中包含的特定选项。

答案 1 :(得分:0)

正如@innoSPG指出的那样,实际行为不符合手册中的要求。

@MarkGlisse的评论显示,这已经改变了GCC 5.因此它可能是一个错误。

因此,解决方案是使用最新版本,或者不使用-Werror-Wimplicit-interface之一。

或者在任何地方真正提供显式接口,但这可能会有问题,因为MPI库在mpi模块中提供的显式接口数量不同。