当我试图在带有-Wall
标志的Linux4.6.3版编译这段代码时,我会收到以下两个警告:
cmd[1]=cmd2send;
警告:赋值使指针来自整数,而默认情况下不启用。
static unsigned char *cmd[65]
警告:变量“cmd”集但未使用-Wunused-but-set-variable.
这些警告是什么造成的?以及如何避免它们?
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:
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;
}
发布于 2012-04-06 18:36:17
cmd2send
是一个unsigned char
,您在cmd[1]
上设置值,这是一个char *
。char *
是一个指针,而unsigned char
被视为整数,因此您要从没有强制转换的integer
中生成指针cmd[1]
。
您可能需要一个字符数组( char cmd[65]
),而不是一个char *
数组。
另外,由于您创建了值并将其赋值给cmd
,但是您从未使用过它,因此也会收到警告。
发布于 2012-04-06 18:34:42
静态无符号字符*cmd65 65;.cmd1 = cmd2send;/* cmd是一个指针数组,因此cmd1是一个指针。*/
好的,所以cmd
是一个pf 256个指针数组。将char
分配给cmd[1]
将生成第一个警告。
编译器还会注意到实际上没有在任何地方使用cmd
的,因此它会生成第二个警告。
https://stackoverflow.com/questions/10047653
复制相似问题