在Fortran语言与C语言中过程调用时的参数传递

Author: 李宇 Date: 1997-01-01

  我们知道,在Fortran语言中,过程(子程序和函数)的参数传递是按访问信息方式进行的,即从调用点向被调用过程传递的是实在参数值所在单元的地址。而在C语言中,过程(函数)的参数传递是按值传递方式进行的,即从调用点向被调过程传送的是实在参数的值。因此,在实际编程中,必须注意这个问题。以Versate(绘图仪的VGS软件包)为例,在这个软件包中,有一子程序vpopt,在Fortran语言中,调用形式为:
  CALL Vpopt(Icode,IARG,RARG,IER)
  如在C语言中,调用形式为
  Vpopt(Icode,IARG,RARG,IER)
  的话,就会出错。
  这是因为,子程序Vpopt的参数IER要求返回一个整数值,即IER传递给程序Vpopt时,不是具体的值,而是一个变量,程序Vpopt运行完成后,才给IER赋一个值。这时,在调用Vpopt的程序中,就可使用这个变量了。由于Fortran是按访问信息方式传递参数的,IER就代表了实在参数的地址,而在C语言中,是按值传送方式传递参数的,IER就代表了一个实在参数的具体值,这就不符合Vpopt程序的要求,故在C语言中调用Vpopt时,应该以如下形式:
  Vpopt(Icode,IARG,RARG,&IER)