2011-12-25 34 views
32

सी 1 एक्स में नवीनतम परिवर्तन आईएसओ/आईईसी 98 99: 2011 उर्फ ​​सी 11 बन गया है।सी 11

क्या किसी को पता है कि April 2011 draft n1570 से मानक में क्या परिवर्तन हैं (यदि कोई है)?

ईटीए: वहाँ लंदन (मार्च 2011) से समिति मिनट (जो n1570 में शामिल किया जाना चाहिए) here हैं, और वाशिंगटन, डीसी (अक्टूबर 2011) here से; मुझे लगता है कि डीसी मिनट में स्वीकृत परिवर्तनों की एक सूची चीजों को कवर करना चाहिए।

+7

comp.std.c पर लैरी जोन्स द्वारा एक टिप्पणी के अनुसार एन1569 (जो परिवर्तन चिह्नकों के बिना एन 1570 है) में कोई महत्वपूर्ण बदलाव नहीं थे। एकमात्र चीज जो अनसुलझा बनी हुई है वह '__STDC_VERSION__' के लिए मान है, लेकिन मुझे लगता है कि सबसे स्वाभाविक रूप से यह' 201112L' होगा। –

+0

उस जानकारी के लिए धन्यवाद, @JensGustedt। बीटीडब्ल्यू, मैं एन 1570 से जुड़ा हुआ हूं क्योंकि वह लिंक सार्वजनिक रूप से सुलभ है; n1569 भी डाउनलोड किया जा सकता है, लेकिन सीधे नहीं। –

+0

@JohanBezem, वे भी भूल गए? तो हम पहली दोष रिपोर्ट जारी कर सकते हैं :) सौभाग्य से यह केवल पूर्णांक का उपयोग करता है, इसलिए '201100L' के खिलाफ परीक्षण करके कुछ भी सुरक्षित होना चाहिए। –

उत्तर

11

मैं सिर्फ आज सीखा एक (कुछ) N1570 और अंतिम C11 मानक (आईएसओ/आईईसी 9899: 2011 (ई)) के बीच महत्वपूर्ण परिवर्तन किया गया है।

N1570 में, 6.3.2p3 का कहना है:

जब यह sizeof ऑपरेटर के संकार्य है के अलावा, _Alignof ऑपरेटर, या एकल & ऑपरेटर, या एक स्ट्रिंग शाब्दिक करने के लिए इस्तेमाल एक प्रारंभ है सरणी, एक अभिव्यक्ति टाइप कि सरणी वस्तु के प्रारंभिक तत्व को बताते हैं और एक lvalue नहीं है "प्रकार सूचक" के साथ प्रकार एक अभिव्यक्ति में बदल जाती है "प्रकार की सरणी" है।

_Alignof के शामिल किए जाने के लिए एक एकल-अभिव्यक्ति की वाक्य रचना के बाद से एक त्रुटि हुई, परमिट

_Alignof (type-name) 

नहीं बल्कि

_Alignof unary-expression 

जारी किया C11 मानक इस त्रुटि को सही और reverts सी 99 शब्द के लिए:

जब यह sizeof ऑपरेटर के संकार्य, या एकल & ऑपरेटर है, या एक स्ट्रिंग शाब्दिक एक सरणी, एक अभिव्यक्ति टाइप "प्रकार की सरणी" है कि प्रारंभ करने में प्रयोग किया जाता है सिवाय एक अभिव्यक्ति में बदल जाती है टाइप के साथ "पॉइंटर टाइप" जो कि एरे ऑब्जेक्ट के प्रारंभिक तत्व को इंगित करता है और यह एक अंतराल नहीं है।

अधिक जानकारी: हाल ही में एक पोस्टिंग N1570 और जारी की मानक, लैरी जोन्स, आईएसओ सी समिति के एक सदस्य के बीच मतभेदों के बारे में comp.std.c करने के लिए, ने लिखा:

एक

