2012-12-01 12 views
5

यदि मैं #define में एक पूर्ण संख्या का उपयोग करता हूं, तो data type क्या यह C99 में sprintf() में माना जाता है?#define में पूरा डेटा किस डेटा प्रकार है?

#define NUMBER 100 

sprintf(buf, "%i\n", NUMBER); // is it %i, %u, %lu ? 
+2

क्या यह 'sprintf ("% i \ n ", 100)' के बराबर नहीं होगा? –

+1

थंब का नियम: एक मैक्रो टेक्स्ट कॉपी-एंड-पेस्ट है। :) – Mysticial

उत्तर

9
#define NUMBER1 100 /* int: use "%d" or "%i" in printf() */ 
#define NUMBER2 100U /* unsigned int: use "%u" in printf() */ 
#define NUMBER3 100L /* long int: use "%ld" or "%li" in printf() */ 
#define NUMBER4 100UL /* unsigned long int: use "%lu" in printf() */ 
/* C99 */ 
#define NUMBER5 100LL /* long long int: use "%lld" or "%lli" in printf() */ 
#define NUMBER6 100ULL /* unsigned long long int: use "%llu" in printf() */ 

नोट: यू और एल भी लोअरकेस
टिप्पणी 2 में हो सकता है: यू से पहले या एल के बाद आ सकता है या डालूँगा

+1

बहुत अच्छा जवाब मुझे यह नहीं पता था। –

3

उस शाब्दिक प्रकार का प्रकार int है। आपको %d या %i का उपयोग करना चाहिए।

NUMBER प्रीप्रोसेसर द्वारा संकलित करते समय शाब्दिक रूप से 100 के साथ प्रतिस्थापित हो जाता है। तथ्य यह है कि यह एक मैक्रो का मतलब है कंपाइलर के लिए कुछ भी नहीं, क्योंकि संकलक कभी भी NUMBER नहीं देखता है; कंपाइलर केवल 100 देखता है।

2

सभी #define -d आइटम सीधा पाठ प्रतिस्थापन कर रहे हैं: कल्पना कीजिए कि 100NUMBER पहचानकर्ता के बजाय में चिपकाया जाता है:

sprintf(buf, "%i\n", NUMBER); 
//  ^^^ It's sprintf, don't forget the buffer! 

100 के बाद से एक पूर्णांक शाब्दिक, आप %d का उपयोग करना चाहिए है।

+0

आप सही हैं, मैं sprintf() में चर भूल गया! –

संबंधित मुद्दे