Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中出现错误,控件到达非void函数的末尾_C_Compiler Errors_Return_Warnings_Compiler Warnings - Fatal编程技术网

C中出现错误,控件到达非void函数的末尾

C中出现错误,控件到达非void函数的末尾,c,compiler-errors,return,warnings,compiler-warnings,C,Compiler Errors,Return,Warnings,Compiler Warnings,考虑以下功能: off_t func (const struct inode *inode) { off_t length = 0; read_cache (&length, inode->sector, offsetof (struct inode_disk, length), sizeof (off_t)); return length; } 我收到一个错误和一个警告: error: expected declaration or statement at end

考虑以下功能:

off_t
func (const struct inode *inode)
{
  off_t length = 0;
  read_cache (&length, inode->sector, offsetof (struct inode_disk, length), sizeof (off_t));
  return length;
}
我收到一个错误和一个警告:

error: expected declaration or statement at end of input
warning: control reaches end of non-void function [-Wreturn-type]
错误和警告都指向的行是控制函数结束括号的最后一行

当我搜索时,我发现这个错误出现在函数的返回类型为nonvoid时,并且我们没有返回任何内容。 但事实并非如此

请帮忙

编辑:

下面包含该函数上方的函数以及源代码中显示的函数:

/* Re-enables writes to INODE.
   Must be called once by each inode opener who has called
   inode_deny_write() on the inode, before closing the inode. */
void
inode_allow_write (struct inode *inode) 
{
  ASSERT (inode->deny_write_cnt > 0);
  ASSERT (inode->deny_write_cnt <= inode->open_cnt);
  inode->deny_write_cnt--;
}

/* Returns the length, in bytes, of INODE's data. */
off_t
inode_length (const struct inode *inode)
{
  off_t length = 0;
  read_cache (&length, inode->sector, offsetof (struct inode_disk, length), sizeof (off_t));
  return length;
}
/*重新启用对INODE的写入。
必须由每个调用过的inode开启器调用一次
在关闭inode之前,在inode上设置inode_deny_write()*/
无效的
inode_允许_写入(结构inode*inode)
{
断言(inode->deny\u write\u cnt>0);
断言(inode->deny\u write\u cnt open\u cnt);
inode->deny_write_cnt--;
}
/*返回INODE数据的长度(字节)*/
关
inode_长度(常量结构inode*inode)
{
关断长度=0;
读缓存(&length,inode->sector,offsetof(struct inode_disk,length),sizeof(off_t));
返回长度;
}

我不认为我在它上面的函数中缺少了一些大括号等。

我的猜测是,在同一个翻译单元中,你在这个声明上面的某个地方缺少了一个大括号或分号。@dasblinkenlight:我已经编辑了这个问题,以包括导致问题的函数上面的函数。我不认为我缺少分号/括号。
ASSERT
是你的宏吗?还是从别的地方?宏是否有可能缺少右大括号?不管怎样,您都有一个流控制语句(if、while、do、for)或一个缺少右大括号的函数。好的。。。因此,唯一的建议是反向工作以找到丢失的花括号。编译器没有告诉你函数的名称吗?无论它认为哪个函数到达了控制的末尾,都会丢失右大括号。源文件有多长?如果可以的话,我建议你把全部资料都贴出来。这样,我们可以查看它,找出您在何处出现格式错误。或者,将它放在进行语法检查的C编辑器(Eclipse/VisualStudio/etc)中,看看从哪里开始。