2011-03-05 232 views
1

有几个人在这里评论我的C代码,说我应该使用常量作为循环计数器,而不是难写它们。我同意他们,因为这是我编写Java代码时的做法,但是当我尝试在数组声明和循环条件中使用常量时,我​​遇到了编译时错误。C常量抛出编译时错误

要在C中声明常量,语法是#define NAME value

在我的代码中,我有两个常量,BUFFER是文件读取缓冲区,而PACKED是输出数组大小。

我用BUFFER初始化char inputBuffer[BUFFER];作为一个全局变量,它的工作原理,但是当我尝试使用PACKED

#define PACKED 7; // this line is in the header of file, just below preprocessors 
int packedCount; 
char inputPack[PACKED]; //compression storage 
for (packedCount=0; packedCount<= PACKED; packedCount++){ 

我得到的循环起始线是在char inputPack[PACKED]error: expected ‘]’ before ‘;’ token
error: expected expression before ‘;’ token。当我7

+0

你在'char inputPack [PACKED]'末尾缺少一个分号' – Marlon 2011-03-05 13:39:01

+0

正如马龙所说的那样。这是一个错字吗? – wong2 2011-03-05 13:40:56

+1

请准确粘贴你编译的代码 – wong2 2011-03-05 13:42:58

回答

3

显然,您不会像在源文件中那样发布代码。

至少,您在char inputPack[PACKED]之后错过了分号。

我强烈怀疑您的真实源代码在宏声明的末尾有分号,这会导致错误。宏定义不应以分号结尾。

+0

+1:嗯,当然,现在我觉得愚蠢没有发现:) – Erik 2011-03-05 13:47:40

+0

+1为'你在你的宏声明末尾包含分号' – wong2 2011-03-05 13:48:37

+0

就是这样。我认为在将C语法与匹配的Java语法分开之前还需要一段时间。 – Jason 2011-03-05 14:34:00

2

更换PACKED这两个错误消失是有;字符后失踪inputPack[PACKED]

1

尝试使用比包装在一起,例如其他的东西PACKEDSIZE。它可能是你的编译器使用PACKED作别的事情(例如与结构打包相关)。另外,正如其他答案所提到的,你缺少一个;

+1

带大写字母的宏不会被实现保留。他们还需要以下划线开头。我不记得实际的裁决(它在C和C++之间有所不同),但是'PACKED'不应该引起问题。 – rubenvb 2011-03-05 13:48:50

+0

不应该,也不会不会总是关联:) - 但是,乔纳森发现了我相信的真正问题。 – Erik 2011-03-05 13:50:03