Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将一个.c文件中定义的结构填充到另一个.c文件中定义的函数中,而不将指针作为参数传递?_C_Pointers_Struct_Fortran_Extern - Fatal编程技术网

如何将一个.c文件中定义的结构填充到另一个.c文件中定义的函数中,而不将指针作为参数传递?

如何将一个.c文件中定义的结构填充到另一个.c文件中定义的函数中,而不将指针作为参数传递?,c,pointers,struct,fortran,extern,C,Pointers,Struct,Fortran,Extern,我有一个C函数(在文件a.C中定义的store_mode_u),它是在Fortran代码中调用的 看起来像这样 // Create a global structure to populate with current mode frequencies struct minos_modes current_modes; static int nmode = 0; void store_mode_( int *n, int *l, double *w, double *U ) { if (

我有一个C函数(在文件a.C中定义的store_mode_u),它是在Fortran代码中调用的

看起来像这样

// Create a global structure to populate with current mode frequencies
struct minos_modes current_modes;
static int nmode = 0;

void
store_mode_( int *n, int *l, double *w, double *U )
{
  if ( nmode == MODE_MAX )
    {
      printf( "[ store_mode_ ] Error: MODE_MAX is too small\n" );
      exit( 1 );
    }
  current_modes.mode_n[nmode] = *n;
  current_modes.mode_l[nmode] = *l;
  current_modes.mode_w[nmode] = *w;
  current_modes.mode_U[nmode] = *U;
  nmode += 1;
  current_modes.len = nmode;
}
我试图用Fortran调用中作为参数传递的值(n、l、w、U)填充结构。当在我的main文件_B.c的正上方定义上面的代码时,上面的代码可以工作,该文件调用其中的fortran代码

然而。。如果我在文件_A.c(main不在其中的文件)中定义上述函数,它将不起作用。我理解这是由于.c文件之间缺少共享全局文件。我想知道是否有解决办法? 也许是和extern一起玩的,虽然我玩了一点也没有成功

static int nmode = 0;
如果在两个文件中都包含该行,则有两个
nmode
变量,每个文件中一个。
静态
使符号成为翻译单元的专用符号

相反,你可能想要

int nmode;
在一个文件中,以及

extern int nmode;

另一方面。(无需显式地将其初始化为零。这对于静态存储是有保证的。)

“它不工作”不是一个问题描述。您是否定义并包括头文件中的这些符号?在编译时,编译器需要知道有一个store_模式符号,然后在链接时,您将连接对象文件,为二进制文件提供这些符号的定义,您需要知道结构的定义位置;该文件需要链接到可执行文件中。其他文件可以包含声明结构然后访问它的头文件。标题应该包含类似于
extern struct minos\u modes current\u modes的内容并且还需要知道结构定义的详细信息。定义结构的文件还应包括头文件,以便编译器可以进行交叉检查文件A.c是否有
extern struct minos_节点当前_节点语句?问题应该包括您得到的确切错误消息(最好也包括一个)