fopen C,声明无效?

fopen C,声明无效?,c,fopen,C,Fopen,我有一个错误我不知道。。。我试图打开文件进行写或读,并检查打开是否成功。但我得到这个编译错误。。。我不知道为什么 FILE * infile; .... infile = fopen(filename, "w"); if(!infile) return NULL; 它给了我这个错误 warning: statement with no effect error: expected ';' before 'return' 它并不是明确的前一个混乱的分号,因为如果我删除代码的这一部分,一

我有一个错误我不知道。。。我试图打开文件进行写或读,并检查打开是否成功。但我得到这个编译错误。。。我不知道为什么

FILE * infile;
....
infile = fopen(filename, "w");
if(!infile)
   return NULL;
它给了我这个错误

warning: statement with no effect 
error: expected ';' before 'return'
它并不是明确的前一个混乱的分号,因为如果我删除代码的这一部分,一切都会正常工作。谢谢你的帮助

一些需要检查的事项:

  • 你把stdio.h也包括进去了吗
  • 这个函数应该返回一个值吗
  • 是否实际定义了NULL?(尝试仅返回0)
哪一行报告了这个警告?这真的是你贴的一行吗?

有些东西需要检查:

  • 你把stdio.h也包括进去了吗
  • 这个函数应该返回一个值吗
  • 是否实际定义了NULL?(尝试仅返回0)

哪一行报告了这个警告?这真的是你发布的一行吗?

几乎可以肯定的是,问题是你潜意识里看不到的,以至于当你将代码复制到上面的消息时,你会自动更正它。错误消息显示您有一个
紧接在
返回之前,这意味着您的实际代码几乎可以确定

if(!infile);
   return NULL;

警告告诉您,
if
没有意义,因为它所保护的语句是空的(在
if
行末尾的
),返回将无条件执行。

几乎可以肯定,问题是你潜意识里看不到的,如此之多,以至于当您将代码复制到上面的消息时,会自动更正它。错误消息显示您有一个
紧接在
返回之前,这意味着您的实际代码几乎可以确定

if(!infile);
   return NULL;

警告告诉您,
if
没有意义,因为它所保护的语句是空的(在
if
行末尾的
),返回将无条件执行。

是对
foepn()的调用
此处或代码中的键入错误?正如Dan Fego之前的评论所暗示的,请确保您在实际代码中调用的是函数
fopen
而不是
foepn
。问题在于您没有向我们展示的代码。请提供更多上下文。将您的程序提取到尽可能小的程序中,该程序仍然可以演示您的问题,然后将结果全部发布在此处@在任何步骤中:复制并粘贴您的实际程序,而不是在这里键入内容。可以删除行,但不要编辑内容,因为这听起来像是要归结为一个简单的打字错误。使用
gcc-E
运行代码以扩展预处理器。然后用
return
检查该行。您可能会得到一个线索。对
foepn()
的调用是这里的输入错误还是代码中的输入错误?正如Dan Fego之前的评论所暗示的,请确保您在实际代码中调用的是函数
fopen
而不是
foepn
。问题在于您没有向我们展示的代码。请提供更多上下文。将您的程序提取到尽可能小的程序中,该程序仍然可以演示您的问题,然后将结果全部发布在此处@在任何步骤中:复制并粘贴您的实际程序,而不是在这里键入内容。可以删除行,但不要编辑内容,因为这听起来像是要归结为一个简单的打字错误。使用
gcc-E
运行代码以扩展预处理器。然后用
return
检查该行。您可能会得到一个线索。如果(!infle)返回NULL;line正在报告警告,并且定义了错误NULL,如果我评论说line一切正常,函数只包含这些行函数只包含这些行?下面肯定有使用“infle”的代码?此处需要更多上下文。如果(!infle)返回NULL;line正在报告警告,并且定义了错误NULL,如果我评论说line一切正常,函数只包含这些行函数只包含这些行?下面肯定有使用“infle”的代码?此处需要更多上下文。错误消息显示预期的
;'之前<代码>返回
。如果(!infle),则与
不匹配
@Daniel——同样可能错误消息被复制了。如果没有OP正在使用的实际代码,我们所能做的就是猜测出哪里出了问题。我的gcc警告“如果我有
if(条件)”,则“在»if«语句中建议空体周围使用括号”,所以我认为不太可能。不过,这绝对是可能的。OP的合作确实会有所帮助。错误消息显示预期的
;'之前<代码>返回
。如果(!infle),则与
不匹配
@Daniel——同样可能错误消息被复制了。如果没有OP正在使用的实际代码,我们所能做的就是猜测出哪里出了问题。我的gcc警告“如果我有
if(条件)”,则“在»if«语句中建议空体周围使用括号”,所以我认为不太可能。不过,这绝对是可能的。OP的合作确实会有所帮助。