gpt4 book ai didi

enums - 如何在 Fortran 中进行多个枚举类型?

转载 作者:行者123 更新时间:2023-12-05 04:29:33 32 4
gpt4 key购买 nike

我尝试在 Fortran 中声明几种枚举类型。

这个有趣的简单示例很好地说明了我的问题:

program Main

enum, bind(c)
enumerator :: Colors = 0
enumerator :: Blue = 1
enumerator :: Red = 2
enumerator :: Green = 3
end enum

enum, bind(c)
enumerator :: Size = 0
enumerator :: Small = 1
enumerator :: Medium = 2
enumerator :: Large = 3
end enum

integer(kind(Colors)) :: myColor

myColor = Green

if (myColor == Large) then
write(*,*) 'MyColor is Large'
end if

end program Main

我还尝试将此枚举包含在一个类型和许多其他东西中,但都没有用。

在这里我可以比较ColorsSize。例如,在 C 中,当我声明 colorsize typedef 枚举时,我没有这样的问题,因为这两种类型是不同的。

在 Fortran 中有多个枚举类型是否存在简单的解决方案?

否则,我想用一个保存值的整数成员声明几种类型,然后创建接口(interface)来重载我需要的运算符(比较、矫揉造作等)。我不确定该解决方案是否可行,而且我可以做到。

最佳答案

Fortran 没有您希望使用的枚举类型。1

Fortran 中的枚举是一组枚举器。题目的程序有两个。

枚举数本身是一种命名(整数)常量,可与 C 的相应枚举类型互操作。它们的存在是为了 C 互操作性,而不是在 Fortran 中提供类似的功能。

问题中的枚举器 GreenLarge 是两个值为 3 的命名整数常量(某些,可能是不同的类型)。 Green==Large 是一个真实的表达式,无论常量参数的种类如何。

Fortran 中没有将变量限制为枚举值的机制。常量可以等效地声明为

integer(kind=enum_kind1) :: Green = 3_enum_kind1
integer(kind=enum_kind2) :: Large = 3_enum_kind2

对于适当的类型值(在这种情况下很可能是相同的:C_INT),Fortran 程序不会知道有什么区别。

如果您希望在 C 和类似语言中存在的意义上使用枚举类型,则必须使用非内在方法(如问题中所暗示)。


1 当前的 2018 年语言修订版就是这种情况。目前,有人提议下一次修订(暂定为 2023 年)以包含更接近此处所需的枚举类型。此规范在一个特定的 7.6.2 中给出 working draft .

关于enums - 如何在 Fortran 中进行多个枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72292020/

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