2009-12-23 11 views
7

के लिए पूर्णांक निरंतर बहुत बड़ा है चेतावनी से छुटकारा पाने के लिए मैं (प्रोग्रामेटिक रूप से) क्या कर सकता हूं?जी ++: चेतावनी: 'लंबे' प्रकार

... 
unsigned long long v=(unsigned long long)0xffffeeeeddddcccc; 
... 

g++ main.cpp -o main 
main.cpp:6: warning: integer constant is too large for ‘long’ type 

लेकिन जब मैं चलाने के रूप में उम्मीद कार्यक्रम सब कुछ ठीक है:

./main 
    sizeof(unsigned long long)==8 
    value of v==0xffffeeeeddddcccc 

इस्तेमाल किया पर्यावरण:

  • उबंटू-कार्मिक 32 बिट
  • जी ++ संस्करण: v4.4.1

संपादित: यहाँ पूर्ण और compilable main.cpp

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main(void) { 
    unsigned long long v=(unsigned long long)0xffffeeeeddddcccc; 
    const unsigned v_size = sizeof(unsigned long long); 
    cout << "sizeof(unsigned long long)==" << v_size << endl; 
    cout << "value of v==0x" << setw(v_size) << setfill('0') << hex << v << endl; 
    return 0; 
} 

उत्तर

12

2.13.1/2 है सी ++ मानक के अनुसार:

एक पूर्णांक शाब्दिक के प्रकार के अपने फार्म, मूल्य पर निर्भर करता है, और प्रत्यय। यदि यह दशमलव है और इसमें कोई प्रत्यय नहीं है, तो इसमें इन प्रकारों में से पहला है जिसमें इसका मूल्य प्रदर्शित किया जा सकता है: int, long int; यदि मूल्य को लंबे int के रूप में प्रदर्शित नहीं किया जा सकता है, तो व्यवहार अपरिभाषित है।

नया सी ++ मानक ull प्रत्यय का उपयोग करने की अनुमति देता है। g ++ 4.4.1 इस प्रत्यय के साथ-साथ विजुअल सी ++ 2008 का समर्थन करता है। आप इसे निम्न प्रकार से उपयोग कर सकते हैं:

unsigned long long v=0xffffeeeeddddccccULL; 
+0

मैंने पहले कभी यह 'ull' चीज़ नहीं देखी है। क्या आप मुझे एक संदर्भ दे सकते हैं? –

+0

'ull' नए सी ++ मानक का हिस्सा है। जी ++ 4.4.1 इस प्रत्यय का समर्थन करता है। –

+2

मैं 'यूएलएल' और पूंजी अक्षरों में अन्य प्रत्यय लिखना पसंद करता हूं ताकि वे दृष्टि से अलग हों। 'यू' के साथ यह शायद चिंता का बड़ा नहीं है, लेकिन केवल 'एल' या 'एल' के साथ इसे '1'' के लिए गलती करना बहुत आसान है। – JaakkoK

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