首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告:赋值使指针在没有强制转换的情况下从整数生成[默认启用]

警告:赋值使指针在没有强制转换的情况下从整数生成[默认启用]
EN

Stack Overflow用户
提问于 2012-04-06 18:32:49
回答 2查看 21.8K关注 0票数 0

当我试图在带有-Wall标志的Linux4.6.3版编译这段代码时,我会收到以下两个警告:

  1. It指向cmd[1]=cmd2send;

警告:赋值使指针来自整数,而默认情况下不启用。

  1. 它指向变量static unsigned char *cmd[65]

警告:变量“cmd”集但未使用-Wunused-but-set-variable.

这些警告是什么造成的?以及如何避免它们?

代码语言:javascript
运行
复制
  int CommandHandler(unsigned char cmd2send)
    {
        static unsigned char *cmd[65];

        // *make sure device is open*
        if(handle==NULL) // handle defined in transceiver.h
        {
            puts("CommandHandler::Cant handle command");
            // try to open device again
            if(OpenMyDev()!=0)
            return -1;
            // if no return then retry is fine
            puts("retry SUCCEEDED!, device is open");
        }

        // *send command to firmware*
        cmd[0]=0x0;
        cmd[1]=cmd2send;
        .......
        return 0;

    }

在这里,我还收到了关于可变电压的警告#2:

代码语言:javascript
运行
复制
float Get_Temperature(void)
{
    //unsigned char RecvByte=0;
    //int byte[4];

    int i;

    float voltage=0;
    float resistance=0;
    float temperature=0;
    float SamplesAVG=0;

    unsigned int Samples=0;

    unsigned char* rvc;
    unsigned char mydata[65];


    for(i=0;i<=10;i++)
    {
        //Transimit Start Of Frame
        mydata[0]=0;
        mydata[1]=GET_TEMPERATURE;

        if(Write2MyDev(mydata)<0)  {return -1;}

        rvc=ReadMyDev(0);

        SamplesAVG+=(rvc[0]<<24)+(rvc[1]<<16)+(rvc[2]<<8)+rvc[3];
        usleep(100*1000);
    }

    Samples=SamplesAVG/10;
    printf("TO PRINT VAL:%d\n",Samples);
    puts("------------");

    voltage = (Samples * 5.0)/1023.0; // 0..1203= 1024 values
    resistance = 10000.0/ (1023.0/Samples);
    ...
    return retval;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-06 18:36:17

cmd2send是一个unsigned char,您在cmd[1]上设置值,这是一个char *char *是一个指针,而unsigned char被视为整数,因此您要从没有强制转换的integer中生成指针cmd[1]

您可能需要一个字符数组( char cmd[65] ),而不是一个char *数组。

另外,由于您创建了值并将其赋值给cmd,但是您从未使用过它,因此也会收到警告。

票数 4
EN

Stack Overflow用户

发布于 2012-04-06 18:34:42

静态无符号字符*cmd65 65;.cmd1 = cmd2send;/* cmd是一个指针数组,因此cmd1是一个指针。*/

好的,所以cmd是一个pf 256个指针数组。将char分配给cmd[1]将生成第一个警告。

编译器还会注意到实际上没有在任何地方使用cmd,因此它会生成第二个警告。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10047653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档