2009-01-09 9 views
5

सी में, अगर फू एक संरचना है तो बस "foo" के बजाय "struct foo" लिखने के बीच कोई अंतर है?"स्ट्रक्चर फू *" और "foo *" के बीच अंतर जहां foo एक संरचना है?

उदाहरण के लिए:

struct sockaddr_in sin; 
struct sockaddr *sa; 

// Are these two lines equivalent? 
sa = (struct sockaddr*)&sin; 
sa = (sockaddr*)&sin; 

धन्यवाद/एरिक

उत्तर

10

वास्तव में, मानक 'सी' में यह struct कीवर्ड का उल्लेख करने की आवश्यकता है। यह सी ++ में वैकल्पिक है।

typedef struct foo { ... } bar; 

bar बजाय struct foo उपयोग करने के लिए सक्षम होने के लिए:

यही कारण है कि कुछ लोग इस तरह structs को परिभाषित है। हालांकि, कुछ सी संकलक इस नियम को लागू नहीं करते हैं।

0

यदि आप इसे टाइप करते हैं तो आप केवल "foo" का उपयोग कर सकते हैं।

6

हां। सी में (सी ++ के विपरीत), structs उनके नामस्थान में हैं। तो अगर आप परिभाषित एक

struct sockaddr { ... } 

आप इसे के रूप में

sockaddr s; 
sockaddr *ps; 

उपयोग कर सकते हैं नहीं आदेश में है कि कानूनी बनाने के लिए, आप प्रकार के नाम के गैर struct नाम स्थान में आयात करने में typedef का उपयोग कर सकते हैं:

typedef struct sockaddr { ... } sockaddr; 
sockaddr s, *p; 
0

यह इस बात पर निर्भर करता है कि संरचना को कैसे परिभाषित किया गया है। यदि इसे टाइपपीफ का उपयोग करके परिभाषित किया गया है तो आपको स्टैक्ट कीवर्ड को सामने नहीं रखना होगा।

typedef struct 
{ 
// 
} aStruct; 

aStruct abc; 

लेकिन यदि यह टाइपिफ़ नहीं है तो आपको संरचना कीवर्ड की आवश्यकता है।

struct aStruct 
{ 
// 
} ; 

struct aStruct abc; 
संबंधित मुद्दे