C中的“dimension”和“parameter”等效命令

时间:2015-03-09 18:50:29

标签: c fortran

我对编写C不太熟悉,但我正在将一些代码从FORTRAN转换为C.我理解两者的含义,但我不确定如何在C中编写它。这是我的代码的一小部分在Fortran:

program main
      parameter (g=9.8,nx=102,ny=100,r13=1./3.,r23=2./3.)
      dimension u0(0:nx+1,0:ny+1,3),ux(0:nx+1,0:ny+1,3)
      dimension uy(0:nx+1,0:ny+1,3),uxx(0:nx+1,0:ny+1,3)
      dimension uxy(0:nx+1,0:ny+1,3),uyy(0:nx+1,0:ny+1,3)

2 个答案:

答案 0 :(得分:1)

parameter (g=9.8,nx=102,ny=100,r13=1./3.,r23=2./3.)

可以翻译为#define语句。

#define g 9.8
#define nx 102
#define ny 100
#define r13 (1./3.)
#define r23 (2./3.)

dimension u0(0:nx+1,0:ny+1,3),ux(0:nx+1,0:ny+1,3)

可以翻译成:

double u0[nx+2][ny+2][3];
double u1[nx+2][ny+2][3];

你必须非常小心使用索引。在FORTRAN中,u0(0, 0, 3)是有效的项目。在C中,您必须使用u0[0][0][2]来访问相应的项目。

答案 1 :(得分:1)

这有点接近 - 假设C99编译器或支持可变长度数组的C2011编译器:

const double g = 9.8;
const int nx = 102;
const int ny = 100;
const double r13 = 1.0/3.0;
const double r23 = 2.0/3.0;

int main( void )
{
   int u0[nx+2][ny+2][3];
   int ux[nx+2][ny+2][3];
   int uy[nx+2][ny+2][3];
   int uxx[nx+2][ny+2][3];
   int uxy[nx+2][ny+2][3];
   int uyy[nx+2][ny+2][3];
   ...
}

请注意,C中的数组不允许任意索引;他们始终从0开始,因此N - 元素数组始终从0到N - 1索引。因此,如果要将数组索引为0到103,则必须将数组大小声明为104.

如果您使用的驱动程序不支持VLA,则必须使用编译时常量表达式指定数组维。因此,nxny必须是预处理器宏而不是const - 限定变量,如下所示:

#define nx 102
#define ny 100

在文件范围内声明其他常量使其对其他翻译单元可见,这种排序类型与PARAMETER语句具有相同的功能。