社区
C语言
帖子详情
一个很奇怪的问题, 关于if语句的
lyl0426
2011-10-07 05:00:56
代码如下:
if(!is_file_exist(&file_path))
{
.....
}
is_file_exist(&file_path)返回类型为BOOL
单步调试, if语句内条件明明成立,但是就是不进入代码块
而把is_file_exist()返回的值赋给一个BOOL型的变量,再用该变量作为if语句的条件,就ok了.
有谁碰到过类似问题并知道原因的么?
...全文
313
27
打赏
收藏
一个很奇怪的问题, 关于if语句的
代码如下: if(!is_file_exist(&file_path)) { ..... } is_file_exist(&file_path)返回类型为BOOL 单步调试, if语句内条件明明成立,但是就是不进入代码块 而把is_file_exist()返回的值赋给一个BOOL型的变量,再用该变量作为if语句的条件,就ok了. 有谁碰到过类似问题并知道原因的么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
沭水河畔
2011-10-13
打赏
举报
回复
[Quote=引用 25 楼 lyl0426 的回复:]
函数明明宏定义将TRUE定义为1, FALSE定义为0了, 但是使用if(is_file_exist(&file_path) == false)并不可行, 输出时值为0 没错. 但是使用if(is_file_exist(&file_path) != true)就可以了. 应该还是因为C没有BOOL类型造成的.
[/Quote]
沒有的話應該報錯的吧?
假設TRUE=1,FALSE=0,那麼“A!=true”和“A==false”是不一樣的,比如A為0、1以外的值。樓主再檢查一下邏輯。
lyl0426
2011-10-12
打赏
举报
回复
谢谢大家的回复.
lyl0426
2011-10-12
打赏
举报
回复
函数明明宏定义将TRUE定义为1, FALSE定义为0了, 但是使用if(is_file_exist(&file_path) == false)并不可行, 输出时值为0 没错. 但是使用if(is_file_exist(&file_path) != true)就可以了. 应该还是因为C没有BOOL类型造成的.
lyl0426
2011-10-10
打赏
举报
回复
[Quote=引用 13 楼 studycbc 的回复:]
1、is_file_exist(&file_path)函数返回的问题,都为真无法进入, 调用了全局变量被修改会分配的内存失败或被释放
2、编译器的问题,觉得这个可能性比较小
[/Quote]
is_file_exist()返回值我都单步调了,确认是返回FALSE的情况下也没有进入if语句块.
个人也觉得应该不会是编译器的问题
lyl0426
2011-10-10
打赏
举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
不要写连自己……
[/Quote]
谢谢,我会试着调一下.
lyl0426
2011-10-10
打赏
举报
回复
[Quote=引用 11 楼 hengshan 的回复:]
is_file_exist(&file_path)
估计是你这个函数返回值的问题,应该是整形吧?
注意c中没有bool型,是用整形来表示的,0表示false,非零表示true
[/Quote]
那就是说用取非符号其实是没有意义的了? 我有尝试用is_file_exist() == FLASE的判断语句, 我们程序里面FALSE的宏定义为0,TRUE定义为1而不是非0 .但是这个判断也无效
5t4rk
2011-10-10
打赏
举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
不要写连自己……
[/Quote]
高手来了++
顶
lyl0426
2011-10-10
打赏
举报
回复
[Quote=引用 10 楼 lishanchao 的回复:]
我覺得這個函數可能有問題:
is_file_exist(&file_path)
如果這個函數沒有問題,那麼參考這個帖子。帖子中樓主最終發現自己提前free掉了內存,導致野指針出現,所以表面看起來問題很詭異。
[/Quote]
这个函数有在其他地方用到, 都没有问题.
lyl0426
2011-10-10
打赏
举报
回复
[Quote=引用 9 楼 anyidan 的回复:]
请先确认函数的声明和函数定义正确,并且在此点可以看到函数的声明/定义
[/Quote]
这个可以确定无错.
lyl0426
2011-10-10
打赏
举报
回复
[Quote=引用 8 楼 johnpher 的回复:]
可以在release下printf表达式is_file_exist(&file_path)的值,
或者清理工程重新编译再试试看,还不行就是编译环境的问题了。
[/Quote]
你说的方法都有试过, is_file_exist的值是false, 但是就是进不去if语句块
feidaosh
2011-10-10
打赏
举报
回复
在C里,你打不出BOOL类型的值的,什么FALSE、TRUE都是浮云,你只能打出一个整数,把这个整数打出来看看。要知道a==true,这个true可能是1,也可能是-1。。。
feidaosh
2011-10-10
打赏
举报
回复
你把is_file_exist的原型贴出来看一下。。。C里面并没有BOOL类型,你说你把is_file_exist的返回值给一个BOOL变量就能行,那么可以把这个返回值和这个BOOL变量的值全打出来看一下。
636f6c696e
2011-10-10
打赏
举报
回复
改成if(is_file_exist(&file_path) == false)
xinshirn
2011-10-10
打赏
举报
回复
在这个if语句前面加一句话
printf("%d\n",is_file_exist(&file_path));
试试呢?
七擒关羽
2011-10-08
打赏
举报
回复
1、is_file_exist(&file_path)函数返回的问题,都为真无法进入, 调用了全局变量被修改会分配的内存失败或被释放
2、编译器的问题,觉得这个可能性比较小
赵4老师
2011-10-08
打赏
举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
不要写连自己也预测不了结果的代码!
hengshan
2011-10-08
打赏
举报
回复
is_file_exist(&file_path)
估计是你这个函数返回值的问题,应该是整形吧?
注意c中没有bool型,是用整形来表示的,0表示false,非零表示true
沭水河畔
2011-10-08
打赏
举报
回复
我覺得這個函數可能有問題:
is_file_exist(
&
file_path)
如果這個函數沒有問題,那麼參考
這個帖子
。帖子中樓主最終發現自己提前free掉了內存,導致野指針出現,所以表面看起來問題很詭異。
AnYidan
2011-10-07
打赏
举报
回复
[Quote=引用楼主 lyl0426 的回复:]
代码如下:
if(!is_file_exist(&file_path))
{
.....
}
is_file_exist(&file_path)返回类型为BOOL
单步调试, if语句内条件明明成立,但是就是不进入代码块
而把is_file_exist()返回的值赋给一个BOOL型的变量,再用该变量作为if语句的条件,就ok了.
有谁碰到过类似问题并知……
[/Quote]
请先确认函数的声明和函数定义正确,并且在此点可以看到函数的声明/定义
JiangXiang
2011-10-07
打赏
举报
回复
可以在release下printf表达式is_file_exist(&file_path)的值,
或者清理工程重新编译再试试看,还不行就是编译环境的问题了。
加载更多回复(7)
python怎样把
if语句
写成一行_python:将
一个
简单的if-then-else语句放在一行上
本
问题
已经有最佳答案,请猛点这里访问。...然而,是否有一种更简单的方法来编写if-then-else语句,使其适合一行呢?例如:if count == N:count = 0else:count = N + 1有更简单的写法吗?我的意思是,在Objective-C中,...
if语句
在条件为0时也能进入的
奇怪
问题
开发环境: ...下面代码中第
一个
if语句
不能够进入,但是,第二个
if语句
能够进入。 if(0) { qDebug() << "=="; return true; } // 判断用户名密码是否一致 if(0) { qDebug() << "==";
打开GTA 5竟要跑19.8亿次
if语句
!黑客嘲讽R星代码烂,修改后直接省70%加载时间
本文转载自 量子位 一支烟的功夫,GTA 5联机版终于打开了。 「7年了!...原来,R星(游戏开发商RockStar)写的代码太低效,加载时,
一个
if语句
竟然循环了19.8亿次…. 幕后黑手:谁占用大量时间? 加
解决servlet filter中
if语句
无效
问题
今天写代码学习filter时,遇到了一件很
奇怪
的事情,就是当在jsp中同时提交文件和
一个
text组件时,servlet中的
if语句
无法返回true,代码如下 这是jsp代码: <form action="uploadservlet" method="post" enctype=...
if语句
不执行是什么情况?(已解决)
answer = "good man" answer1 = "bad guy" answer2 = "smart guy" print('Who do you think I am? ') key =input() if key == answer1: print('滚!') elif key == answer2: print("木有错。...
奇怪
,
if语句
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章