社区
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了.
有谁碰到过类似问题并知道原因的么?
...全文
365
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)
if语句
在条件为0时也能进入的
奇怪
问题
开发环境: win10 + qt5.9.9 + vs2015_x86
问题
现象: 下面代码中第
一个
if语句
不能够进入,但是,第二个
if语句
能够进入。 if(0) { qDebug() << "=="; return true; } // 判断用户名密码是否一致 if(0) { qDebug() << "==";
嵌入式C语言-关于if条件判断为真但不执行if块语句的
问题
关于if条件判断为真但不执行if块语句的
问题
,我一直也还不是很清楚是什么原因造成的。在网上查看了一些网友的评论但回答也不是非常的准确,或者说每个人遇到的情况都略有不同。 我是在调试开发板的时候遇到两类这样的bug,我大致用文字描述一下我遇到的
问题
和解决方法给各位马友提供思路。## 情况一 while(1) { if(逻辑判断) { if块内语句 } } 在这样调试的时候,会发现当if逻辑判断为真的时候却没能进入if块内语句执行,只仅仅死循环if判断,
问题
是我并不知道造成这样
问题
的原因
if false java_Java输入
if语句
为false
我遇到了这个程序中最
奇怪
的错误,在调试它时会得到确认.我有以下代码(当然要归结为突出
问题
):BHFrame.javapublic class BHFrame{private boolean uSS;private StateSaver stateSaver;public BHFrame(boolean useInternalStateSaver){//Init codeuSS = useInter...
if语句
既执行if里的内容又执行else里的内容??不存在的(事件冒泡)
“窥屏”时,有群友说遇到
一个
问题
,
if语句
既执行了if里的内容又执行了else里的内容,这怎么可能呢? 这是贴出的代码大概是这个样子: 看着这代码貌似没啥
问题
,但是又没有贴出html,不过不难猜出HTML大概是这个样子: 执行后的确是既弹出了1又弹出了0.仔细看代码里面有个parents方法。首先看一下这个方法是干啥的。 parents方法是在 DOM 树中搜索这些元素的父级元素
java中输入语句不执行_Java输入
if语句
为false
我遇到了这个程序中最
奇怪
的错误,在调试它时会得到确认.我有以下代码(当然要归结为突出
问题
):BHFrame.javapublic class BHFrame{private boolean uSS;private StateSaver stateSaver;public BHFrame(boolean useInternalStateSaver){//Init codeuSS = useInter...
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章