我在C
中做了以下事情#define MAX_DATA_SIZE 500;
struct reliable_state {
char dataBuffer[MAX_DATA_SIZE];
}
即我想在结构声明中使用#define常量作为数组大小。 但上面的代码给出了奇怪的错误
.c:36: error: expected ‘]’ before ‘;’ token
还有其他方法吗?
答案 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;];
这是编译器诊断出的语法错误。