我们可以在结构声明中使用#define常量作为数组大小吗?

时间:2011-10-12 07:14:03

标签: c arrays struct

我在C

中做了以下事情
#define MAX_DATA_SIZE 500;

struct reliable_state {

  char dataBuffer[MAX_DATA_SIZE]; 

}

即我想在结构声明中使用#define常量作为数组大小。 但上面的代码给出了奇怪的错误

.c:36: error: expected ‘]’ before ‘;’ token

还有其他方法吗?

3 个答案:

答案 0 :(得分:9)

是的,你可以,只需删除';'在你的定义行中:

#define MAX_DATA_SIZE 500

使用define,编译器实际上会“看到”你的结构定义为

char dataBuffer[500;];

显然是错误的。

答案 1 :(得分:3)

使用#define时,右侧的宏定义为“原样”。例如。在这里,你只需要纠正它

#define MAX_DATA_SIZE 500  /* no semicolon */

答案 2 :(得分:1)

非空对象宏定义的语法是

#define MACRO_IDENTIFIER    REPLACEMENT

请注意,与C声明和语句不同,此语法中没有终止分号。你的分号成为REPLACEMENT的一部分,并插入你使用宏标识符的地方,产生

char dataBuffer[500;];

这是编译器诊断出的语法错误。