微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > void *p_arg和(void)p_arg是一个什么东西,看不明白

void *p_arg和(void)p_arg是一个什么东西,看不明白

时间:10-02 整理:3721RD 点击:
想问一下,下面程序中void *p_arg和(void)p_arg是一个什么样的东西
* 函数名:Task_LED
* 描述  : LED流水灯        
* 输入  :无
* 输出  : 无
*/
void Task_LED(void *p_arg)
{
        OS_ERR err;
    (void)p_arg;                                // 'p_arg' 并没有用到,防止编译器提示警告
        
    while (1)
    {
        LED1( ON );
        OSTimeDlyHMSM(0, 0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
        LED1( OFF);
        LED2( ON );
        OSTimeDlyHMSM(0, 0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
        LED2( OFF);
        LED3( ON );
        OSTimeDlyHMSM(0, 0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
        LED3( OFF);
    }
}
void *p_arg是无类型指针?也就是任意类型指针吗?
那(void)p_arg;   又是什么意思?
在很多程序中看到这句p_arg=p_arg;
这句对自己赋值有什么意义?

void *p_arg是万能型指针,由函数内部强制转为某个具体类型的指针。
(void)p_arg;表示暂时不用该参数,防止编译器告警

吴坚鸿大师说,这个指针你根本不用学。吴大师干了十年从来都没用过指针!

void *p_arg是无类型指针?也就是任意类型指针吗?
无类型指针可以被强制转换成任何类型的指针。任何类型的指针也可以强制转换成无类型指针。至于这个指针到底指向什么,可以由你自己决定。
在很多程序中看到这句p_arg=p_arg;
这句只是为了避免在某些编译器中出现不必要的警告。 uC/OS-II 操作系统中经常出现这种情况。

(void)p_arg;表示暂时不用p_arg,防止编译器告警?
那么在很多程序中看到这句p_arg=p_arg;这一句有什么作用呢?

(void)p_arg;表示暂时不用p_arg,防止编译器告警?
这句p_arg=p_arg;这一句为什么能防止警告呢?

从这个角度看,效果一样,当然,有的编译器可以直接优化掉这个无意义的语句

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top