C Windows下的混合编程

C Windows下的混合编程,c,visual-studio,fortran,intel-fortran,C,Visual Studio,Fortran,Intel Fortran,我正在进行VS2010混合编程,并使用英特尔编译器/VisualStudio(英特尔并行2015)在VS2010中编译我的项目 控制台-c源代码: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> //#define readfile readfile_ extern void readfile(char*, int*); int mai

我正在进行VS2010混合编程,并使用英特尔编译器/VisualStudio(英特尔并行2015)在VS2010中编译我的项目

控制台-c源代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

//#define readfile readfile_

extern void readfile(char*, int*);

int main()
{
    int n, count;
    char Fname[9];
    char Name[10];

    strcpy(Fname,"AMIN.for");
    fprintf( stderr, "%s\n", Fname);

    readfile( Fname, &n , strlen (Fname));
    fprintf( stderr, "n = %d\n", n);
//  fprintf( stderr, "%s\n", Name);
    getch();
    return 0;
}
下面我有一个问题

readfile( Fname, &n, strlen(Fname) );
我想换成:

readfile( Fname, &n );

有可能吗?如何在没有字符串长度的情况下调用?

Fortran例程需要知道字符串的长度

您现在要做的是使用一个隐藏参数,该参数在这个特定的编译器调用约定中使用。参数包含有关字符串长度的信息

Fortran不使用空分隔字符串,因此您必须始终知道字符串的长度

现在,您可以使用
bind(C)
更改Fortran过程以消除隐藏的参数,但同样,您必须知道长度,并且必须从字符数组转换为字符串。这将使Fortran部分变得非常复杂


在您使用的英特尔Fortran中,您可以使用一些编译器指令来更改调用约定,但要小心,您必须知道Fortran中字符串的长度。可能是通过声明它为常量。

我使用bind(C)更改Fortran过程,以消除隐藏的参数,它就工作了。非常感谢。
readfile( Fname, &n );