当我用 C 编译时,我收到以下警告。
../tcpuip/uip_arp.c: In function 'display_arp_table':
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_p
rintf format
../tcpuip/uip_arp.c:547: warning: '0' flag ignored with precision and '%x' gnu_printf format
出现错误的行是
RELEASE_MSG("MAC: %0.2x.%0.2x.%0.2x.%0.2x.%0.2x.%0.2x ",(unsigned char)tabptr->ethaddr.addr[0],(unsigned char)tabptr->ethaddr.addr[1],(unsigned char)tabptr->ethaddr.addr[2],(unsigned char)tabptr->ethaddr.addr[3],(unsigned char)tabptr->ethaddr.addr[4],(unsigned char)tabptr->ethaddr.addr[5]);
Tabptr 是结构arp_entry的指针
PACKED struct arp_entry {
u16_t ipaddr[2];
struct uip_eth_addr ethaddr;
u8_t time;
#ifdef _ALIGNED_
u8_t dummy;
#endif
}
Ethadder 是结构uip_eth_addr的指针
PACKED struct uip_eth_addr {
u8_t addr[6];
} ;
如果有人可以分享有关此警告的一些信息,请。我只知道 %0.2x 表示字符为两位数十六进制。帮助!
格式字符串%0.2x
表示:
- 以十六进制打印无符号整数
- 打印至少两个数字
- 从左边用零填充
由于精度定义了要输出的最小位数,因此零填充将被忽略(从规范中)。您可以使用%.2x
或%02x
来执行您想要的操作。
要得到
1
11
55555
你会使用%4x
.
01
11
111
会%4.2x
0001
0011
55555
将是%04x
或%.4x
.
请注意,对值进行签名时存在差异。精度定义了位数,这意味着该值将为符号占用更多空间。使用最小输出宽度,符号已计数:
$ printf "%.5in%05in" '-11' -11
-00011
-0011
你当然想写:
%02x
而不是%0.2x
实际上,%2.2x
将是 2 位十六进制。 0
是一个格式标志,指示零填充而不是空白填充,但由于您没有指定字段宽度,只指定精度,因此毫无意义。