रहे हैं उनमें से संख्या, लेकिन अधिकांश मामूली संपादकीय tweaks हैं, बॉयलरप्लेट पाठ में परिवर्तन, और शक्तियों को खुश रखने के लिए चारों ओर चीजें shuffling। सबसे बड़ा परिवर्तन से _Alignof को हटा रहा था, जहां इसे जोड़ा नहीं जाना चाहिए था (गलत धारणा के आधार पर कि यह किसी प्रकार या अभिव्यक्ति जैसा आकार करता है जब यह वास्तव में केवल एक प्रकार लेता है): 6.3। 2.1 पी 2, पी 3, पी 4, एफएन। 65; और 6.7.1 एफएन। 121.

संदेश- ID: <[email protected]>

यहाँ the thread रूप groups.google.com पर देखा है।

5

टिप्पणी में Jens Gustedt द्वारा उत्तर दिया:

comp.std.c पर लैरी जोन्स द्वारा एक टिप्पणी के अनुसार N1569 (जो परिवर्तन मार्कर के बिना N1570 है) की ओर से कोई महत्वपूर्ण परिवर्तन थे। अनसुलझा बनी एकमात्र चीज __STDC_VERSION__ के लिए मान है, लेकिन मुझे लगता है कि सबसे स्वाभाविक रूप से यह 201112L होगा।

+3

आधिकारिक 2011 मानक छोड़ा '__STDC_VERSION__' और वैकल्पिक' __STDC_LIB_EXT1__' गलत तरीके से परिभाषित किया गया। पहले तकनीकी कोर्रिजेंडम ने '201112 एल' दोनों को परिभाषित किया। –

2

आईएसओ ने सी प्रोग्रामिंग भाषा के लिए आईएसओ/आईईसी 9899: 2011 के नए सी 11 (सी 1 एक्स) मानक के रूप में अनुमोदित और प्रकाशित किया है। पिछले मानक (C99) से बड़े बदलाव, के रूप में C11 Wikipedia article में लिखा, निम्नलिखित हैं:

  • संरेखण:

    मानक जैसे C99 भाषा और पुस्तकालय विनिर्देशों के लिए कई बदलाव भी शामिल है, विनिर्देश (_Alignas विनिर्देशक, _Alignof ऑपरेटर, aligned_alloc समारोह, <stdalign.h> हेडर फाइल)

  • _Noreturn समारोह विनिर्देशक
  • _Generic कीवर्ड का उपयोग कर टाइप-जेनेरिक एक्सप्रेशन। उदाहरण के लिए, निम्न मैक्रो cbrt(x)x के प्रकार पर निर्भर cbrtl(x), cbrt(x) या cbrtf(x) करने के लिए अनुवाद:

    #define cbrt(X) _Generic((X), long double: cbrtl, \ 
                default: cbrt, \ 
                float: cbrtf)(X) 
    
  • बहु सूत्रण का समर्थन (_Thread_local भंडारण-वर्ग विनिर्देशक है, धागा निर्माण/प्रबंधन कार्यों, म्युटेक्स, हालत चर सहित <threads.h> हैडर और थ्रेड-विशिष्ट स्टोरेज कार्यक्षमता, साथ ही _Atomic टाइप क्वालीफायर और <stdatomic.h> अनइंटरप्टिबल ऑब्जेक्ट एक्सेस के लिए)।
  • बेहतर यूनिकोड समर्थन सी यूनिकोड तकनीकी रिपोर्ट आईएसओ/आईईसी टी.आर. के आधार पर 19,769: 2004 (char16_t और भंडारण के लिए char32_t प्रकार UTF-16/UTF-32 <uchar.h> में रूपांतरण कार्यों और इसी u और U स्ट्रिंग शाब्दिक सहित एन्कोडेड डेटा, उपसर्ग, साथ ही u8 यूटीएफ -8 एन्कोडेड अक्षर के लिए उपसर्ग)।
  • gets फ़ंक्शन को हटाने, पिछले सी भाषा मानक संशोधन, आईएसओ/आईईसी 98 99: 1 999/कोर 3: 2007 (ई) में एक नए सुरक्षित विकल्प, gets_s के पक्ष में हटा दिया गया।
  • बाउंड-जांच इंटरफेस (अनुलग्नक के)।
  • विश्लेषण सुविधाएं (अनुलग्नक एल)।
  • उपरोक्त फ्लोटिंग पॉइंट संख्याओं के बारे में फ़्लोटिंग पॉइंट प्रकारों की विशेषताओं से पूछताछ के लिए अधिक मैक्रोज़ और प्रकार के दशमलव अंकों की संख्या स्टोर करने में सक्षम है।
  • बेनामी संरचना और यूनियन, यूनियनों और संरचनाओं को घोंसले के दौरान उपयोगी, उदाहरण के लिए उपयोगी struct T { int tag; union { float x; int n; }; }; में।
  • स्टेटिक दावे, जो #if और #error, जब प्रकार अनुवादक द्वारा समझ रहे हैं की तुलना में एक बाद में चरण में अनुवाद के दौरान मूल्यांकन किया जाता है।
  • एक विशेष बनाने और खुले मोड ("…x" प्रत्यय) fopen के लिए। यह POSIX में O_CREAT|O_EXCL जैसा व्यवहार करता है, जिसका उपयोग आमतौर पर लॉक फ़ाइलों के लिए किया जाता है।
  • एक कार्यक्रम, कम से कम न्यूनतम deinitializition करने के लिए करता है, तो exit साथ समापन विफल रहता इरादा समाप्त करने के लिए एक तीसरा रास्ता के रूप में quick_exit कार्य करते हैं। जटिल मूल्यों के निर्माण के लिए
  • मैक्रो (आंशिक रूप से क्योंकि real + imaginary*I उम्मीद मूल्य उपज नहीं हो सकता है अगर imaginary अनंत है या NaN)।

