语法错误:在';'之前缺少']' C中的数组声明错误

时间:2013-02-07 03:57:06

标签: c arrays array-initialization

我正在用c语言编写,使用Visual c ++。

编译器通过以下代码给出了错误:

#define SIZE 3;
int myMatrix[SIZE][SIZE];
void funcMatrix(int M[SIZE][SIZE]);

我得到的错误:

error C2143: syntax error : missing ']' before ';' 
error C2059: syntax error : ']'

我试过在主要内部和外部声明不同的常量。它仍然无法正常工作。 如果有人可以帮助我,我会非常感激...

7 个答案:

答案 0 :(得分:10)

您应该使用#define SIZE 3

预处理器用作原始字符串替换,因此#define SIZE 3; SIZE替换为3;,您得到:

int myMatrix[3;][3;];
void funcMatrix(int M[3;][3;]);

作为最终结果,因此错误。这是一个常见错误,然后您习惯将;放在C表达式的末尾。但是preprocessor #define - s实际上不是C代码,而是在编译之前发生的简单(或不那么简单)字符串处理操作。

答案 1 :(得分:3)

在您的代码中,SIZE将替换为此案例3;中的定义,因此您将拥有

int myMatrix[3;][3;];
void funcMatrix(int M[3;][3;]);

导致语法错误,因此请使用#define SIZE 3(不使用;)而不是#define SIZE 3;

答案 2 :(得分:3)

#define NAME字面上会插入NAME之后的任何值。

您的宏展开到

int myMatrix[3;][3;];

删除宏定义中的;

答案 3 :(得分:1)

你改变了:

#define SIZE 3;

#define SIZE 3

答案 4 :(得分:1)

您需要在;之后移除#define SIZE 3

#define不需要分号

答案 5 :(得分:1)

#define SIZE 3不是#define SIZE 3;

答案 6 :(得分:1)

您可以看到编译器看到的内容。 如果你没有注释掉包含的头文件,那可能会很麻烦, 我不知道如何在Visual C ++中做到这一点, 但是通过GCC你可以运行

gcc -E xx.c > xx.e

并且在处理#define之后,您会看到代码扩展到的内容。 使用Visual C ++也必须有一些方法可以做到这一点。 然后你仍然可以将.e文件编译为c代码。