我必须首先说我是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[] = {
^
答案 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
可以是单个表达式语句(函数调用,算术表达式等),选择语句(另一个if
或switch
语句),迭代语句(for
,while
或do-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);
}