首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenVMS (VAX) Fortran函数将字符*(*)返回C

OpenVMS (VAX) Fortran函数将字符*(*)返回C
EN

Stack Overflow用户
提问于 2014-12-17 00:58:27
回答 2查看 283关注 0票数 2

OpenVMS (VAX) FORTRAN子例程可以传递a character*(*)

代码语言:javascript
复制
subroutine forsub (in)
character*(*) in
type *, in
return
end

从C函数:

代码语言:javascript
复制
#include<stdio.h>
#include <descrip.h>
extern void forsub();
main()
{
    auto $DESCRIPTOR(in_string, "VMS pass from c to fortran.");
    forsub(&in_string);
}

OpenVMS (VAX) FORTRAN函数如何返回a character*(*)

代码语言:javascript
复制
character*(*) function forfunc (in)
character*(*) in
forfunc = in
return
end

在C代码中处理:

代码语言:javascript
复制
#include<stdio.h>
#include <descrip.h>
extern ?????? forfunc();
main()
{
    auto $DESCRIPTOR(in_string, "VMS fortran function return to c.");
    ??????? = forfunc(&in_string);
}
  • OpenVMS V6.2
  • 数字Fortran 77 V6.5-188
  • DEC V6.0-001
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-17 19:10:00

这个(旧的?) C用户指南中的示例3-5可能解释了如何做到这一点:您需要前面提到的隐藏参数。一个例子是:

代码语言:javascript
复制
#include <stdio.h>
#include <descrip.h>
extern void forfunc();
main()
{
    auto $DESCRIPTOR(in_string, "VMS fortran function return to c.");
    char buffer[64];
    struct dsc$descriptor_s out_string = {
        sizeof buffer, DSC$K_DTYPE_T, DSC$K_CLASS_S, buffer};
    forfunc (&out_string, &in_string);
    printf ("%.*s\n", out_string.dsc$w_length, out_string.dsc$a_pointer);
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-17 14:36:01

来自数字Visual版本的 V6.0A帮助:

使用语法字符*(*)返回字符串的Fortran函数将隐藏的字符串参数和字符串的地址放在参数列表的开头。

实现这样一个Fortran函数调用的C函数必须显式声明这个隐藏的字符串参数,并使用它返回一个值。C返回类型应该是无效的。但是,您更有可能通过不使用字符串返回函数来避免错误。尽可能使用子程序或将字符串放置到模块或全局变量中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27516711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档