首页 > 解决方案 > 如何在do循环的每一步中创建子程序或函数的名称

问题描述

我的 IDE 是:

代码::Blocks 17.12 ( 使用 tdm-gcc-5.1.0-3 )

示例代码是:

program test_code

implicit none

integer                 :: i
integer,      parameter :: nn = 3
integer                 :: tmp_array(nn)
character(11)           :: name_tmp
character(*), parameter :: fmt_tmp = '("fun_name_",i2.2)'

do i = 1, nn

! solution - if statement

  if ( i == 1 ) tmp_array(i) = fun_name_01(nn,i)

  if ( i == 2 ) tmp_array(i) = fun_name_02(nn,i)

  if ( i == 3 ) tmp_array(i) = fun_name_03(nn,i)

  write(*,*) tmp_array(i)

! solution - avoid if statement

  write( name_tmp, fmt_tmp ) i

  tmp_array(i) = name_tmp(nn,i)

  write(*,*) tmp_array(i)

end do

contains

function fun_name_01(nn_tmp,i_tmp) result(result_tmp)

  integer, intent(in)  :: nn_tmp, i_tmp
  integer              :: result_tmp

  result_tmp = nn_tmp + i_tmp

end function fun_name_01

function fun_name_02(nn_tmp,i_tmp) result(result_tmp)

  integer, intent(in)  :: nn_tmp, i_tmp
  integer              :: result_tmp

  result_tmp = nn_tmp + i_tmp

end function fun_name_02

function fun_name_03(nn_tmp,i_tmp) result(result_tmp)

  integer, intent(in)  :: nn_tmp, i_tmp
  integer              :: result_tmp

  result_tmp = nn_tmp + i_tmp

end function fun_name_03

end program test_code

构建项目后,我收到此错误消息:

C:\Users\aleks\Desktop\test_code\main.f95|25|Error: Unclassifiable statement

我想要做的是避免每个具有不同名称的函数的 if 语句。有没有什么办法,首先在每个步骤中将函数名写入一个变量name_tmp,直到一个 do 循环,然后使用该变量作为被调用函数的名称?

标签: fortrangfortran

解决方案


推荐阅读