2013-11-01 23 views
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 

我該怎麼做這樣的子程序。我正在考慮返回一個標誌,但我可能會使用全局值。任何人有想法?

回答

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子句告訴編譯器子程序可以用它的參數做些什麼;
  • 我的例子很簡單,你可能會想調整它以滿足你的需求。
2

你也可以用一個函數來完成它。說出來的偶數

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 
+0

謝謝您的回答返回true!但由於某種原因,我不得不使用子程序的原因是沒有計劃,我嘗試用其他編程語言來連接它。 – Xiao