मैं सिर्फ printf के लिए मैन पेज देख रहा था और कुछ मेरे साथ हुआ। मैं सोच रहा था कि यहां कोई "भाषा वकील" है जो अपेक्षाकृत सरल प्रश्न का उत्तर दे सकता है :- पी।असंगत प्रिंटफ प्रारूप विनिर्देशों के बारे में प्रश्न
तो 'टी' संशोधक
एक निम्न पूर्णांक रूपांतरण एक ptrdiff_t तर्क से मेल खाती है के रूप में परिभाषित किया गया है।
तो क्या माना अगर आप इस एक अहस्ताक्षरित पूर्णांक रूपांतरण के साथ गठबंधन होने के लिए है? स्पष्ट रूप से ओ, यू, एक्स और एक्स सभी को बिना हस्ताक्षर किए गए मानों के रूप में व्याख्या करने का इरादा है, जबकि डी और मैं हस्ताक्षरित हैं।
इसी तरह, ptrdiff_t
को छोड़कर सभी संशोधक (int/unsigned int, size_t
/ssize_t
, आदि) के लिए हस्ताक्षरित/हस्ताक्षरित संस्करण हैं।
प्रैक्टिस में, कुछ भी बुरा नहीं होता है क्योंकि प्रकार के हस्ताक्षरित संस्करण हस्ताक्षरित संस्करणों के समान स्थान पर कब्जा करते हैं। तो बाइट्स के बारे में सही ढेर से निकल जाता है।
तो कुछ भी नहीं है "बुरा", वास्तव में प्रिंट में "INT_MIN
" को छोड़कर परीक्षण किया सब बातों के लिए उम्मीद मूल्य होता है, (यह मानते हुए कि sizeof(int) == sizeof(ptrdiff_t)
।
printf("%tu %td\n", INT_MIN, INT_MIN);
प्रिंट
2147483648 -2147483648
एक पर 32-बिट सिस्टम।
क्या मानक के बारे में कोई राय है? मुझे लगता है कि जवाब "अनिर्धारित व्यवहार" होगा। लेकिन मुझे लगा कि मैं पूछूंगा;)।
साथ काम करना चाहिए सी ++ के साथ कुछ भी करने के लिए (कम से कम सी ++ 0x से पहले)? क्या printf() इत्यादि सी ++ 0x में सी 99 के अनुरूप होने के लिए बदला जा रहा है? मुझे लगता है कि आपको सी ++ टैग को हटाना चाहिए। –
ptrdiff_t C++ में cstddef में परिभाषित किया गया है। printf स्पष्ट रूप से सी ++ में भी मौजूद है। मुझे सी ++ 0x बदलते प्रिंटफ के बारे में पता नहीं है। –
hrmm, ऐसा लगता है कि C++ में c99 't' संशोधक नहीं हो सकता है। काफी उचित। –