2013-08-04 11 views
5

मैं एक फ़ंक्शन के लिए फ़ंक्शन प्रोटोटाइप लिखना चाहता हूं, जिसका तर्क संरचना के लिए सूचक है।सी फंक्शन प्रोटोटाइप स्ट्रक्चर तर्क के साथ

int mult(struct Numbers *n) 

हालांकि, struct नंबर है, जो के रूप में

struct Numbers { 
    int a; 
    int b; 
    int c; 
}; 

परिभाषित किया गया है अभी तक परिभाषित नहीं है। मुझे मल्टी के लिए उपयुक्त प्रोटोटाइप कैसे लिखना चाहिए?

+1

आपको आगे की घोषणा की आवश्यकता होगी। –

+0

आगे की घोषणाएं केवल पॉइंटर्स के साथ काम करती हैं, इसलिए यदि आप कभी भी मूल्य के आधार पर संरचना में प्रवेश करना चाहते हैं, तो आपको इसका उपयोग करने से पहले संरचना को पूरी तरह से परिभाषित करने की आवश्यकता होगी। ऐसा इसलिए है क्योंकि सिस्टम जानता है कि पॉइंटर कितना बड़ा है, लेकिन यह नहीं जानता कि एक अपरिभाषित संरचना कितनी बड़ी है। – xaxxon

उत्तर

5

बस struct Numbers एक अधूरी प्रकार के रूप में घोषित अपने समारोह घोषणा से पहले:

struct Numbers; 

int mult(struct Numbers *n); 
4

आप संरचना की घोषणा आगे संकलक कि उस नाम का कोई struct परिभाषित किया जाएगा बताने के लिए करना होगा:

struct Numbers; 

int mult(struct Numbers *n) { 

} 

struct Numbers { 
    int a; 
    int b; 
    int c; 
}; 

ध्यान दें कि संकलक संरचना की स्मृति में आकार निर्धारित करने में सक्षम नहीं है, इसलिए आप इसे मूल्य से पारित नहीं कर सकते हैं।

+0

क्या आप कभी भी सी में मूल्य से एक संरचना पास कर सकते हैं? – Dave

+1

@ डेव बिल्कुल। यह आमतौर पर एक अच्छा विचार नहीं है, और पैरामीटर के रूप में इसका उपयोग करने से पहले आपको संरचना को पूरी तरह से परिभाषित करना होगा, लेकिन अगर आप वास्तव में चाहते हैं तो आपको रोक नहीं है। – xaxxon

+0

हू, मैं कभी नहीं जानता था। मैंने सोचा था कि मूल्य से गुजरना सी ++ था, सी नहीं। लेकिन हाँ मैं मानता हूं कि 99% समय यह वास्तव में एक बुरा विचार होगा। – Dave

संबंधित मुद्दे