在使用
printf
中的 %p 格式说明符时,是否将 '0' 附加为标记是正确的还是错误的?#include <stdio.h>
int main()
{
int a = 42;
void* p = &a;
printf("Pointer address: %08p", p);
return 0;
}
同样在Ideone上也有。
编译类似于上述的一些代码时,我从Microsoft Visual C++ 2015中没有得到任何警告或者其他提示,但是从GCC 5.4.0中却收到了一个警告:
"warning: '0' flag used with '%p' gnu_printf format [-Wformat]"
从cppreference printf中了解到:
0:对于整数和浮点数转换,使用前导零填充字段而不是空格字符。对于整数数字,如果明确指定了精度,则会被忽略。对于使用此标志的其他转换,结果是未定义的行为。如果存在-标志,则会被忽略。
据我理解,%p用于指针地址,毕竟它是一个整数数字,那么这个未定义的行为是否适用于%p呢?
如果不是,那为什么GCC给出了-Wformat警告?
printf("Pointer address: %08p", return 0;
不要在此处输入代码,而应复制/粘贴实际代码或工作示例。 - Lundin