C23 (C मानक संशोधन)

C23 उस चीज़ का अनौपचारिक नाम है जो संभवतः ISO/IEC 9899:2024 बन जाएगा, C (प्रोग्रामिंग भाषा) के लिए नेक्स्ट स्टैण्डर्ड, जो C17 (स्टैण्डर्ड ISO/IEC 9899:2018) का स्थान लेगा। इसे 2016 में अनौपचारिक रूप से C2x के रूप में प्रारम्भ किया गया था, और 2024 में प्रकाशित होने की उम्मीद है। C23 का सबसे लेटेस्ट सार्वजनिक रूप से उपलब्ध कार्यशील ड्राफ्ट 1 अप्रैल, 2023 को प्रकाशित किया गया था। C2x ड्राफ्ट के लिए पहली WG14 बैठक अक्टूबर 2019 में आयोजित की गई थी, 2020 में कोविड-19 महामारी के कारण वर्चुअल रिमोट बैठकें आयोजित की गईं, फिर 2023 तक विभिन्न टेलीकांफ्रेंस बैठकें होती रहीं।

फीचर
C23 के नवीनतम वर्किंग ड्राफ्ट में इंटीग्रेटेड परिवर्तन नीचे सूचीबद्ध हैं।

नये फंक्शन

 * सेंसिटिव डेटा को मिटाने के लिए   में   फ़ंक्शन जोड़ें, जहाँ अनुकूलन की केयर किए बिना मेमोरी स्टोर सदैव  किया जाना चाहिए।
 * स्ट्रिंग्स को कुशलतापूर्वक संयोजित करने के लिए  में  फ़ंक्शन जोड़ें - POSIX  और SVID C एक्सटेंशन के समान।
 * स्ट्रिंग की एक प्रति आवंटित करने के लिए  में   और  फ़ंक्शन जोड़ें - POSIX और SVID C एक्सटेंशन के समान।
 * पॉइंटर के बाइट संरेखण को निर्धारित करने के लिए  में   फ़ंक्शन जोड़ें।
 * कई पूर्णांक प्रकारों की जांच करने के लिए नए हेडर  में बिट उपयोगिता फ़ंक्शंस / मैक्रोज़ / प्रकार जोड़ें। लीगेसी कोड और तृतीय पक्ष लाइब्रेरीज़ के साथ टकराव को कम करने के लिए सभी   से प्रारंभ होते हैं।
 * निम्नलिखित में, पाँच फ़ंक्शन नामों के लिए  को  ,  ,  ,  ,  से बदलें, या टाइप-जेनेरिक मैक्रो के लिए रिक्त स्थान दें।
 * मान में 1 या 0 बिट्स की संख्या गिनने के लिए  और   जोड़े।
 * मूल्य में अग्रणी 1 या 0 बिट्स की गणना करने के लिए  और   जोड़।
 * मान में 1 या 0 बिट्स की गणना करने के लिए  और   जोड़े।
 * 1 या 0 मान के साथ पहला अग्रणी बिट खोजने के लिए   और   जोड़े ।
 * 1 या 0 मान वाले पहले अनुगामी बिट को खोजने के लिए  और   जोड़े।
 * यह निर्धारित करने के लिए  जोड़ें कि क्या मान 2 की सटीक शक्ति है (केवल 1 बिट होने पर ही सही लौटें)।।
 * 2 की सबसे बड़ी अभिन्न शक्ति निर्धारित करने के लिए  जोड़ें जो मान से अधिक न हो।
 * 2 की सबसे छोटी अभिन्न शक्ति निर्धारित करने के लिए  जोड़ें जो मान से कम न हो है।
 * किसी मान को दर्शाने के लिए बिट्स की संख्या निर्धारित करने के लिए  जोड़े।
 * समय संरचना को कैलेंडर समय मान में बदलने के लिए  में    - glibc और musl लाइब्रेरीज़ में फ़ंक्शन के समान।

