有人能找出错误的原因吗;类型为“的值”;“无效”;无法分配给类型为“的实体”;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
。当我将冒号改为分号时,这是为我编译的