有人能找出错误的原因吗;类型为“的值”;“无效”;无法分配给类型为“的实体”;int"&引用;在VScode中?

有人能找出错误的原因吗;类型为“的值”;“无效”;无法分配给类型为“的实体”;int"&引用;在VScode中?,c,visual-studio-code,intellisense,C,Visual Studio Code,Intellisense,代码如下: ssize_t readline(int fd, void *buf, size_t maxlen) { char c; char * bufp=buf; int n; for(n = 0; n < maxlen - 1; n++) { int kk; if((kk = read_or_die(fd, &c, 1)) == 1) // **Intellisense throws error

代码如下:

ssize_t readline(int fd, void *buf, size_t maxlen)
{
    char c;
    char * bufp=buf;
    int n;
    
    for(n = 0; n < maxlen - 1; n++)
    {
        int kk;
        if((kk = read_or_die(fd, &c, 1)) == 1) // **Intellisense throws error here**
        {
            *bufp++ = c; 
            if(c == '\n')
            break;               
        }

        else if (kk == 0)
        {
            if(n == 0) 
                return 0;

            else
                break;  
        }

        else
            return -1;

    }
    bufp = '\0';
    return n;


}
#define read_or_die(fd, buf, count) \
    ({ssize_t rc = read(fd, buf, count); assert(rc >= 0); rc: })
通过这个链接,我了解到
rc
是从
read\u或\u die()
返回的。显然,
rc
属于
ssize\u t
类型,不是无效的

如果((kk=read_或_die(fd,&c,1))==1),为什么VScode intellisense会在
处抛出此错误


解决方案是在宏末尾添加分号

#define read_or_die(fd, buf, count) \
    ({ssize_t rc = read(fd, buf, count); assert(rc >= 0); rc; })

你真的在结尾有一个
吗?首先,我会把'read'u或'u die'作为一个函数。将其设置为宏绝对没有好处。@Jabberwocky我需要多次调用它。如果我们因为函数调用而使用函数,它将成为一种开销。@KrishnaKanthYenumula不,它不会。瓶颈是
read
。当我将冒号改为分号时,这是为我编译的