एक्सिस्टिंग फंक्शन

 * फ़ंक्शन परिवार में  बाइनरी रूपांतरण विनिर्देशक जोड़ें,   के साथ गैर-शून्य मान जोड़ें,  कैसे काम करता है। वे कार्यान्वयन जो पहले %B को अपने स्वयं के एक्सटेंशन के रूप में उपयोग नहीं करते थे, उन्हें   के साथ गैर-शून्य मानों को लागू करने और जोड़ने के लिए प्रोत्साहित किया जाता है, जैसे कि   कैसे काम करता है।
 * फ़ंक्शन फ़ैमिली में  बाइनरी रूपांतरण विनिर्देशक जोड़ें।
 * और  फ़ंक्शन परिवारों में  और    बाइनरी रूपांतरण समर्थन जोड़ें।
 * फ़ंक्शन बनाएं,  ,  ,  ,  ,  ,  , और उनके व्यापक समकक्ष  ,  ,  ,  ,   एक स्थिर स्थिर वस्तु वापस आ गई है यदि कोई उन्हें पास नहीं किया गया था।

प्रीप्रोसेसर

 * ऐड और  प्रक्रमण करने से पहले के निर्देश मूलतः  और .समकक्ष हैं।  दोनों निर्देश C++23 मानक और जीएनयू कंपाइलर संग्रह 12 कंपाइलर में भी जोड़े गए थे।
 * बाइनरी संसाधन समावेशन के लिए निर्देश जोड़े और  प्रीप्रोसेसर निर्देशों द्वारा संसाधन की उपलब्धता की जाँच करने की अनुमति दे।
 * निदान के लिए  निर्देश जोड़े।
 * प्रीप्रोसेसर निर्देशों द्वारा हेडर की उपलब्धता की जांच करने की अनुमति देने के लिए जोड़े।
 * जोड़ें, जिससे प्रीप्रोसेसर निर्देशों द्वारा किसी विशेषता की उपलब्धता की जाँच की जा सके। (नई विशेषता सुविधा के लिए C++ संगतता समूह देखें)
 * विविध मैक्रोज़ के लिए  कार्यात्मक मैक्रो जो अपने तर्क तक विस्तारित होता है केवल तभी जब एक वैरिएडिक तर्क युक्त मैक्रो को पारित किया गया हो।

प्रकार

 * nullptr_t जोड़ें|nullptr_t, एक शून्य सूचक प्रकार। * जोड़ना और  बिट-सटीक पूर्णांकों के लिए प्रकार। जोड़ना  अधिकतम बिट चौड़ाई के लिए मैक्रो।  जोड़ना ,  ,   जाँचे गए पूर्णांक संचालन के लिए मैक्रोज़।
 * वेरिएबल-संशोधित प्रकार (लेकिन वेरिएबल-लंबाई सरणी नहीं जो स्टैक पर स्वचालित_वेरिएबल आवंटित होते हैं) एक अनिवार्य सुविधा बन जाते हैं।
 * उपयोग के लिए बेहतर समर्थन  सरणियों के साथ.
 * का मानकीकरण  ऑपरेटर।
 * का अर्थ कीवर्ड को प्रकार के अनुमान के कारण बदल दिया गया था, जबकि एक प्रकार के साथ उपयोग किए जाने पर स्टोरेज क्लास विनिर्देशक के पुराने अर्थ को भी बरकरार रखा गया था। C++ के विपरीत, C23 केवल ऑब्जेक्ट परिभाषाओं के लिए प्रकार अनुमान की अनुमति देता है (कोई अनुमान फ़ंक्शन रिटर्न प्रकार या फ़ंक्शन पैरामीटर प्रकार नहीं)।
 * एक ही टैग के साथ संगत प्रकार की पुनर्घोषणा की अनुमति देने के लिए संरचना, संघ और प्रगणित प्रकारों के लिए संगतता नियमों को बदल दिया गया था।

