加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 函数在不应该突然返回时返回

发布时间:2020-12-16 10:39:57 所属栏目:百科 来源:网络整理
导读:我正在为我的一个暑期班做一个操作系统任务.教师提供了一个目标文件,该文件提供模仿磁盘设备驱动程序行为的功能.然后我们编写一个使用C中的磁盘设备驱动程序的文件系统API. 我正在处理名为Format()的文件系统格式函数,该函数从教师对象文件中调用名为DevForm
我正在为我的一个暑期班做一个操作系统任务.教师提供了一个目标文件,该文件提供模仿磁盘设备驱动程序行为的功能.然后我们编写一个使用C中的磁盘设备驱动程序的文件系统API.

我正在处理名为Format()的文件系统格式函数,该函数从教师对象文件中调用名为DevFormat()的函数.如果能够成功格式化文件系统,我的函数应返回1,否则返回0.如果DevFormat()能够成功格式化磁盘驱动器,则返回1,否则返回0.这是代码:

int Format()
{
    if (!DevFormat())
    {
        printf("Disk drive wasn't formatted successfullyn");
        return 0;
    }

    <Do some stuff to the file system here>

    printf("File system successfully formattedn");
    return 1;
}

我的问题是Format()突然结束而没有返回值.我发现有问题的代码是行:if(!DevFormat()).现在我在C中编写作业,但我正在使用GNU C(g)编译器来编译和链接我的项目,就像老师说的那样.我想说当执行第(if(!DevFormat())行时,Format()突然结束的原因必须对编译器解释我的代码做一些事情(我可能会离开.它只是一个猜测.).我发现如果我将代码更改为if(0 == DevFormat()),我的函数也会突然结束.我可以测试失败的唯一方法是将DevFormat()的返回值赋给int变量,然后检查它.

任何帮助将非常感激.这与C编译器解释我的代码的方式有关吗?难道我错过了一些平凡的东西,以至于我应该为自己感到羞耻吗?

再次感谢您的帮助.

解决方法

我想也许你已经忘记了if语句的括号 – 我想你想写这个:

if (!DevFormat()) {
    printf("Disk drive wasn't formatted successfullyn");
    return 0;
}

只有printf语句在if块内,所以无论DevFormat()的返回值如何,每次都会执行return语句.那是C中常见的陷阱:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读