sizeof() 回傳的資料結構是 size_t.
但 size_t 在 32-bit 和 64-bit CPU 上的長度是不一樣的: 32-bit CPU 是 unsigned int, 64-bit CPU 則是 unsigned long.
因此在選用 length modifier 印出資料結構的長度時, 就要考慮 32-bit/64-bit CPU 的 portability 的問題.
自己以前的作法是把 sizeof() 的輸出強制轉成 unsigned long, 然後在 printf() 使用 %lu linght modifier.
最近在這篇看到一個更適合的作法: 使用 %zu.
int main()
{
printf("sizeof(void *) = %zu\n", sizeof(void *));
return 0;
}
printf() 的 man-page 也指出 %z 是用於列印 size_t 和 ssize_t 的 modifier.
支援 C99 的 compiler 都有支援這個 modifier.
之後寫 code 可以多注意一下.
z A following integer conversion corresponds to a size_t or
ssize_t argument, or a following n conversion corresponds
to a pointer to a size_t argument.
C
Linux
Written on
March
8th,
2021
by
Borting