1

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

我尝试过在 main 内部和外部以不同的方式声明常量。它仍然不起作用。如果有人可以帮助我,我将不胜感激...

4

7 回答 7

10

你应该使用#define SIZE 3.

预处理器作为原始字符串替换工作,所以用#define SIZE 3;SIZE的替换为3;你得到:

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

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

于 2013-02-07T03:59:27.880 回答
3

在这种情况下,您的代码SIZE将被定义替换,3;因此您将拥有

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

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

于 2013-02-07T04:00:37.610 回答
3

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

您的宏扩展为

int myMatrix[3;][3;];

删除;宏定义中的 。

于 2013-02-07T04:01:11.870 回答
1

你改变:

#define SIZE 3;

#define SIZE 3
于 2013-02-07T04:00:31.123 回答
1

您需要删除;.#define SIZE 3

#defines 不需要分号

于 2013-02-07T04:00:31.783 回答
1

#define SIZE 3不是#define SIZE 3;

于 2013-02-07T04:02:13.957 回答
1

您可以看到编译器看到的内容。如果您不注释掉包含的头文件可能会一团糟,而且我不知道如何在 Visual C++ 中执行此操作,但是使用 GCC 您可以运行

gcc -E xx.c > xx.e

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

于 2013-02-07T04:39:05.867 回答