2011-07-20 16 views
8

यह प्रश्न तब दिखाई दिया जब मैंने हाल ही में अपने RAID डिवाइस के लिए एक पुराना ड्राइवर खोला। एक लिनक्स सिस्टम के लिए ड्राइवर को संकलित करने में सक्षम होने के लिए, मैंने आउटपुट पर मिली सभी त्रुटियों की जांच करना शुरू कर दिया।सी स्ट्रक्चर सिंटैक्स प्रश्न

struct file_operations t3_fops = { 
     owner:     THIS_MODULE, 
     ioctl:     ft_ioctl, 
     fasync:     ft_fasync, 
     open:     ft_open, 
     release:    ft_release 
}; 

तो दोस्तों, क्या आप मेरी मदद कर सकता है समझने के लिए क्या करता है ":" और मैं ड्राइवर स्रोतों में इस्तेमाल वाक्य रचना के इस प्रकार में आए मतलब है? क्या यह सी वाक्यविन्यास बिल्कुल है? मुझे पता है कि थोड़ा सा क्षेत्र परिभाषा है, लेकिन यह मेरे लिए अलग दिखता है।

उत्तर

6

संरचना सदस्यों को शुरू करने के लिए यह वाक्यविन्यास designated initializer कहा जाता है। : पुराना जीसीसी-विशिष्ट वाक्यविन्यास है। यह GCC manual में प्रलेखित है।

+0

मुझे विश्वास है कि यह सही जवाब है :-) फिर भी मेरे पास एक सवाल है: क्यों असाइन करने का कोई तरीका नहीं है ** डिफ़ॉल्ट मूल्य ** सी में एक संरचना के लिए? यदि हम संरचना की परिभाषा में वाक्यविन्यास ':' का उपयोग कर सकते हैं, तो यह बहुत सुविधाजनक होगा। – Stan

6

यह सी 99 संरचना प्रारंभिक वाक्यविन्यास है। owner, ioctl, आदि, संरचना में फ़ील्ड के नाम हैं, और THIS_MODULE, ft_ioctl, आदि मान हैं। यह प्रभावी रूप से, निम्नलिखित कर रहा है संकलन समय पर छोड़कर:

struct file_operations t3_fops; 
t3_fops.owner = THIS_MODULE; 
t3_fops.ioctl = ft_ioctl; 
... 

नई वाक्य रचना, अच्छा है, क्योंकि यह प्रारंभ काम struct क्षेत्रों के आदेश की परवाह किए बिना बनाता है।

+5

मानक में ** 6.7.8 प्रारंभिक **, मैं ':' वाक्यविन्यास नहीं देख सकता, इसलिए मुझे लगता है कि यह जीसीसी का विस्तार है। या मुझे इस पर सामग्री याद आती है? क्या आप कृपया बता सकते हैं कि मानक स्ट्रक्चर प्रारंभिक वाक्यविन्यास ':' का उल्लेख कहां है? धन्यवाद! – Stan

+0

क्षमा करें, मुझे गलत वाक्यविन्यास याद आया। वास्तव में कोलन एक जीसीसी विस्तार है, '[मालिक] THIS_MODULE' मानक वाक्यविन्यास है। (मुझे लगता है। मेरे पास अभी मानक की मेरी प्रति तक पहुंच नहीं है।) –

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