【问题标题】:Disabling -Werror for -Wimplicit-interface为 -Wimplicit-interface 禁用 -Werror
【发布时间】:2016-01-13 15:19:43
【问题描述】:

在 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)

【问题讨论】:

  • 这似乎与 gcc-5 的预期一样。
  • 有趣,这可能是这个问题的答案。

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


【解决方案1】:

这不是对问题的明确回答。我发现它足够有教育意义,而且太长了,不能作为评论。

正如您刚刚发现的,如果将-Werror-Wno-error=implicit-interface 结合使用,您可能无法实现您想要的效果。让我解释一下:相对于我们在doc中的内容,尤其是下面这句话,

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

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

'-w' 永久关闭所有警告,无论设置什么特定警告

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

【讨论】:

    【解决方案2】:

    正如@innoSPG 所指出的,实际行为与手册中的声明不符。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 2021-08-03
      • 1970-01-01
      相关资源
      最近更新 更多