关于定义静态数组和宏的基本问题



我试图定义一些数组,这是我的代码:

#include <stdio.h>
#define int N=50;
#define size (N+2)*(N+2)
#define IX(i,j) ((i)+(N+2)*(j))
#define SWAP(x0,x) {float *tmp=x0;x0=x;x=tmp;}
int main()
{
static float u[size], v[size], u_prev[size], v_prev[size];
}

它说,当编译时:

|9|error: storage size of 'u' isn't constant|

如果我改变#define int =50;#define N 50:

|2|error: expected ';', ',' or ')' before numeric constant|

有人知道答案吗?

u[size]为例。如果您开始用宏替换文本,将发生以下情况:

u[size]

u[(N+2)*(N+2)]

就是这样…也就是说,它不是常量,因为N不是常量(并且未定义)。

现在,如果我们接受你建议的答案,它应该有效。我想你可能有#define N 50;。注意末尾的分号。如果用该宏替换上面的最后一行,新的结果将是:

u[(50;+2)*(50;+2)]

语法无效。

你最后缺少的是声明中的类型。可能想把int或其他类型放在static之后。

似乎你忽略了宏的基本原理。你的第一个宏#define int N=50很糟糕,非常糟糕。任何时候int在它下面的代码中被提到,它将被替换为N=50

最新更新