gpt4 book ai didi

c - F77 中的不透明指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:26 25 4
gpt4 key购买 nike

我有一个项目,一半是 C 语言,一半是 Fortran 77。[不,不是 Fortran 90 或 03,Fortran 77。]如果我可以将 C 端生成的指针传回 Fortran,代码会更清晰,然后根据需要将它们传回以处理其他 C 函数。事实上,C 代码充满了本不应该是全局的全局变量,否则就处于成为非结构化困惑的边缘。那么是否有任何合理可靠的方法在 C 和 Fortran 之间传递不透明指针?

最佳答案

如果您在 32 位平台上,请考虑将指针转换为整数并将这些整数传递给 Fortran 代码。当 Fortran 将它们传回时,将整数重新转换回指针,交叉手指并使用。

根据我的内存(从 25 多年前开始),Fortran 77 倾向于通过指针将所有内容传递给 C - 字符串以长度传递,数组以其维度传递。

如果您使用的是 64 位平台,则必须弄清楚 Fortran 77 编译器是否提供任何 8 字节整数(INTEGER*8?)——我怀疑它不会(已基本确认)通过查看 GNU documentation ;如果您使用的是 Fortran 2003,您的状态似乎会更好)。如果是这样,同样的技巧也有效。如果没有,您将进入更加危险的领域。

您可以尝试 - 反对建议 - 使用 double 和指针的 union 。在 C 中,您将从 C 代码指针中设置 union 中的指针,然后将 union 中的 double 复制到 Fortran REAL*8 中,只要没有人触及它,除了复制它或传递它回来,如果众神对你的努力微笑,也许你会没事的。不过,最有可能的是,整个事情都会爆发——这种 union 有一种令人难以置信的能力,可以检测到如果某些东西不起作用,客户什么时候最恼火,然后会在正确的时刻继续爆发——演示的一部分, 或节目上线十五分钟后。

要考虑的替代方案(仍然咬紧牙关)是 64 位指针和两个 32 位整数数组的并集,然后要求 Fortran 代码在需要返回时传递两个整数数组一个(64 位)指针。显然,一个整数的数组适用于 32 位代码;也许只需要调用代码在所有情况下都传递两个整数的数组,将 32 位指针情况下未使用的整数值归零?这为您提供了向前迁移的能力。

关于c - F77 中的不透明指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1580164/

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