आज, क्लैंग अधिकांश places में जीसीसी को बदल रहा है। यानी, अधिकांश * NIX- जैसे ऑपरेटिंग सिस्टम और लिनक्स वितरण। कुछ उदाहरण फ्रीबीएसडी, मिनिक्स और मैक (थोड़ा स्पष्ट) क्लैंग का पर्दाफाश करते हैं जो क्लैंग को डिफ़ॉल्ट कंपाइलर के रूप में स्विच करते हैं। मेरे कुछ दोस्तों ने भी, जब मैंने उन्हें दिखाया।
यह आईएमएचओ, ऐसा लगता है कि कुछ लोगों को शायद पुराने संस्करणों में समस्याएं थीं। लेकिन क्लैंग संस्करण 3.0 के साथ, मुझे इनमें से कोई भी समस्या नहीं है। जैसा कि मैंने पहले देखा था, मैं वास्तव में अपनी सभी नई परियोजनाओं में इसका उपयोग कर रहा हूं। लगभग मेरा डिफ़ॉल्ट कंपाइलर, कभी-कभी मैं make C=gcc
करता हूं यह देखने के लिए कि क्लैंग त्रुटि/चेतावनी में कितना अंतर है। और कभी भी झगड़ा जीत। बेहतर स्पष्टीकरण के साथ और अनुकूलन के लिए एक महान प्रयास करें। इसमें कोड एक्सटेंशन में सर्वोत्तम प्रदर्शन के लिए कंपाइलर के उपयोग एक्सटेंशन (कुछ जीसीसी इनरहिड) के लिए सुझाव शामिल हैं।
मैंने एक मामूली फ़ंक्शन लिखा था जो एक त्रुटि संदेश मुद्रित करता था। लेकिन मानक आउटपुट पर त्रुटि संदेश मुद्रित करने के बाद मैं कार्यक्रम से बाहर निकलना चाहता हूं।इसलिए, मैं एक साधारण संशोधन करता हूं, फ़ंक्शन में अंतिम विवरण के रूप में exit(1)
डालता हूं। निम्नलिखित के रूप में:
void error(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
fprintf(stderr, "error: ");
vfprintf(stderr, fmt, ap);
va_end(ap);
exit(1);
}
और इसलिए बजना शो
चेतावनी: समारोह 'त्रुटि' विशेषता 'noreturn' के साथ [-Wmissing-noreturn] `
घोषित किया जा सकता (जीसीसी इसे -Wall -Wextra -Wunreachable-code -O3
झंडे के साथ भी नहीं उत्पादित करता है)
मैं कहता हूं "यह अच्छा लगता है। लेकिन 'nonreturn' विशेषता क्या है? मैं ' डी इस बारे में कभी नहीं सुनते या पढ़ते हैं। मैं Google पर कूदता हूं और clang could be declared with attribute 'noreturn'
के लिए खोज करता हूं (ओह, हाँ, मैं सिर्फ clang nonreturn attribute
लिखा था, लेकिन इसे भूल सकता था) और मुझे this
लिंक मिला जो इस विशेषता के बारे में अच्छी जानकारी के साथ और मुझे प्राप्त होने वाले परफॉर्मेंस के संभावित लाभ के साथ मिला।
तो मैं इस विशेषता को अपने फ़ंक्शन प्रोटोटाइप में जोड़ने के लिए चलाता हूं (बेशक, यदि यह जीसीसी या क्लैंग कंपाइलर है; मैक्रोज़ ट्रिक-डिटेक्शन करेगा)। ओह हाँ, मेरे लिए, परफॉर्मेंस का कोई छोटा सा लाभ (बेशक, कोड को पढ़ने योग्य नहीं किए बिना) यह एक जीत है।
और कुछ साल पहले यहां समाप्त नहीं होता है, मैं एक समारोह में return
बना देता हूं जहां अविश्वसनीय रूप से डिफॉल्ट हैंडलिंग परिभाषित एक स्विच है (जैसे error()
फ़ंक्शन में)। लेकिन फिर भी, जीसीसी क्लास रिटर्न-वैल्यू के बिना फ़ंक्शन के बारे में (मुझे खेद है, मुझे बिल्कुल त्रुटि/चेतावनी संदेश याद नहीं है) यह कैसे संभव है? स्विच के बाद कोई और कथन नहीं है, यदि कोई मामला नहीं है, तो डिफ़ॉल्ट मान निष्पादित किया जाता है और यदि कोई हो, तो नीचे दिए गए बयानों पर वास्तव में कोई फर्क नहीं पड़ता। लेकिन झगड़ा मेरे जैसा अलग सोचता है, और इस घोषणा के बारे में चेतावनी देता है, जिससे मुझे बेहतर कोड बनाने में मदद मिलती है।
और इस तरह की बहुत छोटी चीज़ के लिए, मैं झुकाव से प्यार कर रहा हूं। (नोट: मुझे मेरी बुरी अंग्रेजी के लिए खेद है। अंग्रेजी मेरी मूल भाषा स्पीकर नहीं है, लेकिन इसके बावजूद मैं यहां मुझे व्यक्त करने की कोशिश कर रहा हूं)
आप XCode4 के लिए बेहतर इंतजार कर रहे हैं और फिर आप क्लैंग उपयोग देखेंगे आसमान छूने लगी। – ismail
एक नोट: सीएलएंग उत्पादन सी के लिए परिपक्व है, हालांकि सी ++ समर्थन अभी भी एक सतत प्रगति है, सी ++ 03 सामान्य रूप से अच्छा है, लेकिन सी ++ 0x wrt VC++ और gcc के पीछे है। हालांकि इसे सक्रिय रूप से विकसित किया जा रहा है। –
मैं जीसीसी में सी प्रोग्राम करना चाहता था, क्योंकि, यह * है * संकलक है, मुझे लगता है कि मुझे बॉक्स के बाहर थोड़ा सा देखना है, मुझे वास्तव में कंपाइलर शिकायतों की अभिव्यक्ति पसंद है, इस कंपाइलर को पेश करने के लिए +1। –