• 7781阅读
  • 3回复

[提问]FD_ZERO(); Qt Creator 报错:expected token ')' got';' [复制链接]

上一主题 下一主题
离线typeng
 
只看楼主 倒序阅读 楼主  发表于: 2012-07-15
小弟我用Qt Creator 开发 ,在槽函数中调用一个串口函数,串口函数用了select()函数设置为非阻塞模式。
我已经加上了头文件:#include <stdlib.h>  #include <unistd.h>  #include <sys/types.h>  #include <sys/select.h>
这段代码出现了问题:    fd_set rfds;         FD_ZERO(&rfds);    FD_SET(ports[portNo].handle, &rfds);
Qt Creator 的编辑器中, FD_ZERO(&rfds); 这一句下面出现了可恶的红线,鼠标放上显示:expected token ')' got';'   程序可以编译,但是运行时,完全没有串口非阻塞效果,可是显然不是代码的问题阿,那位仁兄知道这是怎么回事吗?是Qt 的bug吗?
离线typeng
只看该作者 1楼 发表于: 2012-07-15
回 楼主(typeng) 的帖子
补充一下:在不用QT时,这段代码工作正常,也没有报错。为什么在Qt中调用就有问题呢?
还有: FD_ZERO(&rfds);  报错,可是FD_SET(ports[portNo].handle, &rfds);没报错,这两句都是用宏实现的,可是为什么只有第一句报错呢?  Help!!!  
离线typeng
只看该作者 2楼 发表于: 2012-07-15
具体代码:
int ComRd(int portNo, unsigned char buf[], int maxCnt, int Timeout)
{
    fd_set rfds;
    int actualRead = 0;
    struct timeval tv;
    int retval;

    if (!ports[portNo].busy)
    {
    printf("Com%d is not valid\n",portNo);
    return -1;
        //assert(0);
    }

  
    FD_ZERO(&rfds);
    FD_SET(ports[portNo].handle, &rfds);
    tv.tv_sec = Timeout/1000;
    tv.tv_usec = (Timeout%1000)*1000;
    retval = select(8, &rfds, NULL, NULL, &tv);
    if (retval)
    {
        actualRead = read(ports[portNo].handle, buf, maxCnt);
    }
    else printf("ComRd Warning!!!!:Timeout.\n");

    return actualRead;
}
离线typeng
只看该作者 3楼 发表于: 2012-07-16
问题已解决,Qt Creator 的编辑器中, FD_ZERO(&rfds); 这一句下面出现红线,鼠标放上显示:expected token ')' got';'  这是Qt 编译器的一个bug,在诺基亚官方网站上有外国人曾经发贴。但是这个bug只是编辑器显示有错,并不影响运行。我用select()函数失败,是因为select(8, &rfds, NULL, NULL, &tv); 参数8设置的太小的缘故。 本应很快发现,但是注意力都集中在这个bug上了,我太2了
快速回复
限100 字节
 
上一个 下一个