Fortran & C 混编
来源:互联网 发布:英语单词背诵软件 编辑:程序博客网 时间:2024/05/06 19:04
c2ffn.f
SUBROUTINE NAMEAGE(NAME, NLEN, AGE, TEMP)
CHARACTER*(*) NAME
INTEGER NLEN,AGE
REAL TEMP
C
WRITE(6,1000) NAME(1:NLEN),AGE,TEMP
1000 FORMAT(1X,'Hello ',A,', who is ',I2,
. ' years old, has a temperature of ', f4.1)
RETURN
END
c2f.c
#include <string.h>
#ifdef _CRAY
# include <fortran.h>
# define nameage NAMEAGE
#else
# if !defined(_AIX) && !defined(__hpux)
# define nameage nameage_
# endif
# define _fcd char *
# define _cptofcd(a, b) (a)
# define _fcdlen(a) strlen(a)
#endif
void nameage(_fcd name, int *nlen, int *age, float *temp);
int main()
{
char *name = "Knut";
_fcd fp;
int nlen, age = 4;
float temp = 98.6;
nlen = strlen(name);
fp = _cptofcd(name, nlen);
nameage(fp, &nlen, &age, &temp);
system("pause");
return 0;
}
Makefile
f77 = g77
#
tar = demo
#
src = c2f.c
#
srcf = c2ffn.f
#
obj = $(src:.c=.o)
objf = $(srcf:.f=.o)
${tar} : ${obj} ${objf}
${f77} -o ${tar} ${objf} ${obj}
${obj} : ${src}
${CC} -c ${src} -o ${obj}
${objf} : ${srcf}
${f77} -c ${srcf} -o ${objf}
clean:
rm -f *.o
Fortran 调用 C
#include <string.h>
#ifdef _CRAY
# include <fortran.h>
# define nameage NAMEAGE
#else
# if !defined(_AIX) && !defined(__hpux)
# define nameage nameage_
# endif
# define _fcd char *
# define _fcdtocp(a) (a)
# define _fcdlen(a) strlen(a)
#endif
void nameage(_fcd name, int *age, float *temp) {
char *cp;
size_t len;
cp = _fcdtocp(name); /* convert to C char* */
len = _fcdlen(name);
/* strip trailing blanks */
while (cp[len-1] == ' ' || cp[len-1] == '/0') --len;
printf("Hello %.*s, who is %d years old, "
"has a temperature of %4.1f/n", len, cp, *age, *temp);
}
PROGRAM F2C
C
CHARACTER*32 NAME
INTEGER AGE
REAL TEMP
C
NAME = "Knut"
C add null character at end for portable & safe handling by C
NAME(LEN(NAME):LEN(NAME)) = CHAR(0)
C note that LEN(NAME) = 32 in this case
AGE = 4
TEMP = 98.6
CALL NAMEAGE(NAME, AGE, TEMP)
END
#
CC = gcc
f77 = g77
#
tar = demo
#
src = f2cfn.c
#
srcf = f2c.f
#
obj = $(src:.c=.o)
objf = $(srcf:.f=.o)
${tar} : ${obj} ${objf}
${f77} -o ${tar} ${objf} ${obj}
${obj} : ${src}
${CC} -c ${src} -o ${obj}
${objf} : ${srcf}
${f77} -c ${srcf} -o ${objf}
clean:
rm -f *.o
- Fortran & C 混编
- C Fortran混编设置
- Fortran & C 混编
- c和fortran 混编 编译备忘
- Fortran 与 C/C++ 混编学习笔记
- c和fortran混编(基于GNU/Linux,转自 linzch)
- stampede上编译c和fortran混编程序multiple definition of `main'问题解决
- c和fortran混编(基于GNU/Linux,转自 linzch)
- C、C++、OC混编
- c,c++,oc混编
- C/C++ VS. Fortran
- c++与c混编
- C++/OC 混编
- C++/OC 混编
- C++与C混编
- Lua与C混编
- iOS C++/OC 混编
- OC和C混编
- javascript 通用定义类继承工具方法
- 王爽<<汇编语言>>实验九答案
- Valgrind 使用简单说明
- java异常机制和异常处理原则(文摘)
- 线程池
- Fortran & C 混编
- 英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析
- Android地图和定位学习总结
- 进程在Linux内核中的角色扮演
- Android 动态设置控件的布局
- PB经典框架源码
- ASP.NET比拼PHP,谁是速度之王?
- IE6 iframe 横向滚动条
- 如何让alias永久生效?