【问题标题】:Function error 'expected expression before char?函数错误'字符之前的预期表达式?
【发布时间】:2014-01-01 10:43:29
【问题描述】:

语言:C

你好,我在这行有一个错误:

start_board(char Board[10][10],char simbol);

函数启动板:

void start_board(char Board[10][10],char simbol)
{
    char BoardJ1[9][COL_MAX];
    char BoardJ2[9][COL_MAX];

    create_board(BoardJ1);
    create_board(BoardJ2);


    for (int i=0; i < 9; i++)
    {
      printf("%s%.8s%s\n", BoardJ1[i], SPACES, BoardJ2[i]);
    }

}

想法?

【问题讨论】:

  • 显示的代码根本不使用参数。令人费解的是,参数列表中有[10][10],局部变量中有[9][COL_MAX]。一不小心,迟早会有不幸。

标签: c arrays char


【解决方案1】:

您的函数原型缺少返回类型void

在没有任何类型的情况下,它会隐式转换为int 类型。所以你的函数返回类型是 int 类型,它与函数定义的返回类型不匹配。

【讨论】:

  • >_=[
  • 你先说'必须有一种存储类',然后讨论隐式int。如果代码允许隐式int,则为C89/C90或更早版本,不需要类型或存储类。如果需要类型或存储类(C99 或更高版本),则代码不应使用隐式int。话虽如此,出于向后兼容性的原因,编译器通常对这些规则松懈。 (令人恼火的是,GCC 在没有明确启用 C99 模式的情况下仍然警告使用 C99 结构。)
  • @JonathanLeffler This answer 建议将编译器调用为c99。我没试过。 :)
  • @JonathanLeffler;由于收到编译器警告,我添加了该行。但很快我就意识到你所说的。删除了该行。
【解决方案2】:

除了声明中没有提到的返回类型,你还有一个错误。如果您像这样传递二维数组,则大小将是未知的。您应该传递二维数组及其大小,如下所示。

void start_board(char Board[][10], size_t size, char symbol);

【讨论】:

  • 您可以像这样传递二维数组,但问题是行的长度未知(正如您在回答中提到的那样)。编译器会忽略第一个维度。
  • 用数组类型声明的参数实际上是一个指针。推荐阅读:comp.lang.c FAQ第6节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2021-03-27
  • 1970-01-01
  • 2023-04-11
  • 2014-04-20
  • 2015-03-28
  • 2021-02-19
相关资源
最近更新 更多