दिलचस्प पोस्ट
Android में ViewPager से खंड पृष्ठ को निकालें सक्रिय निर्देशिका के खिलाफ उपयोगकर्ता नाम और पासवर्ड मान्य करें? PHP में file_get_contents का उपयोग कैसे करें? कोणीय UI राउटर: माता-पिता निराधार ऑब्जेक्ट के आधार पर बाल राज्य टेम्पलेट तय करें Jslint त्रुटि को ठीक करने के लिए कैसे 'एक पाश के भीतर कार्य न करें।' शेल स्क्रिप्ट से जांचना यदि कोई निर्देशिका फ़ाइलें शामिल है स्टार्टअप फ़ॉर्म को बंद करने पर मैं कैसे ऐप को समाप्त करने से रोक सकता हूं? कॉलम में मूल्यों के द्वारा एक डेटा फ्रेम को फ़िल्टर करना GetLocationOnScreen / getLocationInWindow से गलत निर्देशांक AngularJs के साथ jQuery के UI Datepicker वॉटरमार्क टेक्स्टबॉक्स में WinForms फ़्लोटिंग प्वाइंट नंबर पर बिटवाइस ऑपरेशन कैसे करें I ReactJS में इस। स्टेटीज और this.setstate के अंतर क्या है? Wpf में छवि को कन्वर्ट बाइट सरणी क्या डेटाबेस बुराई चलाता है?

सी को "स्ट्रक्चर" कीवर्ड की आवश्यकता क्यों नहीं है और सी ++ नहीं?

मैं हमेशा इस बारे में थोड़ा उलझन में रहा हूं कि यहां क्या हो रहा है:

#include <stdio.h> int main() { timeval tv; tv.tv_sec = 1; for (;;) { select(0, 0, 0, 0, &tv); printf("%s\n", "Hello World!"); } } 

माफ करना, अगर वह संकलन नहीं करता है, तो इसे एक त्वरित उदाहरण के रूप में लिखा है।

इस तरह की कोड जीसीसी के तहत संकलित नहीं करेगी जब तक कि मैं स्ट्रेटिक टाइमवेवल के उपयोग से पहले कीवर्ड स्ट्रिंग को जोड़ूँ। दूसरी तरफ जी ++ इसे संभालती है जैसा कि है

क्या सी और सी ++ हैंडल संरचनाओं के बीच अंतर है या क्या यह कम्पाइलर में बस एक अंतर है? (मैं बहुत सी ++ उन्मुख हूं, और इस तरह की पंक्तियों में सी में स्ट्रेट के उपयोग से मुझे कुछ हद तक चुस्त हो गया है)।

वेब के समाधान से एकत्रित समाधान "सी को "स्ट्रक्चर" कीवर्ड की आवश्यकता क्यों नहीं है और सी ++ नहीं?"

सिंथेटिक रूप से दोनों के व्यवहार लगभग एक ही व्यवहार करते हैं। केवल सी ++ ने एक अतिरिक्त नियम जोड़ लिया है जो struct (और class ) कीवर्ड को छोड़ने की अनुमति देता है यदि कोई अस्पष्टता नहीं है

अगर अस्पष्टता है, तो C ++ को कुछ स्थानों पर struct कीवर्ड की आवश्यकता होती है। एक कुख्यात उदाहरण POSIX सिस्टम पर stat जहां एक struct stat और एक फ़ंक्शन stat

मैं कहूंगा कि यह दोनों भाषाओं का एक डिजाइन निर्णय है

सी में स्ट्रेक्ट्स सिर्फ संरचित रिकॉर्ड हैं और उसके बाद अलग-अलग उपयोग किया जाता है।

सी ++ में सीटीओर्स और ऑपरेटर ओवरलोड हैं और इसलिए वे प्रकार के रूप में कार्य करते हैं।

 struct foo x; // create a structure of pattern foo typedef foo foo_type; // "define" a type foo_type x; // create an instance of type foo_type 

सी ++:

 foo x; // create an instance of type foo 

साइड-नोट के रूप में, अभी भी C ++ में struct foo को अनुमति है struct foo को पार्स करने के लिए आसान है, फिर typedef'd foo नाम-लुकअप सरल है।

यह भाषाओं में बस एक अंतर है सी ++ अपने स्ट्रेट सिंटैक्स में अधिक स्वीकार्य है।

C ++ (या, जब यह सिर्फ एक विचार था, "कक्षाओं के साथ सी") के मूल विचार पर विचार करें, उस ओ ओ-ओरिएंटेड भाषा के साथ सी के साथ संगत था, जहां सबसे वैध सी प्रोग्राम भी वैध C ++ प्रोग्राम थे

सी struct

  1. विरासत (यद्यपि आप एक संरचना के पहले सदस्य के साथ सी में करीब आ सकते हैं, जिसे आप '' वारिस '' करना चाहते हैं)
  2. जानकारी छुपा ( public , private आदि के माध्यम से)
  3. सदस्य विधियां (जो मूल रूप से मैक्रोज़ से स्ट्रैट के बाहर सी कोड में बदल गए थे जो कि this पैरामीटर के साथ – कई लागूकरण अभी भी अभ्यास में समान हैं)।

इस बिंदु पर दो समस्याएं थीं सबसे पहले यह है कि डिफ़ॉल्ट पहुंच को सार्वजनिक होना था, क्योंकि सी में कोई सूचना छुपा नहीं है और इसलिए सी ++ के परिप्रेक्ष्य में सब कुछ सार्वजनिक है। अच्छा ओ के लिए निजी को निजी करना चाहिए यह class को जोड़कर हल किया गया था जो कि struct समान बहुत ही समान है, डिफ़ॉल्ट को छोड़कर यह public बजाय private

दूसरा यह है कि इस ओ ओ परिप्रेक्ष्य में विशेष रूप से कोड में लगातार एनोटेट किए जाने की बजाय, समय-समय पर या किसी अन्य वर्ग / timeval को " timeval " के रूप में int या char के रूप में होना चाहिए। नियम को आराम से यह हल किया गया था कि उस प्रकार के एक चर को घोषित करने में एक प्रकार के नाम से पहले struct (या class ) को अवश्य रखना चाहिए इसलिए समय- struct timeval tv को timeval tv बन सकता है।

इसके बाद सी-सिंटैक्स ओओ भाषाओं को प्रभावित किया, जैसे कि जावा और सी # की तरह, उदाहरण के लिए, उदाहरण के लिए, केवल छोटे फॉर्म ( timeval tv ) सी # में वैध सिंटैक्स होगा।

यह सिर्फ सी कैसे दिखता है इसलिए, निम्न पैटर्न C:

 typedef struct YourStructure { int x; // more fields } YourStructure; 

फिर आप इसे उसी तरह से संदर्भित कर सकते हैं जैसे सी ++

जिस तरह से सी यह पहले आया था, ज़ाहिर है। सी और क्लास में कक्षाएं लगभग समान हैं, और यह प्रत्येक वर्ग चर के साथ class आवश्यकता के लिए बहुत असुविधाजनक होता, इसलिए यह दोनों के लिए सरल था।