0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言函数返回1和返回0到底哪个好?

strongerHuang 来源:CSDN技术社区 作者:wyh15895833492 2021-04-22 09:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

基本上,没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高、耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。

C语言代码的组合千变万化,因此函数的功能可能会比较复杂,不同的输入,常常产生不同的输出结果。

1C语言函数的返回值

C语言函数可以通过返回值表示输出结果,例如 log() 函数的返回值会根据不同的输入,返回不同的值。再比如,我们定义一个函数 myopen(),用于打开某个文件,那么,这个函数要么能够成功打开文件,要么打开文件失败,这时,可以通过返回值区分“成功”和“失败”。

当然,myopen() 函数失败的原因可能很多,但不是本文关注的重点,本文更关心的是,该以何值表示“成功”,何值表示“失败”。

按照C语言语法, 0 表示假,非零(常常用 1)表示真,那是否函数也用 0 返回值表示“失败”,1 返回值表示“成功”呢?

2行业“潜规则”

C语言函数当然可以使用返回值 0 表示“失败”,用返回值 1 表示“成功”。

事实上,C语言函数用什么样的返回值表示成功或者失败,只是一种人为的约定,函数的调用者遵守这个“约定”就可以了。

C语言也有“行业潜规则”,不过,对于一般的函数,大多数C语言程序员常常使用返回值 0 表示成功,非零值表示失败。因此,如果希望我们定义的函数能够被大多数人愉快的使用,最好不要反其道而行,遵守“行业潜规则”更好一点。

仔细考虑下,其实C语言函数使用返回值 0 表示成功是有原因的。更一般的C语言函数返回值并不一定只有两种可能值(成功/失败),它可能还会返回对应错误原因的返回值。总之,函数成功只有一种可能,函数失败却有多种可能。

实数要么是 0,要么非 0,因此可以将 0 看作一个比较特殊的“唯一”数值,使用 0 这个“唯一”的返回值,表示唯一的“成功”,多种非零的返回值,表示多种原因的失败,无疑更好一些。

当然,我们也可以说“实数要么是 1,要么非 1”,不过这显然也不是“行业潜规则”。

例如我们可以规定,如果 myopen() 函数因为“文件或者目录不存在”的原因失败,返回 -1,如果因为“权限不够”的原因失败,则返回 -2。-1 和 -2 都是“非零值”,而成功作为失败的对立面,也即“非零值”的对立面,myopen() 函数使用返回值 0 表示成功无可厚非。

3C语言程序员中另一中行业“潜规则”

当然,C语言程序员中还有一种“行业潜规则”。如果定义的函数是个布尔函数,也即返回值显式的使用类似于 bool 关键字定义,或者函数名类似于 is_true(),那么显然此时应该遵守C语言语法,使用“真”值表示成功,“假”值表示失败。

if( is_true() ) printf(“true

”);

请看上面这两行C语言代码,显然,遵守C语言语法的布尔函数更便于程序员写出布尔判断类的代码。

4小结

本文主要讨论了C语言程序开发中关于函数返回值的问题。可见,使用什么样的返回值表示成功,什么用的返回值表示失败,其实只是一种人为约定。

只不过,如果希望我们编写的代码能够被大多数同行愉快的使用,最好遵守下“行业潜规则”。

当然了,若是希望我们的C语言代码应用性更广,则可以使用《stdlib.h》标准头文件里预先定义好的 EXIT_SUCCESS 和 EXIT_FAILURE 宏。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144609
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66837
  • 程序员
    +关注

    关注

    4

    文章

    955

    浏览量

    30786

