यह उन असंगतियों की अपूर्ण सूची है जो मानक में वर्णित C और glibc या musl के साथ gcc या clang का उपयोग करने वालों के लिए व्यवहार में मौजूद C के बीच हैं।
डिफ़ॉल्ट रूप से, gcc और clang asm कीवर्ड को एक एक्सटेंशन के रूप में पहचानते हैं। मानक C में, asm एक मान्य गैर-आरक्षित पहचानकर्ता है, इसलिए मानक-अनुरूप कोड डिफ़ॉल्ट सेटिंग्स के साथ संकलित नहीं हो सकता। कंपाइलर डिफ़ॉल्ट रूप से अनुरूप नहीं होते, और मानक asm को C++ की तरह आरक्षित शब्द बना सकता था, हालांकि उसने ऐसा नहीं किया है।
मानक के अनुसार FLT_ROUNDS को <fenv.h> में fesetround के माध्यम से किए गए रनटाइम राउंडिंग मोड परिवर्तनों को दर्शाना चाहिए। हालांकि, gcc रनटाइम राउंडिंग मोड की परवाह किए बिना FLT_ROUNDS को हमेशा 1 (निकटतम तक राउंड) के रूप में परिभाषित करता है। Clang __builtin_flt_rounds() नामक एक बिल्टिन प्रदान करता है, लेकिन gcc ऐसा नहीं करता।
C मानक अंकगणितीय व्यवहार को नियंत्रित करने के लिए फ़्लोटिंग-पॉइंट pragma निर्दिष्ट करता है, जो C99 और C23 में जोड़े गए थे। C99 के 27 वर्ष से अधिक बाद भी, gcc इन सभी को no-op मानकर अनदेखा करता है, और clang केवल C99 के pragma का समर्थन करता है। कुछ कार्यक्षमता कमांड-लाइन फ़्लैग से दोहराई जा सकती है, लेकिन ये व्यक्तिगत फ़ंक्शन या ब्लॉक के बजाय पूरी ट्रांसलेशन यूनिट पर लागू होते हैं।
मानक के अनुसार फ़ंक्शन रिटर्न टाइप के क्वालिफ़ायर हटा दिए जाने चाहिए। Clang, हालांकि, उन्हें महत्वपूर्ण मानता है, इसलिए int f(); और const int f(); दोनों घोषित करने पर टाइप-संघर्ष त्रुटि आती है, जबकि ये दोनों घोषणाएं समान होनी चाहिए।
स्रोत: Hacker News · HeadlinesBriefing द्वारा सारांशित