在C99中,可能的格式指定器之一是"%zi",根據cppreference,它應該對應于一個 "有符號的size_t"。在Linux系統上,我使用ssize_t,來自sys/types.h,這就可以了。但是--在Windows上,我們沒有這個條件。另外--它對我的作業可能只是一種僥幸。
我怎樣才能確定,我是如何確定?
我怎樣才能以一種可移植的方式確定我在printf()/sprintf()呼叫中應該為"%zi "傳遞的型別?
uj5u.com熱心網友回復:
我怎樣才能以一種可移植的方式確定我在
printf()/sprintf()呼叫中應該為"%zi "傳遞的型別?
你不能以一定的、可移植的方式來做這件事。
C標準承認可能存在1與size_t相對應的有符號整數型別,但是沒有給它一個名字或提供一個可移植的方法來識別它。像許多事情一樣,這被留作一個擴展,在一些 C 實作中,而不是在其他實作中。
腳注
1 C 2018 6.2.5 6要求,對于每個有符號的整數型別,都有一個相應的無符號整數型別,但反過來卻不需要。(至少沒有明確規定;我還沒有檢查過,例如,通常的算術轉換是否意味著這一點。
uj5u.com熱心網友回復:
z - 指定下面的d, i, o, u, x, 或 X 轉換 指定適用于一個size_t或相應的有符號整數 型別的引數;或者后面的n轉換指定符適用于 指定下面的d、i、o、u、x或X轉換指定符適用于一個size_t或相應的有符號整數型別引數;或者指定下面的n轉換指定符適用于與size_t 引數的指標。
但是在C89標準中沒有關于它的內容,所以如果你的實作不是100%符合C99 標準的話,它可能無法作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334256.html
標籤:
