我试图定义一些数组,这是我的代码:
#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
。