Fortran Coder

查看: 28|回复: 4
打印 上一主题 下一主题

[数值问题] generic interface无法区分c_float与real

[复制链接]

48

帖子

14

主题

0

精华

专家

F 币
461 元
贡献
165 点
跳转到指定楼层
楼主
发表于 昨天 21:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面的代码对c_float接口和real接口的函数进行重载:
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
program main

    use iso_c_binding
    implicit none
    
    interface print_number
        procedure:: print_number_real, print_number_c_float
    end interface
  
    
    call print_number(1.0)
    
    
    contains
    
        subroutine print_number_real(a)
            real:: a
            print*, a
        
        end subroutine
        
        subroutine print_number_c_float(a)
            real(c_float):: a
            print*, a
        
        end subroutine

end program


提示错误:Error: Ambiguous interfaces in generic interface 'print_number' for 'print_number_real' at (1) and 'print_number_c_float' at (2)

难道是编译器把c_float和real当成同一种类型了吗?

48

帖子

14

主题

0

精华

专家

F 币
461 元
贡献
165 点
5#
 楼主| 发表于 12 小时前 | 只看该作者
楚香饭 发表于 2025-7-17 08:40
本质上都是 float32,32位浮点。
重载看他本质上的类型,而不是看他取了个什么别名。 ...

是的,c_float只是一个别名。
感谢刘涛解答~

744

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
736 元
贡献
374 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

地板
发表于 12 小时前 | 只看该作者
本质上都是 float32,32位浮点。
重载看他本质上的类型,而不是看他取了个什么别名。

48

帖子

14

主题

0

精华

专家

F 币
461 元
贡献
165 点
板凳
 楼主| 发表于 13 小时前 | 只看该作者
确实是这样,已解决。

48

帖子

14

主题

0

精华

专家

F 币
461 元
贡献
165 点
沙发
 楼主| 发表于 昨天 21:43 | 只看该作者
GCC version 14.1.0 和 intel fortran 2021.13.1 皆是如此。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-7-17 21:37

Powered by Tencent X3.4

© 2013-2025 Tencent

快速回复 返回顶部 返回列表