मैं निचले स्तर की गैर-ऑब्जेक्ट उन्मुख प्रोग्रामिंग भाषाओं पर एक विशेषज्ञ नहीं हूं, और मैं काम पर एक परियोजना के लिए कुछ सी कोड लिखने के बीच में हूं। मैं काम करने के लिए कुछ सभ्य अमूर्त डेटा प्रकार बनाने की कोशिश कर रहा हूं, और गूगलिंग ने मुझे महसूस किया कि लोग संरचना-आधारित एडीटी का दो तरीकों से उपयोग करते हैं। कुछ लोगों को एक struct के रूप में एक डेटा के प्रकार को परिभाषित:मुझे स्ट्रिप के लिए टाइप बनाम पॉइंटर कब टाइप करना चाहिए?
typedef struct adt {
//content here
} adt;
और हेडर फाइल में दुनिया के लिए उसे बेनकाब।
दूसरों struct करने के लिए एक सूचक के रूप में एक डेटा के प्रकार को परिभाषित:
// In .c file:
typedef struct adt_s {
//content here
} adt_s, *adt;
// In .h file:
typedef struct adt_s *adt;
मैं समझता हूँ कि इस दृष्टिकोण आप बाहर की दुनिया क्या इस struct अंदर की किसी भी जानकारी दिए बिना एक struct typedef करने की अनुमति देता है, तो प्रोग्रामर केवल इस डेटा प्रकार पर काम करने के लिए एक ही हेडर फ़ाइल में दिए गए कार्यों का उपयोग कर सकते हैं।
क्या दूसरे पर लेने का कोई अन्य कारण है? क्या एडीटी को structs के रूप में परिभाषित करने के लिए एक सामान्य "अंगूठे का नियम" होता है और जब हम उन्हें structs के पॉइंटर्स के रूप में परिभाषित करते हैं?
पठनीयता प्रयोजनों के लिए शायद यह बेहतर है लिखने के लिए 'typedef struct S3_s * के बजाय' typedef struct S3_s * S3' S3', नहीं? – Eregrith
@Eregrith: यदि आप औपचारिक भाषा अर्थ विज्ञान, से जाना 'typedef struct S3_s * S3' का कहना है कि declarator' * S3' टाइप किया है 'struct S3_s' और भंडारण वर्ग' typedef', तो पहचानकर्ता के साथ तारांकन डाल वास्तव में मुहावरेदार है ; हालांकि, प्रकार के साथ तारांकन डालने के साथ लोगों को घोषणाओं के बारे में कितने (? सबसे) लगता है धुन में अधिक है; जहाँ तक मैं concernded रहा हूँ, दोनों संस्करणों जब तक आप लगातार कर रहे हैं के रूप में ठीक हैं ... – Christoph
मैं सिर्फ चयनित कि ओ पी के साथ स्थिरता के लिए रिक्ति, के बाद से मैं लाभ किसी भी तरह से देख सकते हैं। – Useless