स्थिरांक

 * nullptr जोड़ें|nullptr के लिए स्थिरांक  प्रकार।
 * जोड़ना  और   के लिए पूर्णांक शाब्दिक प्रत्यय  और  प्रकार, जैसे कि  एक उपज देता है , और  एक उपज देता है   जिसमें तीन वैल्यू बिट और एक साइन बिट है।
 * जोड़ना  और   पूर्णांक शाब्दिक उपसर्ग, जैसे कि  (0xAA के बराबर)।
 * जोड़ना  शाब्दिक स्थिरांक के लिए अंक विभाजक, जैसे कि  (0xFEDCBA98 के बराबर),  (प्रकाश की गति के बराबर),  (2|1.414213562 के वर्गमूल के बराबर)।
 * किसी के अंतर्निहित प्रकार को निर्दिष्ट करने की क्षमता जोड़ें.
 * अनुमति देना में उन मानों को संग्रहीत करने के लिए कोई निश्चित अंतर्निहित प्रकार नहीं है जिन्हें प्रस्तुत नहीं किया जा सकता.

कीवर्ड

 * जोड़ना और  कीवर्ड.
 * जोड़ना, , , , थ्रेड-स्थानीय भंडारण|thread_local कीवर्ड. पहले से परिभाषित कीवर्ड वैकल्पिक वर्तनी बन जाते हैं: , , , ,.
 * जोड़ना कीवर्ड (प्रकार समूह देखें)
 * जोड़ना और  कीवर्ड (प्रकार समूह देखें)
 * जोड़ना कीवर्ड (स्थिरांक समूह देखें)
 * जोड़ना कीवर्ड (अन्य समूह देखें)
 * जोड़ना, , (वैकल्पिक) दशमलव फ़्लोटिंग पॉइंट के लिए कीवर्ड|दशमलव फ़्लोटिंग-पॉइंट अंकगणित (अन्य समूह देखें)

सिंटेक्स

 * लेबल (कंप्यूटर विज्ञान) घोषणा (कंप्यूटर प्रोग्रामिंग) से पहले और कथन (कंप्यूटर विज्ञान) #कंपाउंड कथन के अंत में दिखाई दे सकता है।
 * फ़ंक्शन परिभाषाओं में अनाम पैरामीटर।
 * शून्य आरंभीकरण के साथ  (CLAss के आरंभीकरण सहित)।
 * विविध कार्यों को अब इलिप्सिस और से पहले नामित तर्क की आवश्यकता नहीं है मैक्रो को अब दूसरे तर्क की आवश्यकता नहीं है और न ही यह पहले तर्क के मौजूद होने पर उसके बाद किसी तर्क का मूल्यांकन करता है।
 * C++11 स्टाइल C++11#Attributes सिंटैक्स जोड़ें दोहरे वर्गाकार कोष्ठकों का उपयोग करना.
 * एकल-तर्क जोड़ें  C++17 के साथ अनुकूलता के लिए।
 * प्रोटोटाइप में सूचीबद्ध बिना किसी तर्क के कार्य करता है  बिना किसी तर्क के समझा जाता है (K&R फ़ंक्शन घोषणाओं को हटाना देखें)

सी++ अनुकूलता

 * विभिन्न सिंटैक्स परिवर्तन C++ के साथ संगतता में सुधार करते हैं, जैसे घोषणाओं से पहले लेबल (कंप्यूटर विज्ञान), अनाम फ़ंक्शन तर्क, शून्य आरंभीकरण, नामित तर्क के बिना विविध कार्य, C++11 शैली विशेषताएँ,   (सिंटेक्स देखें)। कंपाउंड स्टेटमेंट के अंत में लेबल (कंप्यूटर विज्ञान) के लिए C++23 में एक समान परिवर्तन किया गया था।
 * C++-शैली विशेषताएँ जोड़ें (सिंटैक्स देखें)। विशेषताएँ जोड़ें, , , , और C++11 के साथ संगतता के लिए विशेषता, फिर बहिष्कृत करें , , हेडर   C11 (C मानक संशोधन) में पेश की गई सुविधाएँ। C++23 के साथ संगतता के लिए डुप्लिकेट विशेषताओं की अनुमति है। सभी मानक विशेषताएँ दोहरे अंडरस्कोर से भी घिरी हो सकती हैं (उदा  के बराबर है ).
 * जोड़ना  C++17 के साथ संगतता के लिए UTF-8 एन्कोडिंग का प्रतिनिधित्व करने के लिए वर्ण शाब्दिक के लिए उपसर्ग।
 * जोड़ना और  C++23 के साथ संगतता के लिए प्रीप्रोसेसिंग निर्देश। (प्रीप्रोसेसर समूह देखें)

