Fortran 2008的return语句是否过时?除子程序/函数末尾外还有何用途?
Great question! Let's clear up the confusion around the return statement in Fortran 2008 once and for all.
首先:RETURN语句并没有过时!
You're right that writing return at the very end of a subroutine or function feels unnecessary—and that's because it is! Fortran automatically returns control to the caller when execution reaches the end of a program unit (subroutine, function, or module procedure). So omitting the final return is totally standard and widely accepted; it doesn't make your code incorrect or non-compliant with Fortran 2008.
That said, some programmers still choose to include it for stylistic reasons—either to make the exit point explicit, or to keep consistency with procedures that use early returns. Both approaches are perfectly valid.
那么,RETURN还有哪些实用功能?
The real value of return comes from its ability to control flow beyond just the final exit. Here are the key use cases:
Early exit from procedures
This is the most common and practical use. If your procedure hits a condition where continuing execution doesn't make sense (like invalid input, an error state, or a trivial case that's already handled), you can usereturnto bail out immediately. This avoids messy nestedif-elseblocks and makes your code more readable.Example:
subroutine analyze_results(results, num_samples) real, intent(in) :: results(:) integer, intent(in) :: num_samples if (num_samples <= 0) then print *, "Error: Number of samples must be positive" return ! No need to proceed with invalid input end if if (size(results) /= num_samples) then print *, "Error: Results array size doesn't match sample count" return end if ! Rest of the analysis logic goes here end subroutine analyze_resultsDirect value return in functions
For functions, you can usereturn <value>to directly send back a result, instead of assigning it to the function name. This is equivalent to assigning the value, but can be more concise in simple cases.Example:
real function calculate_area(radius) real, intent(in) :: radius if (radius < 0.0) then calculate_area = 0.0 ! Handle invalid input return end if return 3.14159 * radius**2 ! Directly return the computed area end function calculate_areaRequired in block data units
While block data units are less commonly used in modern Fortran (module variable initialization is preferred), if you do work with them to initialize common blocks, the standard requires that the execution section ends with areturnstatement. This is a niche case, but it's still a valid use of the statement.
总结
To wrap up: return is far from obsolete in Fortran 2008. Its optional nature at the end of procedures is just a convenience, but its ability to enable clean early exits and direct value returns makes it a valuable tool for writing clear, maintainable code.
内容的提问来源于stack exchange,提问作者rsaavedra

