作者smallyuyuyu ()
看板Programming
标题[讨论] 如何处理 unchecked return value?
时间Sun Aug 4 13:38:35 2013
大家好
在这边想讨论一些 coding style
原PO目前负责的程式码,散布一些没有确认回传值的函式呼叫
e.g. fseek(ooxx)
----------------------------------------
听到的说法是: 因为总是可以保证 fseek 回传 0
所以这边没有做错误处理
或许也不需要做错误处理,因为一旦发生 return != 0
让程式正常挂掉即可
-----------------------------------------
近日公司采用 Coverity 去做 static code checking
这类型的函式呼叫被回报为 unchecked return value,必须处理
我的想法是
既然总是保证return = 0
那就使用 assertion 做确认
int seekSuccess = fseek(ooxx);
assert(seekSuccess == 0);
----------------------------------------
这时,另一个问题就发生了
公司 Build 时使用 compiler 最佳化 -O2
assert 全部被编译器skip
此时编译器回报 seekSuccess <- unused variable
编译失败
-----------------------------------------
请问这类型的问题有比较好的写法吗?
先谢谢各位大大
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.68.205
1F:→ adxis:如果编译选项可以调整的话 拿掉 -DNDEBUG 220.132.12.57 08/04 16:10
2F:→ adxis:就能保留 assert 220.132.12.57 08/04 16:10
3F:→ smallyuyuyu:楼上你好 compiler flag是公司决定 220.135.68.205 08/05 00:12
4F:→ smallyuyuyu:小弟无法干涉...>< 220.135.68.205 08/05 00:12
5F:推 jackylu63:我也想了解111.251.229.141 08/05 00:43
6F:→ adxis:那就自己定义一个assert:输出必要资讯後abo 220.132.12.57 08/05 02:00
7F:→ adxis:abort() 220.132.12.57 08/05 02:01
8F:→ AntaresStar:加void就好啦 (void)feek() 这样 111.248.75.20 08/05 08:39
9F:→ adxis:这样不会 abort 喔118.163.145.192 08/05 10:04
10F:→ AntaresStar:一开始就只是为了避coverity而已啊203.192.162.252 08/05 14:10
11F:→ Killercat:其实Coverity这个flag没啥意义 建议拿掉 59.124.251.135 08/22 12:08
12F:→ Killercat:很多函数传回来的值(比方说write()回传 59.124.251.135 08/22 12:09
13F:→ Killercat:的是写入的size)并没有什麽理由特别去 59.124.251.135 08/22 12:10
14F:→ Killercat:处理,这flag常常显得没太大意义 59.124.251.135 08/22 12:10
15F:→ Killercat:至於有exception(当然 C++用这个有点争 59.124.251.135 08/22 12:11
16F:→ Killercat:义就是)的话那这个就更没意义了.... 59.124.251.135 08/22 12:11