आईएसओ साइट से आप full published standard खरीद सकते हैं। यहां आईएसओ साइट से लिया गया एक सार है:

आईएसओ/आईईसी 98 99: 2011 फॉर्म निर्दिष्ट करता है और सी प्रोग्रामिंग भाषा में लिखे गए कार्यक्रमों की व्याख्या स्थापित करता है। यह

  • सी प्रोग्राम का प्रतिनिधित्व निर्दिष्ट करता है;
  • सी भाषा के वाक्यविन्यास और बाधाएं;
  • सी कार्यक्रमों की व्याख्या के लिए अर्थपूर्ण नियम;
  • सी प्रोग्राम द्वारा संसाधित किए जाने वाले इनपुट डेटा का प्रतिनिधित्व;
  • सी प्रोग्राम द्वारा उत्पादित आउटपुट डेटा का प्रतिनिधित्व;
  • प्रतिबंध और सी के अनुरूप क्रियान्वयन द्वारा लगाए गए सीमा

आईएसओ/आईईसी 9899: 2011

  • व्यवस्था है जिसके द्वारा सी प्रोग्राम एक डेटा- द्वारा उपयोग के लिए बदल रहे हैं निर्दिष्ट नहीं करता प्रसंस्करण प्रणाली;
  • वह तंत्र जिसके द्वारा सी प्रोग्राम को डेटा प्रोसेसिंग सिस्टम द्वारा उपयोग के लिए बुलाया जाता है;
  • वह तंत्र जिसके द्वारा इनपुट डेटा को सी प्रोग्राम द्वारा उपयोग के लिए परिवर्तित किया जाता है;
  • वह तंत्र जिसके द्वारा आउटपुट डेटा को सी प्रोग्राम द्वारा उत्पादित किए जाने के बाद परिवर्तित किया जाता है;
  • आकार या एक कार्यक्रम और उसके डेटा है कि किसी भी विशिष्ट डेटा-प्रोसेसिंग सिस्टम या एक विशेष प्रोसेसर की क्षमता की क्षमता से अधिक होगा की जटिलता;
  • एक डेटा-प्रोसेसिंग सिस्टम है कि एक अनुरूप कार्यान्वयन समर्थन करने में सक्षम है के सभी कम से कम आवश्यकताओं। आईएसओ/आईईसी 98 99: 2011 को विभिन्न प्रकार के डेटा प्रोसेसिंग सिस्टमों के बीच सी कार्यक्रमों की पोर्टेबिलिटी को बढ़ावा देने के लिए डिज़ाइन किया गया है। यह कार्यान्वयनकर्ताओं और प्रोग्रामर द्वारा उपयोग के लिए है।
+0

यह पूछे गए प्रश्न का उत्तर देने का भी प्रयास नहीं करता है, जिसमें सी 11 और सी 99 के बीच मतभेदों से कोई लेना देना नहीं था। –