【发布时间】:2023-03-16 14:25:02
【问题描述】:
将“0”作为标志附加到printf %p 格式说明符是否正确?
#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 的警告:
“警告:'0' 标志与 '%p' gnu_printf 格式 [-Wformat] 一起使用”
阅读cppreference printf,我看到了:
0 :用于整数和浮点数转换,前导零 用于填充字段而不是空格字符。对于整数 如果明确指定精度,则忽略它。为了 使用此标志的其他转换会导致未定义的行为。它是 如果存在 - 标志,则忽略。
据我所知,%p 是指针地址,毕竟它是一个整数,所以这种未定义的行为是否适用于 %p?
如果不是,为什么会出现 GCC -Wformat 警告?
【问题讨论】:
-
我猜是因为代码是无意义的,因为基本语法原因无法编译?
printf("Pointer address: %08p", return 0;不要在此处输入代码,而是复制/粘贴实际代码或工作示例。 -
天哪,对,我刚刚发现从 Ideone 复制和粘贴无法按预期工作,已编辑。
标签: c++ printf gcc-warning