C Windows下的混合编程
我正在进行VS2010混合编程,并使用英特尔编译器/VisualStudio(英特尔并行2015)在VS2010中编译我的项目 控制台-c源代码: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
#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 );