Sunday 15 June 2014

c++ - C Preprocessor Expansion to another object-like macro -


मेरे पास निम्न कोड है (मिश्रित C ​​/ C ++ application)

  #include & lt ; stdint.h & gt; #define BUFFER_SIZE UINT16_MAX   

मैं उम्मीद कर रहा था BUFFER_SIZE होने के लिए (65535) जैसे UINT16_MAX stdint.h में परिभाषित किया गया है, लेकिन इसके बजाय संकलक शिकायत की UINT16_MAX परिभाषित नहीं किया गया था। जाहिर है मैक्रो विस्तार ऐसा नहीं हो रहा है जैसा मैं चाहता हूं।

मैं इसे स्वयं को (65535) को परिभाषित कर सकता हूं, लेकिन यह जानना चाहूंगा कि यह क्यों काम नहीं करता।

प्रतिक्रिया कुछ टिप्पणियों के लिए:

  • मेरा कंपाइलर uint16_t प्रकार और UINT16_MAX को stdint.h

  • एक व्यक्ति __ STDC_LIMIT_MACROS परिभाषित करने का उल्लेख करता है - मैंने प्रभाव को stdint.h को शामिल करने से पहले इसे परिभाषित करने की कोशिश की है।

    उत्तर

    तो यह __ STDC_LIMIT_MACROS लेकिन और अधिक जटिल।

    1. #define एक में था हेडर फाइल (जो stdint.h शामिल है)
    2. मैं था #define __ STDC_LIMIT_MACROS stdint.h सहित करने से पहले इस फाइल में
    3. मैं में है कि हेडर फाइल शामिल एक अन्य स्रोत फ़ाइल यह अन्य स्रोत फ़ाइल # stdint.h को भी शामिल करती है और मेरे हेडर को शामिल करने से पहले किया था। इसलिए जब stdint.h पहले शामिल किया गया था __ STDC_LIMIT_MACROS परिभाषित नहीं किया गया था

      मेरे समाधान सिर्फ -D__STDC_LIMIT_MACROS मेरी संकलक तर्क में जोड़ने के लिए किया गया था।

      जैसा कि आप सी ++ का इस्तेमाल करते हैं, आप ऐसा कर सकते हैं:

        #define __STDC_LIMIT_MACROS   

      से /usr/include/stdint.h हाल ही में एक डेबियन की:

        / * आईएसओ C99 मानक निर्दिष्ट करता है कि सी ++ कार्यान्वयन में इन मैक्रोज़ को स्पष्ट रूप से परिभाषित किया जाना चाहिए, अगर स्पष्ट रूप से अनुरोध किया जाए। * / #if! परिभाषित __सीप्लसप्लस || परिभाषित __STDC_LIMIT_MACROS ... / * अहस्ताक्षरित अभिन्न प्रकार के अधिकतम * / # परिभाषित UINT8_MAX (255) # परिभाषित UINT16_MAX (65535) # UINT32_MAX (4294967295U) को परिभाषित # परिभाषित UINT64_MAX (__UINT64_C (18446744073709551615))    

No comments:

Post a Comment