定义C宏F77_FUNC(姓名)
,FC_FUNC(名称、名称)
,F77_FUNC_(姓名)
、和FC_FUNC_(姓名)
正确地用下划线破坏C/C++标识符和标识符的名称,以匹配Fortran编译器。
Fortran是大小写敏感的,为了实现这一点,Fortran编译器将所有标识符转换为规范的大小写和格式。收件人从C调用Fortran子例程,或编写一个C函数可从Fortran调用,C程序必须在Fortran编译器所需的格式。为了做到这一点只需将所有C标识符包装在AC_F77_抓取器
或AC_FC_包装
例如,假设您有以下Fortran 77子例程:
子程序foobar(x,y)双精度x,yy=3.14159*x返回结束
然后用C或C++将其原型声明为:
#定义FOOBAR_F77 F77_FUNC(FOOBAR,FOOBAR)#ifdef __cplusplusextern“C”/*防止C++名称损坏*/#结尾无效FOOBAR_F77(双*x,双*y);
请注意,我们传递的是函数名到F77_通用
这样它就可以选择正确的一个。另请注意,Fortran 77例程的所有参数都作为指针(参见将Fortran 77与C和C混合++在里面GNU(全球导航单元)汽车制造).
(更换77楼
具有常设费用
用于Fortran,而不是Fortran 77。)
尽管Autoconf在检测Fortran编译器的命名方案,可能有Fortran它还不支持的编译器。在这种情况下,上述代码生成编译时错误,但其他一些行为(例如,禁用Fortran相关功能)可以通过检查是否F77_通用
或FC_FUNC公司
定义。
现在,要从C程序调用该例程,我们可以这样做:
{双倍x=2.7183,y;FOOBAR_F77(&x,&y);}
如果Fortran标识符包含下划线(例如。,foo_bar(_B)
),你应该使用F77_通用_
或函数(_FUNC)_
而不是F77_通用
或FC_FUNC公司
(使用相同的参数)。这是因为如果某些Fortran编译器包含下划线。
名称篡改方案编码在ac_cv_f77_设置
或ac _ cv _ fc_管理
cache变量,也用于这个AC_F77_FUNC公司
和交流功能
下面介绍的宏。