锁定老帖子 主题:不会被编译器优化掉的“空语句”
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-10
gfdice 写道 ray_linn 写道 /od, 不让它做任何优化呗。。。。
那得改工程文件了,每次从VSS上GetLatestVersion,或者添加了新文件要check in,这时候不就有点麻烦了,而且万一忘了就小小地悲剧了。 个人觉得取消优化比人为的加入空语句有意义得多,只需要写一个makefile写一个 !if "$(DEBUG)" == "1" CFLAGS=/od !else CFLAGS=/Ox !endif 这不就结了么 |
|
返回顶楼 | |
发表时间:2010-09-10
最后修改:2010-09-10
debug需要空语句的理由是什么?
例如: A语句 空语句 B语句 如果断点在空语句,这和断点在B语句有什么差别? A语句 空语句 } 这种情况断点加在最后的}上也OK 看不到需要空语句的理由 |
|
返回顶楼 | |
发表时间:2010-09-10
{ bool bored = true;}
|
|
返回顶楼 | |
发表时间:2010-09-10
突然想起来x86有nop指令的嘛
#define sticky_call() asm volatile ("nop") |
|
返回顶楼 | |
发表时间:2010-09-10
piao_bo_yi 写道 { bool bored = true;}
这个会被-O2给抹掉 |
|
返回顶楼 | |
发表时间:2010-09-15
强强爱妍妍 写道 debug需要空语句的理由是什么?
例如: A语句 空语句 B语句 如果断点在空语句,这和断点在B语句有什么差别? A语句 空语句 } 这种情况断点加在最后的}上也OK 看不到需要空语句的理由 例如,有一个LRESULT的返回值需要判断,而可能的返回值是在别的头文件里用MAKELRESULT之类的宏算出来的,也就是用TRACE打出来数值还得打出来这些MAKELRESULT的宏的值来对比,而且懒得TRACE,就想下个断点看看,那我就可以这样: switch(result) { case MACRO1: break; case MACRO2: break; case MACRO3: break; blabla... } 请问我断点打在哪里? |
|
返回顶楼 | |
发表时间:2010-09-15
gfdice 写道 强强爱妍妍 写道 debug需要空语句的理由是什么?
例如: A语句 空语句 B语句 如果断点在空语句,这和断点在B语句有什么差别? A语句 空语句 } 这种情况断点加在最后的}上也OK 看不到需要空语句的理由 例如,有一个LRESULT的返回值需要判断,而可能的返回值是在别的头文件里用MAKELRESULT之类的宏算出来的,也就是用TRACE打出来数值还得打出来这些MAKELRESULT的宏的值来对比,而且懒得TRACE,就想下个断点看看,那我就可以这样: switch(result) { case MACRO1: break; case MACRO2: break; case MACRO3: break; blabla... } 请问我断点打在哪里? 描述真隐晦... |
|
返回顶楼 | |
发表时间:2010-09-16
你都已经是debug了, 为什么不用编译参数, 你可以编译不同的debug版本啊。
|
|
返回顶楼 | |
发表时间:2010-09-22
最后修改:2010-09-22
这种情形是有的。有时候的确需要这样的语句来帮助调试。
写一个无用的类,在其中暴露一个public static的成员,然后给这个成员赋值,编译器应该是不会去优化掉它的。因为编译器无法判断它是否有用。这个办法比较通用,而且代码量也少。 比如A.b=1; |
|
返回顶楼 | |