1

我不想使用全局值,这对大程序来说是危险的。代码是这样的

subroutine has_key(id)
  if (true) then 
     return 1
  else
     return 0
  end if
end subroutine

subroutine main
   if(has_key(id))
      write(*,*) 'it works!'
end subroutine

我怎么能用子程序做这样的事情。我正在考虑返回一个标志,但我可能会使用一个全局值。有人有想法吗?

4

2 回答 2

2

像这样

subroutine test(input, flag)
   integer, intent(in) :: input
   logical, intent(out) :: flag
   flag = input>=0
end subroutine

call test(3,myflag)

将 myflag 设置为.true.

笔记

  • 子程序通过它们的参数列表返回值;
  • 使用该intent子句告诉编译器子程序可以用它的参数做什么;
  • 我的示例非常简单,您可能希望根据自己的需要对其进行调整。
于 2013-11-01T15:54:00.113 回答
2

你也可以用一个函数来做。假设它对偶数返回 true

logical function has_key(id)
   integer, intent(in):: id
   has_key = mod(id,2) .eq. 0
end function has_key

program main
   do ii = 1, 4
      if(has_key(ii))
         print *, ii, ' has key'
      else
         print *, ii, ' no key'
      end if
   end do
end program
于 2013-11-01T18:53:39.640 回答