Chr*_*ris 3 c c++ debugging gdb
我正在为我的一个暑期班做一个操作系统任务.教师提供了一个目标文件,该文件提供模仿磁盘设备驱动程序行为的功能.然后我们编写一个使用C中的磁盘设备驱动程序的文件系统API.
我正在处理名为Format()的文件系统格式函数,该函数从教师对象文件中调用名为DevFormat()的函数.如果能够成功格式化文件系统,我的函数应返回1,否则返回0.如果DevFormat()能够成功格式化磁盘驱动器,则返回1,否则返回0.这是代码:
int Format()
{
if (!DevFormat())
{
printf("Disk drive wasn't formatted successfully\n");
return 0;
}
<Do some stuff to the file system here>
printf("File system successfully formatted\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是Format()突然结束而没有返回值.我发现有问题的代码是行:if (!DevFormat()).现在我正在用C编写作业,但我正在使用GNU C++(g ++)编译器来编译和链接我的项目,就像老师说的那样.我想说,当if (!DevFormat())执行该行时,Format()突然结束的原因必须与编译器对我的代码的解释做一些事情(我可能会离开.它只是一个猜测.).我发现如果我将代码更改为,我的函数也会突然结束if (0 == DevFormat()).我可以测试失败的唯一方法是将DevFormat()的返回值赋给int变量,然后检查它.
任何帮助将非常感激.这与C++编译器解释我的代码的方式有关吗?难道我错过了一些平凡的东西,以至于我应该为自己感到羞耻吗?
再次感谢您的帮助.
Pet*_*ter 14
我想也许你已经忘记了if语句的括号 - 我想你想写这个:
if (!DevFormat()) {
printf("Disk drive wasn't formatted successfully\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
只有printf语句在if块内,所以无论DevFormat()的返回值如何,每次都会执行return语句.那是C中常见的陷阱:)