int, long, आदि की परिभाषा लक्ष्य के लिए विशिष्ट हैं। यदि पूर्णांक और लंबे समय तक मैच का आकार तो एक
printf("%d",var);
अभ्यस्त शिकायत करते हैं, लेकिन अगर लंबा है 64 बिट्स का कहना है और पूर्णांक एक उदाहरण के रूप 32 बिट है, तो आप चेतावनी/त्रुटि आप का वर्णन मिल जाएगा। दो समाधान में से एक:
printf("%ld",var);
or
printf("%d",(int)var);
आप बीमा करने के लिए है कि संकलक सहयोगियों,% d आकार के साथ int अगर आप अभी तक एक और चेतावनी तो उसके अनुसार समायोजित मिलता है निश्चित रूप से पिछले के लिए।
संपादित करें:
संकलक, आप मदद करने के लिए सी पुस्तकालय सामान जो वास्तव में संकलक का व्यवसाय नहीं है के बारे में चिंता से कोशिश कर रहा है। printf() तर्कों की एक चर संख्या का उपयोग करता है, जो उम्मीद है कि आप अपनी प्रारूप स्ट्रिंग से ठीक से मेल खाते हैं। जब printf एक 32 बिट सिस्टम पर% d देखता है तो यह संभवतः अगले 32 बिट तर्क को पकड़ लेगा। लेकिन अगर आपने एक पैरामीटर के रूप में 64 बिट पूर्णांक डाला है तो यह उस पूर्णांक का एक आधा हिस्सा ले सकता है, और दूसरे आधे को प्रारूप स्ट्रिंग में अगले आइटम के रूप में उपयोग कर सकता है। उदाहरण
unsigned long ul;
float f;
f=3.4;
ul=0x3F9DF3B612345678;
...
printf("%X %f\n",ul,f);
के लिए अपने सिस्टम, endianess, पर निर्भर करता है आदि, एक 32 बिट प्रणाली आप बिल्कुल नहीं हैरान करता है, तो ऊपर दिए गए कोड इस उत्पादन का उत्पादन किया जाना चाहिए:
12345678 1.234000
क्योंकि है कि तुम क्या कहा था यह करने के लिए। आपने इसे उल के निचले 32 बिट्स लेने के लिए कहा और हेक्स (% एक्स) और उल के ऊपरी 32 बिट्स के रूप में मुद्रित किया और मुद्रित किया कि फ्लोट (% एफ) के रूप में और फंक्शन कॉल में एफ डालना एक अपशिष्ट था जिसे आपने कोई भी प्रदान नहीं किया था फ़्लोटिंग पॉइंट वैल्यू का उपयोग करने के लिए स्वरूपण।
अब किसी विशेष दिन पर लक्ष्य प्रणाली पर कंपाइलर के आधार पर आपके पास उपरोक्त कोड काम वांछित के रूप में हो सकता है, एक सिस्टम/कंपाइलर लें जहां 32 बिट के रूप में अनगिनत लंबे समय तक व्याख्या की जाती है और% X को 32 बिट के रूप में व्याख्या किया जाता है, तो आपको 64 बिट असाइनमेंट के बारे में चेतावनी मिलती है लेकिन प्रिंटफ थोड़ा और अधिक समझ में आता है।
इस दर्द के कारण, जीसीसी जैसे कंपाइलर्स यह मानकर अपने जीवन को बेहतर बनाने की कोशिश करते हैं कि जब आप printf() नामक फ़ंक्शन का उपयोग करते हैं तो आप मानक सी का उपयोग कर रहे हैं और वे इन प्रकारों की तलाश में आपकी प्रारूप स्ट्रिंग के माध्यम से विश्लेषण करते हैं सामान्य गलतियों का।
प्रलेखन हमेशा एक अच्छी शुरुआत है: http://www.cplusplus.com/reference/clibrary/cstdio/printf/ –