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

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

सुविधाएँ
C23 के नवीनतम कामकाजी मसौदे में एकीकृत परिवर्तन नीचे सूचीबद्ध हैं।

नये कार्य

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

मौजूदा कार्य

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

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

 * जोड़ना और  प्रक्रमण करने से पहले के निर्देश मूलतः समकक्ष हैं  और . दोनों निर्देश 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