2016-07-20 4 views
14

एक उदाहरण printk कॉल:फ़ंक्शन प्रिंटक() पैरामीटर को अलग करने के लिए अल्पविराम का उपयोग क्यों नहीं करता है?

printk(KERN_INFO "Log message.\n"); 

शायद इस सवाल का क्योंकि मैं सी में एक समारोह से पहले एक अल्पविराम के बिना कि अलग मापदंडों कभी नहीं देखा है, सामान्य रूप में सी के बारे में अधिक है।

यह कैसे काम करता है? इस जानकारी के साथ संकलक क्या करता है? चूंकि लॉग स्तर एक पूर्णांक है और संदेश एक चार सरणी के लिए एक सूचक है, इसे अलग से पास करना होगा।

+2

संकलक समर्थित स्ट्रिंग शाब्दिक संयोजन:

printk("\001" "6" "Log message.\n"); 

सी lexer जिसका अर्थ है कि ऊपर में बदल जाता है आसन्न स्ट्रिंग शाब्दिक टोकन कोनकैटेनेट्स किया गया। 'KERN_INFO' की परिभाषा को देखें। मैं कर्नेल नहीं करता, लेकिन मुझे लगता है कि यह एक स्ट्रिंग शाब्दिक '# परिभाषित' – WhozCraig

+2

@WhozCraig है: स्ट्रिंग शाब्दिक concatenation केवल संकलक-समर्थित नहीं है। यह भाषा द्वारा परिभाषित किया गया है, और 1 9 8 9 से रहा है। –

+6

ध्यान दें कि एकाधिक तर्क * * को अल्पविराम से अलग किया गया है: 'printfk (KERN_INFO" n =% d \ n ", n);'। प्रारूप स्ट्रिंग 'KERN_INFO "n =% d \ n" 'पहला तर्क है, और' n' दूसरा है। –

उत्तर

20

printk() फ़ंक्शन केवल एक const char* तर्क लेता है। "\001" "6" को KERN_INFO मैक्रो फैलता है, उपज:

printk("\0016Log message.\n"); 
+1

धन्यवाद। मैंने देखा कि हेडर में लॉग स्तर संख्याएं थीं और याद आई थी कि वे स्ट्रिंग अक्षर थे। मुझे थोड़ा रीफ्रेशर भी करना पड़ा कि कैसे सी एक स्ट्रिंग अक्षर को एक स्थान से अलग करता है। – elBradford

7

लॉग स्तर एक पूर्णांक नहीं है बल्कि एक स्ट्रिंग अक्षर है। एक-दूसरे के बगल में स्ट्रिंग अक्षर एक संकलन समय पर एक स्ट्रिंग अक्षर में सम्मिलित होते हैं।

5

क्योंकि यदि आप हेडर फाइलों को खोजते हैं तो आप देखेंगे उदा। KERN_INFO एक मैक्रो स्ट्रिंग शाब्दिक (वास्तव में एकाधिक स्ट्रिंग अक्षर, उदाहरण के लिए लिंक किए गए क्रॉस-रेफरेंस) के रूप में विस्तारित है, और प्रत्येक-दूसरे के बगल में दो स्ट्रिंग अक्षरों को संकलक द्वारा एक सिंगल स्ट्रिंग अक्षर में जोड़ा जाएगा।

तो कॉल

printk(KERN_INFO "Log message.\n"); 

कई तर्क के साथ एक समारोह कॉल नहीं है, यह एक एकल स्ट्रिंग शाब्दिक तर्क के साथ एक समारोह कॉल है।

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

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