CASE 构造

CASE 构造具有简明语法,用于至多选择要执行的多个语句块中的一个。 将每个 CASE 语句的案例选择器与 SELECT CASE 语句的表达式进行比较。

读取语法图跳过可视语法图SELECT_CASE_statement

读取语法图跳过可视语法图CASE_statement_block

读取语法图跳过可视语法图END_SELECT_statement
SELECT_CASE_statement
定义要求值的 case 表达式。 请参阅 SELECT CASE 以获取语法详细信息。
END_SELECT_statement
终止 CASE 构造。 请参阅 END (构造) 以获取语法详细信息。
CASE_statement_block

读取语法图跳过可视语法图CASE_statement

读取语法图跳过可视语法图statement_block
CASE_statement
定义 case 选择器,它是一个值、一组值或缺省情况,随后的语句块将对其执行。 请参阅 CASE 以获取语法详细信息。

在构造中,每个 case 值必须与 case 表达式的类型相同。

CASE 构造按如下所示执行:
  1. 对 case 表达式进行求值。 生成的值是 case 索引。
  2. 案例索引将与每个 CASE 语句的 case_selector 进行比较。
    • 如果发生匹配,那么将执行与该 CASE 语句相关联的语句块。
    • 如果未出现匹配性,但存在缺省 case_selector ,那么将执行与缺省 case_selector 相关联的语句块。
    • 否则,不会执行语句块。
  3. 构造的执行已完成,并且控制权将转移到 END SELECT 语句之后的语句。

CASE 构造包含零个或多个 CASE 语句,这些语句可以各自指定值范围,尽管 CASE 语句指定的值范围不能重叠。

缺省 case_selector 可由其中一个 CASE 语句指定。 缺省 CASE_statement_block 可以出现在 CASE 构造中的任何位置; 它可以出现在开头或结尾,也可以出现在其他块之间。

如果指定了构造名,那么它必须出现在 SELECT CASE 语句和 END SELECT 语句上,并且可以选择出现在任何 CASE 语句上。

只能从 CASE 构造中分支到 END SELECT 语句。 CASE 语句不能是分支目标。

Migration Tip:

使用 CASE 代替块 IF

FORTRAN 77 源代码
       IF (I .EQ.3) THEN
            CALL SUBA()
       ELSE IF (I.EQ. 5) THEN
            CALL SUBB()
       ELSE IF (I .EQ. 6) THEN
            CALL SUBC()
       ELSE
            CALL OTHERSUB()
       ENDIF
       END
Fortran 90/95/2003 源代码:
        SELECTCASE(I)
          CASE(3)
            CALL SUBA()
          CASE(5)
            CALL SUBB()
          CASE(6)
            CALL SUBC()
          CASE DEFAULT
            CALL OTHERSUB()
        END SELECT
        END

示例

      ZERO: SELECT CASE(N)

        CASE DEFAULT ZERO
             OTHER: SELECT CASE(N) ! start of CASE construct OTHER
                CASE(:-1)
                   SIGNUM = -1     ! this statement executed when n≤-1
                CASE(1:) OTHER
                    SIGNUM = 1
             END SELECT OTHER      ! end of CASE construct OTHER
        CASE (0)
          SIGNUM = 0

      END SELECT ZERO
      END

相关信息