在子例程中捕获别名

亚历山大·沃格特

有没有一种方法可以检查是否在Fortran子例程中发生别名,或者至少可以告诉编译器发出警告?

考虑下面的示例(比较简单):

module alias
contains
  subroutine myAdd(a, b, c)
    integer,intent(in)    :: a, b
    integer,intent(inout) :: c

    c = 0
    c = a + b
  end subroutine
end module

program test
  use alias
  integer :: a, b

  a = 1 ; b = 2
  call myAdd(a, b, b)
  print *, b, 'is not 3'
end program

在此,结果在子例程中设置为零。如果给定相同的变量作为输入和输出,则结果(显然)是错误的。有没有办法在运行时或编译时捕获这种别名?

MSB

是的,gfortran将使用编译器选项检测到一些别名-Waliasing,但是,参数必须具有intentinout它不适用于您的示例,因为您已将参数声明cintent(inout)在此示例中,您可以仅将意图更改为,out因为c未使用的输入值他们尝试编译器选项!gfortran输出:

alias.f90:17.16:

  call myAdd(a, b, b)
                1
Warning: Same actual argument associated with INTENT(IN) argument 'b' and INTENT(OUT) argument 'c' at (1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在子例程中捕获别名

来自分类Dev

调用参数为指针别名的子例程

来自分类Dev

声明全局perl子例程或全局别名

来自分类Dev

子例程中调用的子例程中的Application.ScreenUpdating

来自分类Dev

Perl子例程中的本地$ _

来自分类Dev

PERL中的子例程原型

来自分类Dev

Perl子例程中的本地$ _

来自分类Dev

子例程在其调用例程的堆栈中写入是否安全?

来自分类Dev

在并行环境中调用子例程

来自分类Dev

在Fortran子例程中读取许多文件

来自分类Dev

检查Perl中是否存在子例程

来自分类Dev

VBA在OnAction中包含子例程的参数

来自分类Dev

从C调用模块中的子例程

来自分类Dev

获取子例程中数组内容的哈希

来自分类Dev

在CLLE中显示QMODEL串行的子例程

来自分类Dev

修改子例程中的任意数量的变量

来自分类Dev

在fortran的子例程中更新数组的值

来自分类Dev

perl中的子例程以执行#ARGV条目

来自分类Dev

在CLLE中显示QMODEL串行的子例程

来自分类Dev

Verilog中的子例程(由ModelSim使用)

来自分类Dev

Subshell /子进程中的别名

来自分类Dev

使用子查询中的别名

来自分类Dev

C中是否有类似于Fortran中的子例程的子例程?

来自分类Dev

C中是否有类似于Fortran中的子例程的子例程?

来自分类Dev

在子例程(XML :: LibXML)中处理子节点

来自分类Dev

无法在mysql中添加子查询别名

来自分类Dev

子查询中的SQL Server重用别名

来自分类Dev

正确转义 git 别名中的子命令

来自分类Dev

Excel VBA在数组中存储函数或子例程