循环开头可以有标签吗
Can do loops have a label at the beginning
目前我正在学习 Fortran!
Do 循环是否可以在开头以及 do
关键字之后有 label
,如示例所示??
program sample
implicit integer(a-z)
integer :: b = 20
10 do 15 i = 1, 5
b = b + i
15 end do
if (b .eq. 35) go to 10
print *, b
end program
如果不是,do statement
(带示例程序)中标签的正确使用方法是什么??
引用现行标准(F2018 6.2.5):
Any statement that is not part of another statement, and that is not preceded by a semicolon in fixed form, may begin with a statement label
像这样的 DO 语句不是另一个语句的一部分:是的,它可能被标记。
也就是说,当您将它用作 go to
目标时,您可以认为有 个标记而不是标记 DO 语句。
此外,您也应该尽量避免使用 15
标签。它不仅是多余的(带标签的语句是 end do
),而且“带标签的 DO 语句”)已经过时,可能会从标准中删除。 (“非块 DO 构造”,其中标记的语句不是 end do
,已在 Fortran 2018 中删除,因此删除不是一个空洞的威胁。)
这些点一起给出了没有任何标签且没有go to
:
的程序
implicit none
integer :: b, i
b=20
do
do i = 1, 5
b = b + i
end do
if (b .ne. 35) exit ! or /= instead of .ne.
end do
print *, b
end
(我也使用了 implicit none
并使用了 b
的赋值而不是初始化。)
总的来说,虽然你可以在很多地方放置标签,但应该使用标签的地方非常非常少。
“另一条语句的一部分”使类似以下行的行变坏:
if (.true.) 10 print *, "Hello"
这里的PRINT语句是一个action语句,它是IF语句的一部分。虽然 IF 语句作为一个整体可能被标记,但 PRINT 语句是该语句的一部分,因此可能没有被标记。
目前我正在学习 Fortran!
Do 循环是否可以在开头以及 do
关键字之后有 label
,如示例所示??
program sample
implicit integer(a-z)
integer :: b = 20
10 do 15 i = 1, 5
b = b + i
15 end do
if (b .eq. 35) go to 10
print *, b
end program
如果不是,do statement
(带示例程序)中标签的正确使用方法是什么??
引用现行标准(F2018 6.2.5):
Any statement that is not part of another statement, and that is not preceded by a semicolon in fixed form, may begin with a statement label
像这样的 DO 语句不是另一个语句的一部分:是的,它可能被标记。
也就是说,当您将它用作 go to
目标时,您可以认为有
此外,您也应该尽量避免使用 15
标签。它不仅是多余的(带标签的语句是 end do
),而且“带标签的 DO 语句”)已经过时,可能会从标准中删除。 (“非块 DO 构造”,其中标记的语句不是 end do
,已在 Fortran 2018 中删除,因此删除不是一个空洞的威胁。)
这些点一起给出了没有任何标签且没有go to
:
implicit none
integer :: b, i
b=20
do
do i = 1, 5
b = b + i
end do
if (b .ne. 35) exit ! or /= instead of .ne.
end do
print *, b
end
(我也使用了 implicit none
并使用了 b
的赋值而不是初始化。)
总的来说,虽然你可以在很多地方放置标签,但应该使用标签的地方非常非常少。
“另一条语句的一部分”使类似以下行的行变坏:
if (.true.) 10 print *, "Hello"
这里的PRINT语句是一个action语句,它是IF语句的一部分。虽然 IF 语句作为一个整体可能被标记,但 PRINT 语句是该语句的一部分,因此可能没有被标记。