2012-03-07 12 views
32

यह अच्छी तरह से ज्ञात है कि माइक्रोसॉफ्ट का विजुअल स्टूडियो कंपाइलर सी 99 का समर्थन नहीं करता है, और ऐसा लगता है कि उनके पास no plans से support it है।एमएस विजुअल स्टूडियो कंपाइलर में कौन सी सी 99 विशेषताएं उपलब्ध हैं?

हालांकि, संकलक कुछ चेरी शामिल नहीं है उठाया ऐसे variadic मैक्रो और long long के रूप में सुविधाओं - this answer में उद्धरण देखें:

हम कुछ C99 सुविधाओं के लिए कई अनुरोध कहाँ प्राप्त हो गया है, हम करने के लिए कोशिश की है उन्हें लागू करें (या अनुरूप)। कुछ उदाहरण वैरैडिक मैक्रोज़ हैं, long long, __pragma, __FUNCTION__, और __restrict। यदि अन्य सी 99 विशेषताएं हैं जो आपको अपने काम में उपयोगी लगती हैं, तो हमें बताएं! हम अपने सी उपयोगकर्ताओं से ज्यादा सुनना नहीं है, इसलिए बोलने और बनाने के अपने आप

सुना

- अर्जुन Bijanki, आईएसओ सी मानक समिति http://blogs.msdn.com/b/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

साथ ही पर माइक्रोसॉफ्ट के प्रतिनिधि, दृश्य स्टूडियो के नए संस्करण लगते हैं some of the headers required by C99 के साथ जहाज के लिए।

विशिष्ट विशेषताओं के बारे में बहुत सारे प्रश्न हैं - लेकिन मुझे क्या पता नहीं है: वर्तमान एमएसवीसी कंपाइलर द्वारा समर्थित/प्रदान की गई सी 99 सुविधाओं की सूची कहां मिल सकती है?

मैं एक सूची like this one for gcc की तलाश में हूं।

+0

कोई नहीं है। आप जिन सभी सुविधाओं का जिक्र कर रहे हैं वे सी ++ विशेषताएं हैं। –

+0

@ जेसे: मैंने यह स्पष्ट करने के लिए प्रश्न अपडेट किया है कि दृश्य स्टूडियो कंपाइलर में जानबूझकर समर्थित कुछ सी 99 विशेषताएं हैं। –

+8

यदि आप सी 99 का उपयोग करना चाहते हैं, तो क्यों न केवल एक कंपाइलर का उपयोग करें जो इसका समर्थन करता है? –

उत्तर

32

सौभाग्य से, इस मुद्दे पर माइक्रोसॉफ्ट का रुख बदल गया है। MSVC++ संस्करण 12,0

  • _Bool प्रकार के लिए (विजुअल स्टूडियो 2013 के भाग) added support
  • कंपाउंड अक्षर।
  • नामित प्रारंभकर्ता।
  • कोड के साथ घोषणाओं को मिलाकर।
  • __func__ पूर्वनिर्धारित पहचानकर्ता।

आप 1800 से अधिक या उसके बराबर मानों के लिए _MSC_VER macro की जांच कर सकते हैं यह देखने के लिए कि इन सुविधाओं का समर्थन किया गया है या नहीं।

Standard library support को भी अद्यतन किया गया है और एमएसवीसी 14.0 (विजुअल स्टूडियो 2015) में mostly complete है।

हालात पहले के संस्करणों को पहले से ही समर्थित (मैं कम से कम MSVC 7.1/विजुअल स्टूडियो 2003 के बाद से लगता है) कि:

  • // शैली टिप्पणी नहीं।
  • long long प्रकार।
  • फ्लेक्सिबल सरणी सदस्य (माइक्रोसॉफ्ट ने उन्हें "अनसुलझा सरणी" कहा)।
  • वैराडिक मैक्रोज़ (कम से कम आंशिक रूप से)।

चीज़ें है कि अभी भी याद कर रहे हैं:

  • चर लंबाई सरणियों (सी 11 में वैकल्पिक)।
  • inline कीवर्ड के लिए समर्थन (आप __inline का उपयोग कर सकते हैं, लेकिन अर्थशास्त्र थोड़ा अलग हो सकता है)।
  • restrict कीवर्ड के लिए समर्थन (आप __restrict का उपयोग करने में सक्षम हो सकते हैं)।
  • tgmath.h से टाइप-जेनेरिक गणित फ़ंक्शन।
  • _Complex प्रकार (सी 11 में वैकल्पिक)।
+0

धन्यवाद! मैं अक्सर ढेर ओवरफ्लो की जांच नहीं करता, इसलिए मैंने इसे अभी तक नहीं देखा। स्वीकार किए जाते हैं! –

9

मेरा मानना ​​है कि एमएसवीसी में समर्थित सी 99 (सी 9 0 में नहीं है) की एकमात्र गैर लाइब्रेरी भाषा सुविधा // टिप्पणियां है। सी मोड में संकलन करते समय, केवल सी 99 सुविधाओं को प्राप्त करने के कारण सी 99 लाइब्रेरी फीचर्स के कारण माइक्रोसॉफ्ट ने लाया है क्योंकि उन सुविधाओं को सी ++ मानक/ड्राफ्ट मानक/टीआर में लाया गया था जो एमएस कंपाइलर समर्थन कर रहा था। उदाहरण के लिए, आपको वीएस 2010 में stdint.h मिला क्योंकि यह सी ++ टीआर 1 ड्राफ्ट में था।

माइक्रोसॉफ्ट ने यह स्पष्ट कर दिया है कि उन्हें एमएसवीसी में सी 99 का समर्थन करने के लिए संसाधनों को आवंटित करने के लिए बाजार से कोई मजबूत धक्का नहीं दिखता है, इसलिए यह लगभग निश्चित है कि एमएसवीसी के सी कंपाइलर मोड में आप सी 99 के केवल एक हिस्से को देखेंगे सी ++ के कारण लाया गया।

चीजें हैं जो मैं निराशा की है कि है कि एक लंबे समय के लिए सी की ++ हिस्सा रहा है गैर पुस्तकालय C99 भाषा सुविधाओं सी मोड में उपलब्ध नहीं हो रहा है। निजी तौर पर, मुझे सी कोड संकलित करते समय घोषणाओं के साथ कथन मिश्रण करने की क्षमता केवल C99 की सहायता के लिए बहुत उपयोगी लगेगा।

लेकिन ऐसा लगता है कि एमएसवीसी के साथ सी में आप जो भाषा विशेषताएं देखते हैं वह आज आप यहां से प्राप्त करेंगे।

+0

धन्यवाद, +1। क्या आपका मतलब है कि '//' टिप्पणियां एकमात्र गैर-लाइब्रेरी सी 99 सुविधा ** विजुअल स्टूडियो ** में समर्थित हैं? क्या आपको पता है कि लाइब्रेरी हेडर जैसे 'stdint.h' सी मोड में काम करते हैं? –

+0

@ टिमोथी जोन्स AFAICT 'stdint.h' सी मोड में मेरे लिए काम करता है। – ldav1s

+0

"विजुअल स्टूडियो में समर्थित" - हाँ। मैं इसे स्पष्ट करने के लिए प्रश्न अपडेट करूंगा। और कुछ बार मैंने सी मोड में एमएसवीसी द्वारा प्रदत्त सी 99 लाइब्रेरी हेडर का उपयोग किया है, उन्होंने ठीक काम किया है। –

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