अन्य विशेषताएं

 * ISO/IEC 60559:2020 के लिए समर्थन, फ्लोटिंग-पॉइंट अंकगणित के लिए IEEE 754 का वर्तमान संस्करण, विस्तारित बाइनरी फ़्लोटिंग-पॉइंट अंकगणित और (वैकल्पिक) दशमलव फ़्लोटिंग-पॉइंट अंकगणित के साथ।
 * e> वस्तुओं के लिए विनिर्देशक, लेकिन फ़ंक्शंस के लिए नहीं, constexpr (C++)|C++ के समकक्ष के विपरीत।
 * जोड़ना UTF-8 एन्कोडेड डेटा को संग्रहीत करने के लिए टाइप करें और u8 वर्ण स्थिरांक और स्ट्रिंग अक्षर के प्रकार को बदलें . इसके अलावा, कार्य   और   एक संकीर्ण मल्टीबाइट कैरेक्टर को क्रमशः UTF-8 एन्कोडिंग में और एक एकल कोड बिंदु को UTF-8 से एक संकीर्ण मल्टीबाइट कैरेक्टर प्रतिनिधित्व में परिवर्तित करने के लिए।
 * वह सब स्पष्ट करें स्ट्रिंग्स और लिटरल यूटीएफ-16 एन्कोडेड होंगे, और सभी  स्ट्रिंग्स और अक्षर UTF-32 एन्कोडेड होंगे, जब तक कि अन्यथा स्पष्ट रूप से निर्दिष्ट न किया गया हो।
 * भंडारण वर्ग विनिर्देशकों को मिश्रित शाब्दिक परिभाषा में प्रदर्शित होने की अनुमति दें।

अप्रचलित सुविधाएँ
कुछ पुरानी अप्रचलित सुविधाओं को C23 के कार्यशील मसौदे से या तो हटा दिया गया है या हटा दिया गया है:
 * डिग्राफ और ट्रिग्राफ हटाएं#सी।
 * C_(प्रोग्रामिंग_भाषा)#K&R_C|K&R फ़ंक्शन परिभाषाएं/घोषणाएं हटाएं (फ़ंक्शन तर्कों के बारे में कोई जानकारी नहीं)।
 * दो के पूरक के अलावा अन्य हस्ताक्षरित पूर्णांकों के लिए निरूपण हटाएँ। दो के पूरक हस्ताक्षरित पूर्णांक प्रतिनिधित्व की आवश्यकता होगी।
 * {{C-lang|*_HAS_SUBNORM}RM}} मैक्रोज़ में  अप्रचलित विशेषताएं हैं.

संकलक समर्थन
जीएनयू कंपाइलर संग्रह 9, बजना 9.0, और एलसीसी_(कंपाइलर)#पेलेस_सी 11.00 कंपाइलर इस मानक का समर्थन करने के लिए एक प्रयोगात्मक कंपाइलर ध्वज लागू करते हैं।

यह भी देखें

 * C++23, C++20, C++17, C++14, C++11, C++03, C++98, C++ प्रोग्रामिंग भाषा मानक के संस्करण
 * C और C++ की अनुकूलता

बाहरी संबंध

 * C Language Working Group WG14 Documents
 * N3096 - working draft of C23 standard - dated April 1, 2023