当前位置:  开发笔记 > 编程语言 > 正文

我应该从C函数返回TRUE/FALSE值吗?

如何解决《我应该从C函数返回TRUE/FALSE值吗?》经验,为你挑选了3个好方法。

在用C编程好几年之后,我意识到我一直忽略了从函数返回零以表示成功的C约定.这个惯例对我来说在语义上是错误的,因为零当然是错误的.问题是我喜欢命名函数is_valid_foobar(),为了适应"虚假意味着成功"的惯例,我必须更加模糊......而不是:

if ( ! is_valid_foobar() ) {
    return (error);
}

其他程序员写道:

if ( validate_foobar() ) {
     return (error);
}

我的实现看起来像:

int is_valid_foobar (int foobar ) {
     if ( foobar < MAX_ALLOWED ) {
          return TRUE;
      }
      return FALSE;
}

在代码审查中,我实际上并未发现任何问题.所以我认为这不是一个可怕的习惯,但它是"非常规的".我很好奇人们的想法.

我对功能和变量名称的选择非常谨慎,典型的评论评论是"代码非常清晰",而且根本不需要!在前面输入额外的内容.函数调用.但你怎么说,哦,强大的SO?



1> Paul Roub..:

我说两者都是正确的,出于不同的目的:

如果您正在执行简单的go/no-go验证,例如is_numeric(),那么true和false可以很好地工作.

对于更复杂的东西,0 ==成功范例是有用的,因为它允许返回多个错误条件.

在这种情况下,调用者可以简单地对0进行测试,或者检查非0返回以获得更具体的失败解释.例如,文件打开调用可能由于不存在,权限不足等原因而失败.



2> Chuck..:

这个惯例并不是你想象的那样.进程应以0状态退出以指示成功,返回错误代码的函数通常使用0表示"无错误".但作为布尔值,0应该表示false,非零表示true.要使用0表示布尔值,有一天你会得到每日WTF.



3> Joachim Saue..:

我编程C已经有一段时间,但我认为你在谈论两种不同的功能:

is_foo是一个函数,它检查一些属性foo和returns 0(false)或non 0(true)来指示该属性的布尔值.调用这些函数时,不会出现错误状态(如果发生错误状态,则会映射到其中一个值).

foo是一个执行动作foo的函数.它0在成功时返回,0在错误时返回非值.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有