मैं सख्त सी 0 9 अनुरूपता परीक्षण करते समय उपयोग करने के लिए जीसीसी झंडे के संयोजन का पता लगाने की कोशिश कर रहा हूं। पिछली पोस्ट के अनुसार: GCC options for strictest C code?, मुझे केवल एक --std = c90 की आवश्यकता होनी चाहिए। (कोई चेतावनी/त्रुटियों का उत्पादन)जीसीसी विकल्प?
$ cat t.c
#include <stdint.h> /* added in C99 */
int main()
{
uint64_t t;
return 0;
}
$ gcc -std=c90 -ansi -pedantic t.c
ऊपर अच्छी तरह से काम करता है:
हालांकि यहाँ मैं क्या करने की कोशिश की है। झंडे के अलग सेट 1990 अनुरूपता
- जीसीसी झंडे सख्त आईएसओ/आईईसी 9899 के लिए:
किसी का पता है? (C99 के लिए आता है
मेरे शब्दों के लिए क्षमा करें, हाँ मैं वास्तव में एक सख्ती अनुरूप C90 संकलक नकल करने के लिए, चाहते हैं कोड किसी भी सुविधा बाद में जोड़ा उपयोग करने के लिए कोशिश करता है तो दूसरे शब्दों में इसे विफल करना चाहिए:
संपादित करें मन)। pthread
में शामिल है जो GNU/GCC calls C90 mode में संकलित करते समय चेतावनी को उत्सर्जित करने के लिए है (जैसे stdint.h शीर्षलेख को सी 99 के बिना चेतावनी देना चाहिए)। -पैंटिक ने मुझे long long
के उपयोग के बारे में अच्छी तरह से चेतावनी दी है, मुझे नहीं लगता कि मुझे uint64_t
के बारे में चेतावनी क्यों नहीं देनी चाहिए।
1990 में, एएनएसआई सी मानक (स्वरूपण परिवर्तन के साथ) द्वारा अपनाया गया था: के रूप में से उद्धृत 1990:
मैं आईएसओ/आईईसी की शब्दावली 9899 का इस्तेमाल किया मानकीकरण के लिए अंतर्राष्ट्रीय संगठन (आईएसओ) आईएसओ/आईईसी 98 99: 1 99 0, जिसे कभी-कभी सी 0 9 कहा जाता है। इसलिए, "C89" और "C90" शब्द समान प्रोग्रामिंग भाषा का संदर्भ लेते हैं।
EDIT2:
जीसीसी प्रलेखन वास्तव में काफी स्पष्ट हैं:
कुछ विशेषताएं है कि C99 मानक का हिस्सा C90 मोड में एक्सटेंशन के रूप में स्वीकार कर रहे हैं, और कुछ विशेषताएं है कि का हिस्सा हैं C11 मानक C90 और C99 मोड में एक्सटेंशन के रूप में स्वीकार किए जाते हैं।
तो मेरे सवाल में rephrased है:
- वहाँ एक संकलक + मानक एक लिनक्स प्रणाली है जो सख्ती से C90 के अनुरूप है पर शीर्ष लेख शामिल है?
कृपया ध्यान दें कि मानक आईएसओ/आईईसी 98 99 में सी 9 0 निर्दिष्ट है। आप आईएसओ/आईईसी 9945-1 पूछते हैं जो पॉज़िक्स मानक है। – Lundin
मैंने एक कंपाइलर के बारे में नहीं सुना है जो आपको यह जांचने की अनुमति देता है। 3. कंपाइलर लाइब्रेरी के साथ जीसीसी और क्लैंग जैसे कुछ कंपाइलर्स अनुरोधित मानक का समर्थन करने के लिए उचित लंबाई तक जाते हैं, खासकर भाषा स्तर पर, लेकिन वे अनुपालन चेकर्स होने के लिए नहीं हैं। लाइब्रेरी फीचर्स के लिए यह और भी मूक है, क्योंकि सी गैर-मानक लाइब्रेरी/हेडर उपलब्ध होने की अनुमति देता है, कुछ भी c89 कंपाइलर में stdint.h की आपूर्ति से कार्यान्वयन को रोकता है - उदा। जीसीसी और क्लैंग लाइब्रेरी/हेडर फाइलों की आपूर्ति नहीं करता है - यह 3. पार्टी (अक्सर लिनक्स पर ग्लिब) पर छोड़ दिया जाता है – nos
आप कहते हैं * एक चेतावनी उत्सर्जित करने के लिए * चाहिए, आपका सबूत कहां है? मानक के माध्यम से मिलकर मैं कहीं भी नहीं देखता जहां यह कहता है कि एक कंपाइलर को निदान करने के लिए एक कंपाइलर की आवश्यकता होती है। –