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



我用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 : ']'

我试着用不同的方式来表述常量,包括内部常量和外部常量。它仍然不起作用。如果有人能帮我,我将不胜感激。。。

您应该使用#define SIZE 3

预处理器充当原始字符串替换,因此使用#define SIZE 3;时,SIZE将替换为3;,得到:

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

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

在您的代码中,SIZE将被定义所取代,在本例中为3;,因此您将拥有

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

这会导致语法错误,所以使用#define SIZE 3(不带;)而不是#define SIZE 3;

#define NAME在NAME后面插入任意值。

您的宏扩展到

int myMatrix[3;][3;];

删除宏定义中的;

您更改:

#define SIZE 3;

#define SIZE 3

您需要删除#define SIZE 3之后的;

#define不需要分号

#define SIZE 3而非#define SIZE 3;

您可以看到编译器看到的内容。如果你不评论包含的头文件,它可能会一团糟,我不知道如何在Visual C++中做到这一点,但是GCC运行

gcc -E xx.c > xx.e

在处理#define之后,您可以看到代码扩展到什么。Visual C++也必须有一些方法来做到这一点。然后,您仍然可以将.e文件编译为c代码。

相关内容

  • 没有找到相关文章