2013-06-19 8 views
7

कोई भी विकल्प #include <atomic> और #inlucde <cstdatomic> शामिल विकल्पों के बीच अंतर को स्पष्ट कर सकता है?"परमाणु" और "cstdatomic" के बीच क्या अंतर है?

मुझे लगता है कि कोई नहीं है, क्योंकि यह वही व्यवहार है?

मैं यह पूछ रहा हूं क्योंकि मेरे डेबियन सिस्टम पर मुझे केवल परमाणु है और मेरे कुबंटू सिस्टम पर मुझे cstdatomic मिला है। डेबियन पर

  • संकलक: संस्करण 4.7.2 (Debian 4.7.2-4) Kubuntu पर

  • संकलक: संस्करण 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

+0

ठीक है, 'cstdio' और' iostream' के बीच क्या अंतर है? बेशक यह समान कार्यक्षमता कम या कम है, लेकिन एक उचित सी ++ है और दूसरा सी विरासत है। स्पष्टीकरण के लिए –

उत्तर

8

<atomic> सी ++ परमाणु संचालन पुस्तकालय है।

<cstdatomic> सी परमाणु संचालन पुस्तकालय का सी ++ संस्करण है।

दोनों आपको उदाहरण देंगे, std::atomic_char लेकिन केवल सी ++ संस्करण में std::atomic<T> है।

एक सामान्य नियम के रूप में, सी हेडर C++ में इस्तेमाल किया जाना चाहिए .h विस्तार को दूर करने और नाम के लिए c prepending द्वारा: stdatomic.hcstdatomic हो जाता है। इसमें सी हेडर नामस्थान std में शामिल होंगे।

ध्यान दें कि stdatomic.h (और cstdatomic इसलिए) सी 11 और atomic सी ++ 11 है, जो संकलक समर्थन में अंतर को समझा सकता है।

+0

धन्यवाद। – baam

+2

@baam "सामान्य नियम रिवर्स": एक सी ++ हेडर जो '' जैसा दिखता है, शायद सी ++ सी हेडर के समतुल्य है'। : पी –

+3

'stdatomic.h' सी 11 से आता है, सी 99 नहीं। 2011 मानकों के लिए सी और सी ++ मानकों समितियों द्वारा संयुक्त रूप से परमाणु विकसित किए गए थे। –

15

दोनों मौजूदा उत्तर गलत हैं, और अधिकांश टिप्पणियां भी हैं।

<cstdatomic>किसी भी मानक में परिभाषित शीर्षलेख नहीं है।

इसे पुराने सी ++ 0x ड्राफ्ट में परिभाषित किया गया था लेकिन अंतिम सी ++ 11 मानक में नहीं है, केवल <atomic> है। इसलिए इसे जीसीसी 4.4 के प्रयोगात्मक सी ++ 0x समर्थन के हिस्से के रूप में शामिल किया गया था, लेकिन उसके बाद बाद में रिलीज़ के लिए नाम बदल दिया गया जब इसे सी ++ 0x ड्राफ्ट में बदल दिया गया था (जिसे 200 9 में N2992 द्वारा किया गया था)।

आपको <cstdatomic> का उपयोग नहीं करना चाहिए जबतक कि आप जीसीसी 4.4 के साथ फंस गए हों और सी ++ 11 परमाणुओं के अपूर्ण और बग्गी संस्करण का उपयोग करने में प्रसन्न न हों। (मैं इसे नदी के ऊपर जीसीसी 4.6 विज्ञप्ति में नहीं है, यह एक Ubuntu या Kubuntu या Linaro पैच होना चाहिए पता नहीं क्यों Kubuntu के जीसीसी 4.6 हैडर शामिल है।)

<atomic> मानक सी ++ 11 शीर्ष लेख है कि आप किसी भी उचित रूप से अनुरूप C++ 11 कार्यान्वयन के लिए भरोसा कर सकते हैं।

<stdatomic.h> C11 हैडर है, लेकिन सी ++ 11 पुस्तकालय C99 पुस्तकालय पर आधारित है, इसलिए <stdatomic.h> शामिल नहीं है और यह करने के लिए इसी एक <cstdatomic> प्रदान नहीं करता है।

+1

सहायक संदर्भ: https://gcc.gnu.org/gcc-4.5/changes.html - पुराना हेडर जीसीसी 4.5 के साथ भेजे गए libstdC++ में नए नाम पर ले जाया गया था – Novelocrat

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