原文标题:C语言函数返回1和返回0究竟哪个好?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    飞凌嵌入式ElfBoard-文件I/O的了解探究之返回错误处理与相关函数

    errno仅返回数值,还需查阅错误宏定义才能知道具体错误原因,由此引入以下两个标准c函数。perror用于在发生系统调用错误时输出有关错误信息的描述。当一个系统调用或库函数发生错误时
    发表于 11-21 08:50

    如何获得速卖通aliexpress分类详情 API 返回值说明

    的API返回值会取决于你使用的API版本和请求类型。 以下是一个假设性的速卖通分类详情API返回值的说明,但请注意,这并非实际的API返回结构,因为速卖通的具体API文档可能不为公众公开。在实际开发中,你应当查阅速卖通官方的AP
    的头像 发表于 11-09 17:46 1020次阅读

    把qspi0配置成了普通的fifo模式,读什么都返回0xff,这是怎么回事?

    我把qspi0配置成了普通的fifo模式,不是xip模式,但是现在读什么都返回0xff,读id也返回0xff,也不是没有数据,RXDATA寄
    发表于 11-06 06:57

    蜂鸟E203的GPIO读取的返回值注意事项

    GPIOB的0号端口返回值是1,读取GPIOB的1号端口返回值是2,读取GPIOB的2号端口返回
    发表于 10-22 08:05

    调用Cy_ReadFuseByte()函数返回0xF0000005是怎么回事?

    。 当我们调用 Cy_ReadFuseByte() 函数时,返回的是 0xF0000005(熔断 eFuse 的软件流程中的第 5 步) 遵循架构参考手册和数据表: “在过渡到安全或带调试的安全
    发表于 07-24 07:08

    请问CY68013上位机发送的返回到底代表什么意思?

    ,为0时代表发送失败,刚开始一直没问题,FPGA端接收也正常,上位机返回值也是1, 最后返回值一直是0,所以我一直认为发送失败了,但是今天在
    发表于 05-22 07:16

    DLP4500-C350REF在发送获取光机的RGB颜色命令,返回的是不正确的数值,为什么?

    大家,我有几个问题想问一下,谢谢大家赐教 1:为什么在发送获取光机的RGB 颜色命令,返回的是不正确的数值,再次发送该命令才能得到正确的值(就是连续发送2次获取RGB的命令才能获取正确的值
    发表于 02-21 07:05

    调用DLPC34XX_WriteOperatingModeSelect(DLPC34XX_OM_SENS_INTERNAL_PATTERN)函数返回的是1,为什么?

    拒绝API访问,而且这是偶然的,我们大多情况调用这个函数返回0的,但是有时候突然返回1,并且在一段时间内一直
    发表于 02-17 08:29

    C语言如何处理函数返回

    当你在函数的最后写上 return 0 的时候,它是如何返回给调用函数的? 比如 test 函数,为了待会更好的看懂汇编代码,我写成了 re
    的头像 发表于 01-16 09:21 748次阅读

    如何把两个数据返回给调用函数

    函数的处理结果包含两个数据,如何把两个数据返回给调用函数? 第一种,把两个数据封装成一个结构体,函数返回结构体。 调用
    的头像 发表于 01-08 10:15 678次阅读

    EE-128:C语言中的DSP:从C调用汇编类成员函数

    电子发烧友网站提供《EE-128:C语言中的DSP:从C调用汇编类成员函数.pdf》资料免费下载
    发表于 01-07 13:48 0次下载
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>语言</b>中的DSP:从<b class='flag-5'>C</b>调用汇编类成员<b class='flag-5'>函数</b>

    C语言笔试题

    ("this is g ..."); return 2;}int main(){ printf("%d %d", f(), g()); return 0;} 代码很简单,函数 f 输出一个字符串,返回整数
    的头像 发表于 12-30 09:48 673次阅读

    ADS8684对Command寄存器进行配置时,返回的是0xffff,这是什么原因?

    HAL_SPI_TransmitReceive(&hspi1,ADTxbuf,ADRxbuf,0X04,100);返回的是Program寄存器的地址(左移一位加写命令1),对C
    发表于 12-20 07:48

    ADS1115配置后,用的通道2采样数据,返回的数据高位为0,是哪里出了问题?

    我配置后,用的通道2采样数据,返回的数据高位为0,只有低位有值,也只有一位数,是哪里配置的问题吗?
    发表于 12-19 06:15

    ADS8661发送哪个命令才能返回AD结果?

    发送哪个命令才能返回AD结果 11001_xx_<9-bit address>_ 00000000_00000000 这个读指令不清楚9位地址填多少
    发表于 12-16 06:45