Binding 如何在初始化时获取Fortran中全局变量的地址?
在C中,我可以通过以下方式初始化指针类型全局变量:Binding 如何在初始化时获取Fortran中全局变量的地址?,binding,fortran,Binding,Fortran,在C中,我可以通过以下方式初始化指针类型全局变量: <<file.h>> extern int dummy; extern int* p; <<file.c>> int dummy; int* p = &dummy; 编译器说“错误:初始化表达式中不允许使用(1)处的内在函数‘c_loc’” 我需要这个特性,因为我有一个用Fortran声明的变量。我需要它在C中的地址(用作全局变量),但我不想调用任何Fortran init例程。这是不
<<file.h>>
extern int dummy;
extern int* p;
<<file.c>>
int dummy;
int* p = &dummy;
编译器说“错误:初始化表达式中不允许使用(1)处的内在函数‘c_loc’”
我需要这个特性,因为我有一个用Fortran声明的变量。我需要它在C中的地址(用作全局变量),但我不想调用任何Fortran init例程。这是不可能的。在运行时使用可执行语句。在很短的一段时间内,实际上有一个建议允许在常量表达式中使用C_loc(过去称为初始化表达式),但幸运的是,理智占了上风。我不明白你为什么需要这个。您可以有一个与“dummy”相同的bind(c)变量,并且可以在运行时获取其地址。
module mod
use, intrinsic :: iso_c_binding, only: c_ptr, c_loc
integer, target :: dummy
type(c_ptr), bind(c, name="p") :: p = c_loc(dummy)
end module mod