【问题标题】:syntax error : missing ']' before ';' Array declaration error in C语法错误:在 ';' 之前缺少 ']' C中的数组声明错误
【发布时间】:2013-02-07 03:57:06
【问题描述】:

我正在用 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 内部和外部以不同的方式声明常量。它仍然不起作用。 如果有人可以帮助我,我将不胜感激......

【问题讨论】:

  • #define SIZE 3; 删除;

标签: c arrays array-initialization


【解决方案1】:

你应该使用#define SIZE 3

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

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

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

【讨论】:

  • 感谢您的快速帮助。欣赏它。现在完美运行。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    您的宏扩展为

    int myMatrix[3;][3;];
    

    删除宏定义中的;

    【讨论】:

      【解决方案4】:

      你改变了:

      #define SIZE 3;
      

      #define SIZE 3
      

      【讨论】:

        【解决方案5】:

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

        #defines 不需要分号

        【讨论】:

          【解决方案6】:

          #define SIZE 3 不是#define SIZE 3;

          【讨论】:

            【解决方案7】:

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

            gcc -E xx.c > xx.e
            

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

            【讨论】:

              猜你喜欢
              • 2017-03-25
              • 1970-01-01
              • 1970-01-01
              • 2016-03-17
              • 1970-01-01
              • 1970-01-01
              • 2019-07-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多