سؤال
كنت تبحث فقط عن طريق صفحة على printf و شيء حدث لي.كنت أتساءل إذا كان هناك أي "اللغة المحامين" هنا يمكن أن الجواب بسيط نسبيا السؤال :-P.
وبالتالي فإن 't' التعديل يعرف
بعد تحويل عدد صحيح يتوافق مع ptrdiff_t الحجة.
فما هو من المفترض أن يحدث إذا كنت الجمع بين هذا مع صحيح غير الموقعة التحويل ؟ بوضوح o,u,x و x الكل ينوي أن تفسر على أنها غير موقعة القيم ، في حين d و أنا وقعت.
وبالمثل ، هناك توقيع/غير الإصدارات لجميع المعدلات (int/unsigned int ، size_t
/ ssize_t
, إلخ) إلا ptrdiff_t
.
في الممارسة العملية, لا شيء سيء يحدث منذ موقعة الإصدارات من أنواع تحتل نفس القدر من المساحة كما وقع الإصدارات.وذلك الحق عن وحدات البايت الحصول برزت من المكدس.
لذلك لا شيء "سيء" يحدث في الواقع في المطبوعات القيمة المتوقعة لجميع الأشياء اختبار باستثناء "INT_MIN
"(على افتراض أن sizeof(int) == sizeof(ptrdiff_t)
.
printf("%tu %td\n", INT_MIN, INT_MIN);
طباعة
2147483648 -2147483648
على نظام 32 بت.
لا معيار لها أي رأي حول هذا الموضوع ؟ أعتقد الإجابة ستكون "غير معرف السلوك." ولكن فكرت أن تسأل ;).
المحلول
لا شيء أن نرى هنا.مدونة كنت قد كتبت القانونية.
فقط بعض الحقائق لماذا:
- كل صحيح وقعت أنواع موقعة النظراء مع نفس الحجم/المواءمة بين متطلبات
ptrdiff_t
ويشرع أن يكون صحيح وقعت نوع من المعيار.ولذلك ، فقد ظهر التوأم.(في الواقع, نفس المنطق ينطبق علىsize_t
وكذلك -ssize_t
ليس ج ، ولكن POSIX)- على
t
طول محدد يجب أن تعمل معd
,i
,o
,u
,x
,X
أنواع