C中'char'之前的预期表达式

时间:2015-09-28 14:04:33

标签: c

我必须首先说我是C的新手!

我已经浏览了可能已经有您答案的问题并尝试了这些建议,但这些建议无法解决我收到的错误消息。

我收到一条错误消息,其中包含以下代码:

int autoop_check(aClient *cptr, aClient *sptr, aChannel *chptr, char *parv[])
{
    if (IsOper(cptr))
        char *parv[] = {
            "+o",
            sptr->name,
            NULL
        };
        (void)do_mode(chptr, sptr, sptr, 2, parv, 0, 0);
}

以下是错误消息:

module.c:32:9: error: expected expression before ‘char’
         char *parv[] = {
         ^

2 个答案:

答案 0 :(得分:3)

您缺少if语句正文的大括号。

 if (IsOper(cptr)) {
        char *parv[] = {
            "+o",
            sptr->name,
            NULL
        };
        (void)do_mode(chptr, sptr, sptr, 2, parv, 0, 0);
 }

答案 1 :(得分:2)

if语句的语法为

if ( expr ) statement 

其中 statement 可以是单个表达式语句(函数调用,算术表达式等),选择语句(另一个ifswitch语句),迭代语句(forwhiledo-while语句),或复合语句,由{}包围。

不能是什么声明;如果你想在if语句中声明一些内容,它必须作为复合语句的一部分。

所以发生的事情是您的代码被解析为

if (IsOper(cptr))
        char *parv[] = {
            "+o",
            sptr->name,
            NULL
        };

(void)do_mode(chptr, sptr, sptr, 2, parv, 0, 0);

即,if语句仅包含parv的声明;遗憾的是,在此上下文中,不允许声明为 statement

要解决此问题,您需要使用复合语句:

if (IsOper(cptr))
{
  char *parv[] = {
      "+o",
      sptr->name,
      NULL
  };

  (void)do_mode(chptr, sptr, sptr, 2, parv, 0, 0);
}