在移植c++代码到c的时候,经常会出现一个奇怪的错误,
error C2275: “XXX”: 将此类型用作表达式非法
表达式非法,这个错误是由于c的编译器要求将变量的申明放在一个函数块的头部,而c++没有这样的要求造成的。
解决的办法就是把变量的申明全部放在变量的生存块的开始。
这是我写的一个函数:
int aeGetFileEvents(aeEventLoop *eventLoop, int fd)
{
if (fd >= eventLoop->setsize) return 0;
aeFileEvent *fe = &eventLoop->events[fd];
return fe->mask;
}
这样写程序就要报错,而把aeFileEvent *fe = NULL;放在开头就没有错。
这个跟编译器的原理有关系。大部分的c语言编译器要求变量的声明在程序最前面。所以当你将声明aeFileEvent声明放到if 语句之后时,会出现这种错误。而c++则不会。
下面这种c写法就不会出错。
int aeGetFileEvents(aeEventLoop *eventLoop, int fd)
{
aeFileEvent *fe = NULL;
if (fd >= eventLoop->setsize) return 0;
fe = &eventLoop->events[fd];
return fe->mask;
}