1
Panic 2015-01-26 09:11:15 +08:00
你来 v2ex 问嵌入式,想多了。。
是官方写法吗,我没搜到在哪void 调用了 |
2
scys 2015-01-26 09:17:20 +08:00 via Android
感觉是bug
|
3
oaix 2015-01-26 09:17:49 +08:00
这不是调用吧,是函数声明。函数声明和实际函数的返回值类型不同在调用的时候没有区别。
|
4
jedyu 2015-01-26 09:20:29 +08:00
消除lint?
|
5
xylophone21 2015-01-26 10:14:47 +08:00
你确定是
void OSTaskCreateExt(); 不是 (void)OSTaskCreateExt(); ? |
6
ivito OP @Panic ucos源代码OS_CORE.c中的OS_InitTaskIdle函数中调用了
@scys @oaix @jedyu @xylophone21 我打错了,调用的时候用的是(void)OSTaskCreateExt(); |
7
denghongcai 2015-01-26 13:59:42 +08:00
没意义,仅仅只是一种编程风格,显式的说明这里不需要返回值而已,去掉也没区别
|
8
ivito OP @denghongcai 还见过另一种类似的做法,将传入的参数前加(void)&,说是防止编译器warning变量没有使用
|
9
denghongcai 2015-01-26 16:34:55 +08:00
@ivito 这样的 warning 其实还是有意义的,很多 lint 工具对会对函数的返回值没有接收者的情况报错,C 灵活也难用。结果到最后 Golang 搞出来了,干脆强制必须要有接收者,即使是个 _ 忽略也得显式的写出来
|
10
Shazoo 2015-01-26 16:50:45 +08:00
真亲切……现在用freertos比较多了……
话说这语法就是对返回值进行转义吧。 返回值无接收者,keil,iar的编译器标准参数貌似不会有warning的…… |
11
ivito OP |
12
xylophone21 2015-01-27 10:02:22 +08:00
函数声明为返回int,但你没有处理,一般来说是两种情况:
1.函数声明错了,返回值没啥意义 2.你用错了,没有判断返回值,不严谨 这都是风险,编译器识别出来给个警告很正常. 即使编译器不警告,lint工具也要给警告不是? 这个时候正确的做法应该是修复它. 但是也存在第三种情况,就是这种使用场景下确实不需要判断错误,或者即使判断了也没办法(用了assert等). 但项目又要求不能有warning,要过lint,这个时候就只能使用这种黑技巧了. 然后这么奇葩的代码,代码走读时肯定会有人注意到的,解释清楚了,大家都认可这里不需要判断了,就上传罗. |
13
ivito OP @xylophone21 受教了,经常见到直接丢掉函数返回值的情况,一直以为是用不用都行的,这样感觉灵活很多
|