我用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代码。