正在追加'0'作爲標誌到printf
%p格式說明符是否正確?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警告:
「警告:‘0’與‘%P’已使用標誌gnu_printf格式[-Wformat]」
從cppreference printf閱讀,我看到:
0:整數和浮點數轉換,前導零 用於填充的字段,而不是空格字符。對於整數 數字,如果明確指定了精度,則會忽略它。對於 使用此標誌的其他轉換會導致未定義的行爲。如果 - 標誌存在,則忽略 。
據我可以解釋,%p是指針地址,畢竟這是一個整數,所以這個未定義的行爲適用於%p?
如果不是,爲什麼GCC-Wformat警告?
oook,所以爲什麼downvote? – roalz
我猜想,因爲代碼是無意義的,不會爲基本的語法原因編譯? 'printf(「Pointer address:%08p」, return 0;'不要在這裏鍵入代碼,而是複製/粘貼實際的代碼或一個工作示例 – Lundin
Jez,對,我剛剛發現從Ideone複製粘貼不起作用正如我所料,編輯。 – roalz