我正在用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 : ']'
我试过在主要内部和外部声明不同的常量。它仍然无法正常工作。 如果有人可以帮助我,我会非常感激...
答案 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代码。