एक उदाहरण printk
कॉल:फ़ंक्शन प्रिंटक() पैरामीटर को अलग करने के लिए अल्पविराम का उपयोग क्यों नहीं करता है?
printk(KERN_INFO "Log message.\n");
शायद इस सवाल का क्योंकि मैं सी में एक समारोह से पहले एक अल्पविराम के बिना कि अलग मापदंडों कभी नहीं देखा है, सामान्य रूप में सी के बारे में अधिक है।
यह कैसे काम करता है? इस जानकारी के साथ संकलक क्या करता है? चूंकि लॉग स्तर एक पूर्णांक है और संदेश एक चार सरणी के लिए एक सूचक है, इसे अलग से पास करना होगा।
संकलक समर्थित स्ट्रिंग शाब्दिक संयोजन:
सी lexer जिसका अर्थ है कि ऊपर में बदल जाता है आसन्न स्ट्रिंग शाब्दिक टोकन कोनकैटेनेट्स किया गया। 'KERN_INFO' की परिभाषा को देखें। मैं कर्नेल नहीं करता, लेकिन मुझे लगता है कि यह एक स्ट्रिंग शाब्दिक '# परिभाषित' – WhozCraig
@WhozCraig है: स्ट्रिंग शाब्दिक concatenation केवल संकलक-समर्थित नहीं है। यह भाषा द्वारा परिभाषित किया गया है, और 1 9 8 9 से रहा है। –
ध्यान दें कि एकाधिक तर्क * * को अल्पविराम से अलग किया गया है: 'printfk (KERN_INFO" n =% d \ n ", n);'। प्रारूप स्ट्रिंग 'KERN_INFO "n =% d \ n" 'पहला तर्क है, और' n' दूसरा है। –