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

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

3天内不再提示

C语言函数返回1和返回0究竟哪个好?

工程师邓生 来源:未知 作者:刘芹 2023-10-31 14:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

C语言函数返回1和返回0究竟哪个好?

在C语言中,很多函数需要返回一个值来表示函数是否成功执行。而在很多情况下,通常会选择让函数返回1或0,以表示成功或失败。但是,有些人可能会觉得这样的做法非常模糊,因为并没有具体说明函数执行失败的原因。因此,本文将从一些实际例子入手,详细分析和比较C语言函数返回1和返回0的优缺点,以期解决这个问题。

先来分析一下返回1的优点。首先,返回1意味着函数执行成功,这种信号比返回任何其他值都更直观。其次,1是二进制中唯一的真值,这意味着使用1作为成功信号的函数可以通过检查函数是否返回1来判断函数的执行成功或失败。这种方式简单,不易出错。此外,1被确定为“true”的值可以消除混乱,因为它与其他bool类型或非零数字值具有相同的真值。

然而,返回1也存在一些弱点。首先,一些开发人员认为返回1太抽象而且不够清晰。对于新手而言,他们需要先了解函数返回值的含义,才能正确使用程序。其次,除非显式地指定返回值为1,否则编译器无法确定函数返回值是否为1。这样,对于返回值为非零的函数,我们不知道其执行结果的具体含义。

另一方面,返回0的优点也很显著。首先,0被确定为“false”的唯一值,这就意味着使用返回0表示失败可以避免混淆,因为所有返回值为0的函数都表示失败。其次,0要比1更具有指示力。比如说,当使用文件I/O函数fscanf时,如果返回0,则表示 EOF 已经被读取到底。输出0还可以适用于一些返回枚举类型的函数,比如 HTTP 状态代码 200 OK 和 404 Not Found 可以表示成功和失败。

但是,返回0也存在一些劣势。首先,选择返回0可能导致出现“负结果”个别身,这会让功能模糊,尤其是一些仅返回0和-1的函数,如socket()和accept()。如果函数的返回值类型是int类型,则-1可以表示失败,而-2、-3等可以表示不同的失败子类型。另外,如果一个函数的某次失败可能导致其连续失败,那么使用0作为表示失败的值可能会使书写代码的人忽略后续的错误。

综上所述,返回1和返回0都有其优缺点,因此我们需要根据实际情况来选择。对于有些函数而言,返回1会比较好,比如在返回类型为布尔值的函数,而对于其他函数,0可能更加合适。同时,关键在于清晰明确地说明函数的返回值的含义。不过,我们也可以通过其他方式来避免这个问题,比如使用可清晰地传达失败原因的异常处理机制,或者使用更具有标识性的可枚举类型。

总之,在选择函数是否返回1和0时,需要考虑函数特性,上下文等地方,以便能够清楚、直接地表达函数的成功或失败信息。通过合理地处理函数的返回值,可以让程序更加清晰和可读,更不容易出现混淆,从而增加开发效率和程序的可维护性。

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

    关注

    183

    文章

    7642

    浏览量

    144699
  • HTTP
    +关注

    关注

    0

    文章

    531

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    检查函数返回值的错误和异常处理方法

    检查函数返回值:这是最常见也最基本的错误处理和异常处理方法,就是在调用一个函数后,检查其返回值是否符合预期或是否表示出错或失败。如果出错或失败,则根据
    发表于 12-11 06:48

    C语言C++之间的区别是什么

    区别 1、面向对象编程 (OOP): C语言是一种面向过程的语言,它强调的是通过函数将任务分解为一系列步骤进行执行。
    发表于 12-11 06:23

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

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

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

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

    把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

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

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

    C语言如何处理函数返回

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

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

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

    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 686次阅读

    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