gpt4 book ai didi

fortran - Fortran 中自动类型转换(类型转换)如何工作?

转载 作者:行者123 更新时间:2023-12-02 18:38:24 24 4
gpt4 key购买 nike

我正在使用 gfortran 编译器。还请告诉我 gfortran 在执行自动类型转换(类型转换)时是否使用了 Fortran 标准以外的其他内容。

最佳答案

赋值由 Fortran 2008 第 7.2 节定义。值得注意的是 Cl。 7.2.1.3 第 8 段:

For an intrinsic assignment statement where the variable is of numeric type, the expr may have a different numeric type or kind type parameter, in which case the value of expr is converted to the type and kind type parameter of the variable according to the rules of Table 7.9.

Table 7.9: Numeric conversion and the assignment statement

Type of variable     Value Assigned
integer INT(expr , KIND = KIND (variable))
real REAL(expr , KIND = KIND (variable))
complex CMPLX(expr , KIND = KIND (variable))

这意味着任何表达式 (expr) 都将隐式转换为其所分配变量的类型和种类。对于字符类型、派生类型和其他任何类型,请参阅标准。

另请注意,Fortran 仅在赋值和初始化期间执行此类转换,但不会在过程调用等上下文中执行此类转换。例如,考虑以下过程:

subroutine sub1(a)
implicit none
integer :: a
print *, a
end subroutine

此过程有一个整数类型的虚拟参数。例如,您不能这样做:

call sub1(1.d0)

因为这会导致实际参数和虚拟参数之间的类型不匹配。

但是,您可以这样做:

integer :: a
a = 1.d0 !implicitly interpreted as: a = INT(1.d0, kind=kind(a))
call sub1(a)

因为隐式转换是为赋值定义的。

<小时/>

gfortran (5.1.0) 中隐式类型转换标准的唯一记录扩展是赋值期间逻辑类型和整数类型之间的转换。

参见:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Implicitly-convert-LOGICAL-and-INTEGER-values.html#Implicitly-convert-LOGICAL-and-INTEGER-values

  • 逻辑.true.转换为整数1
  • 逻辑.false.转换为整数0
  • 整数 0 转换为 .false。
  • 任何其他整数都会转换为 .true。
<小时/>

请注意,如果您可以不使用旧扩展,那么就不要使用它们。使用它们意味着您的程序不是标准的 Fortran,因此任何编译器都可以因不正确而拒绝它。此扩展旨在允许遗留代码使用现代编译器进行编译,而不是在新代码中使用。

关于fortran - Fortran 中自动类型转换(类型转换)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30758529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com