fortran与c语言接口参数传递混合编程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Sun Studio 12:Fortran 编程指南 Previous: 第 10 章 并行化 第 11 章 C-Fortran 接口 本章论述 Fortran 与 C 的互操作性方面的问题,内容仅适用于 Sun Studio Fortran 95 和 C 编译器的特定情况。 11.9 Fortran 2003 与 C 的互操作性简要说明了 Fortran 2003 标准第 15 部分中提到的 C 绑定功能。(此标准可以从国际 Fortran 标准 Web 站点?获得)。Fortran 95 编译器实现了标准中所述的这些功能。 如不特别注明,32 位 x86 处理器视为与 32 位 SPARC 处理器等同。对于 64 位 x86 处理器和 64 位 SPARC 处理器也是如此,只是 x86 系统未定义 REAL*16 和 COMPLEX*32 数据类型,这些数据类型只能用于 SPARC。 11.1 兼容性问题 大多数?C-Fortran 接口必须在以下这些方面全部保持一致: 函数和子例程的定义及调用 数据类型的兼容性 参数传递(按引用或按值) 参数的顺序 过程名(大写、小写或带有结尾下划线 (_)) 向链接程序传递正确的库引用 某些 C-Fortran 接口还必须符合: 数组索引及顺序 文件描述符和?stdio 文件权限 11.1.1 函数还是子例程? 函数一词在?C 和 Fortran 中有不同的含义。根据具体情况做出选择很重要: 在 C 中,所有的子程序都是函数;但?void?函数不会返回值。 在 Fortran 中,函数会传递一个返回值,但子例程一般不传递返回值。 当 Fortran 例程调用 C 函数时: 如果被调用的 C 函数返回一个值,则将其作为函数从 Fortran 中调用。 如果被调用的 C 函数不返回值,则将其作为子例程调用。 当 C 函数调用 Fortran 子程序时: 如果被调用的 Fortran 子程序是一个函数,则将其作为一个返回兼容数据类型的函数从 C 中调用。 如果被调用的 Fortran 子程序是一个子例程,则将其作为一个返回?int(与 Fortran?INTEGER*4?兼容)或?void?值的函数从 C 中调用。如果 Fortran 子例程使用交替返回,则会返回一个值,这种情况下它是?RETURN?语句中的表达式的值。如果?RETURN?语句中没有出现表达式,但在?SUBROUTINE?语句中声明了交替返回,则会返回零。 11.1.2 数据类型的兼容性 表 11–2?总结了 Fortran 95(与 C 比较)数据类型的数据大小和缺省对齐。该表假设未应用影响对齐或提升缺省数据大小的编译选项。请注意以下事项: C 数据类型?int、long?int?和?long?在 32 位环境下是等同的(4 字节)。但是,在 64 位环境下?long?和指针为 8 字节。这称为 LP64 数据模型。 在 64 位 SPARC 环境下,当用任意?-m64?选项进行编译时,REAL*16?和?COMPLEX*32?与 16 字节边界对齐。 标有 4/8 的对齐表示缺省情况下与 8 字节边界对齐,但在 COMMON 块中与 4 字节边界对齐。COMMON 中的最大缺省对齐为 4 字节。当用?-m64?选项进行编译时,4/8/16 表示与 16 字节边界对齐。 REAL(KIND=16)、REAL*16、COMPLEX(KIND=16)、COMPLEX*32?只能用于 SPARC 平台。 数组和结构的元素及字段必须兼容。 不能按值传递数组、字符串或结构。 可以在调用点使用?%VAL(arg),按值将参数从 Fortran 95 例程传递到 C 例程。假如 Fortran 例程具有一个显式接口块,该接口块用VALUE?属性声明了伪参数,则可以按值将参数从 C 传递到 Fortran 95。 数值序列类型的组件的对齐方式与通用块的对齐方式相同,也会受到?-aligncommon?选项的影响。数值序列类型是这样一种序列类型:其中所有组件的类型为缺省整数、缺省实数、双精度实数、缺省复数或缺省逻辑,而不是指针。 在大多数情况下,非数值序列类型的数据类型组件以自然对齐的方式对齐,但 QUAD 变量除外。对于四精度变量,32 位 SPARC 平台和 64 位 SPARC 平台之间的对齐方式不同。 在所有平台上,用 BIND(C) 属性定义的 VAX 结构和数据类型的组件始终与 C 结构具有相同的对齐方式。 表 11–1 数据大小与对齐-(以字节表示) 按引用传递(f95?和?cc) Fortran 95 数据类型? C 数据类型? 大小? 对齐? BYTE x char x 1? 1? CHARACTER x unsig

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档