90793


C言語で関数ポインタを用いて動的に関数の中身を変えることができますが、これと似たようなことをFortranで行いたいです。  
どのようにしたらよいのでしょうか。

[code]

    #include <stdio.h>
    int add(int x, int y){
        return x+y;
    }
    int sub(int x, int y){
        return x-y;
    }
    
    int main()
    {
        int flag=2;
        int(*func)(int, int);
        if(flag==1){
            func = add;    
        }else{
            func = sub;
        }
    
        printf("%d\n", func(1,2));
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2022-08-27T07:47:53.827
90791
2022-08-27T09:26:48.850
51178
question
fortran
FortranでC言語でいうところの関数ポインタのようなことがしたい


[手続きポインタ](https://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_8_2.html)という、関数ポインタと似た機能があります。

例: <https://godbolt.org/z/T5zY7rvdM>

[code]

    program test1
        implicit none
    
        interface
            function my_func_type(x, y)
                implicit none
                integer, intent(in) :: x, y
                integer :: my_func_type
            end function
        end interface
    
        integer, parameter :: flag = 2
        procedure(my_func_type), pointer :: func => null()
        if (flag == 1) then
            func => add
        else
            func => sub
        end if
        print *, func(1, 2)
    contains
        function add(x, y)
            implicit none
            integer, intent(in) :: x, y
            integer :: add
            add = x + y
        end function
    
        function sub(x, y)
            implicit none
            integer, intent(in) :: x, y
            integer :: sub
            sub = x - y
        end function
    end program
    
[/code]


CC BY-SA 4.0
2022-08-27T09:26:48.850
90793
2022-08-27T09:26:48.850
36010
90791
answer