返回 INT8U 类型的函数调用时加 void 是何用意 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
ivito

返回 INT8U 类型的函数调用时加 void 是何用意

  •  
  •   ivito
    fireboyvt Jan 26, 2015 4453 views
    This topic created in 4112 days ago, the information mentioned may be changed or developed.
    ucos的OSTaskCreateExt()函数返回值为INT8U,但调用的时候前边加了个void,即 void OSTaskCreateExt(); 不知道这有什么作用呢
    13 replies    2015-01-27 18:13:29 +08:00
    Panic
        1
    Panic  
       Jan 26, 2015
    你来 v2ex 问嵌入式,想多了。。
    是官方写法吗,我没搜到在哪void 调用了
    scys
        2
    scys  
       Jan 26, 2015 via Android
    感觉是bug
    oaix
        3
    oaix  
       Jan 26, 2015
    这不是调用吧,是函数声明。函数声明和实际函数的返回值类型不同在调用的时候没有区别。
    jedyu
        4
    jedyu  
       Jan 26, 2015
    消除lint?
    xylophone21
        5
    xylophone21  
       Jan 26, 2015
    你确定是
    void OSTaskCreateExt();
    不是
    (void)OSTaskCreateExt();
    ?
    ivito
        6
    ivito  
    OP
       Jan 26, 2015
    @Panic ucos源代码OS_CORE.c中的OS_InitTaskIdle函数中调用了
    @scys @oaix @jedyu @xylophone21 我打错了,调用的时候用的是(void)OSTaskCreateExt();
    denghongcai
        7
    denghongcai  
       Jan 26, 2015
    没意义,仅仅只是一种编程风格,显式的说明这里不需要返回值而已,去掉也没区别
    ivito
        8
    ivito  
    OP
       Jan 26, 2015
    @denghongcai 还见过另一种类似的做法,将传入的参数前加(void)&,说是防止编译器warning变量没有使用
    denghongcai
        9
    denghongcai  
       Jan 26, 2015
    @ivito 这样的 warning 其实还是有意义的,很多 lint 工具对会对函数的返回值没有接收者的情况报错,C 灵活也难用。结果到最后 Golang 搞出来了,干脆强制必须要有接收者,即使是个 _ 忽略也得显式的写出来
    Shazoo
        10
    Shazoo  
       Jan 26, 2015
    真亲切……现在用freertos比较多了……

    话说这语法就是对返回值进行转义吧。

    返回值无接收者,keil,iar的编译器标准参数貌似不会有warning的……
    ivito
        11
    ivito  
    OP
       Jan 26, 2015
    @denghongcai 强制必须有接收者的话很麻烦啊,写出来感觉也不美观,会有很多多余的代码
    @Shazoo 对返回值转义是什么意思,能具体解释一下吗
    xylophone21
        12
    xylophone21  
       Jan 27, 2015
    函数声明为返回int,但你没有处理,一般来说是两种情况:
    1.函数声明错了,返回值没啥意义
    2.你用错了,没有判断返回值,不严谨

    这都是风险,编译器识别出来给个警告很正常.
    即使编译器不警告,lint工具也要给警告不是?
    这个时候正确的做法应该是修复它.

    但是也存在第三种情况,就是这种使用场景下确实不需要判断错误,或者即使判断了也没办法(用了assert等).
    但项目又要求不能有warning,要过lint,这个时候就只能使用这种黑技巧了.
    然后这么奇葩的代码,代码走读时肯定会有人注意到的,解释清楚了,大家都认可这里不需要判断了,就上传罗.
    ivito
        13
    ivito  
    OP
       Jan 27, 2015
    @xylophone21 受教了,经常见到直接丢掉函数返回值的情况,一直以为是用不用都行的,这样感觉灵活很多
    About     Help     Advertise     Blog     API     FAQ     Solana     1574 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 16:25 PVG 00:25 LAX 09:25 JFK 12:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86