我有一个C函数(store_mode_-在file_A.c中定义),该函数在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)填充结构。上面的代码在File_B.c中紧接在我的主文件上方的地方定义时起作用,该文件在其中调用fortran代码。

但是..如果我在file_A.c中定义了上述函数(main不在其中),它将无法正常工作。我感谢这是由于.c文件之间缺少共享全局变量。我想知道是否有解决方案?
也许和extern在一起,尽管我玩了一点都没有成功。

最佳答案

static int nmode = 0;


如果在两个文件中都包含该行,则您有两个nmode变量,每个文件中都有一个。 static将符号专用于翻译单元。

相反,您可能想要

int nmode;


在一个文件中,以及

extern int nmode;


在另一个。 (无需将其显式初始化为零。这可以保证静态存储。)

09-26 02:16