我想编写一段代码,可以找到我机器的所有可用整数种类,并打印所有这些代码的范围。
找到种类不是困难的部分,使用selected_int_kind
我能够迭代所有可用的种类编号,直到我得到一个-1值,表明编译器不能再表示整数。
此过程产生了一个可用种类编号的数组,例如(/ 1 2 4 8 16/)
(这是我的gfortran编译器的结果)
下一步是使用此数组定义5种不同的整数,并询问最大可表示整数是什么。 我的想法是使用一个可分配的整数,并每次使用其他类型的参数分配它,如
program main
integer,allocatable :: i
integer::j
integer,dimension(:)::nb_kind
call give_me_the_kinds(nb_kind)
for j=1,size(nb_kind)
allocate(i,kind=nb_kind(j))
print *,huge(i)
deallocate(i)
end program
但这对我没有用。有没有人有这方面的经验?我认为可以做到,但我不知道该怎么做。
答案 0 :(得分:1)
Fortran中不可能使用动态类型变量(从类型号直接变量到变量)。种类数必须是编译时常量。你能做的是:
program main
use iso_fortran_env, only : integer_kinds
implicit none
integer :: i
open(20,file="mykinds.f90",status="unknown",action="write")
write (20,'(A/A)') 'program main',' implicit none'
do i=1, size(integer_kinds)
write (20,'(A,I0,A,I0,A)') ' integer(kind=',integer_kinds(i),') :: i',i
end do
do i=1, size(integer_kinds)
write (20,'(A,I0,A,I0,A)') ' write (*,"(A,I0)") "integer(kind=',&
& integer_kinds(i),') huge = ", huge(i',i,')'
end do
write (20,'(A)') 'end'
close(20)
call execute_command_line ("gfortran mykinds.f90 && ./a.out")
end program main