मैक्रो विस्तार, Yantao झी द्वारा उत्तर दिया वास्तव में मेरी आँखों को खोलता है!
मैंने यह भी पाया कि नीचे दिया गया ट्यूटोरियल कुछ ठोस उदाहरणों के साथ आता है, जो चर गुंजाइश अवधारणा को समझने में सहायक है।
15 मिनट में जानें सेमीकिट से उद्धृत :
CMake में, आप फ़ंक्शन को परिभाषित करने के लिए function
/ endfunction
कमांड्स की एक जोड़ी का उपयोग कर सकते हैं । यहाँ एक है जो अपने तर्क के संख्यात्मक मूल्य को दोगुना करता है, फिर परिणाम प्रिंट करता है:
function(doubleIt VALUE)
math(EXPR RESULT "${VALUE} * 2")
message("${RESULT}")
endfunction()
doubleIt("4") # Prints: 8
कार्य अपने स्वयं के दायरे में चलते हैं। फ़ंक्शन में परिभाषित कोई भी चर कॉलर के दायरे को प्रदूषित नहीं करता है। यदि आप कोई मान वापस करना चाहते हैं, तो आप अपने फ़ंक्शन के लिए एक चर का नाम पारित कर सकते हैं, फिर set
विशेष तर्क के साथ कमांड को कॉल कर सकते हैं PARENT_SCOPE
:
function(doubleIt VARNAME VALUE)
math(EXPR RESULT "${VALUE} * 2")
set(${VARNAME} "${RESULT}" PARENT_SCOPE) # Set the named variable in caller's scope
endfunction()
doubleIt(RESULT "4") # Tell the function to set the variable named RESULT
message("${RESULT}") # Prints: 8
इसी तरह, एक जोड़ी macro
/ endmacro
आदेश एक मैक्रो को परिभाषित करता है। फ़ंक्शन के विपरीत, मैक्रोज़ उनके कॉलर के समान दायरे में चलते हैं। इसलिए, मैक्रो के अंदर परिभाषित सभी चर कॉलर के दायरे में सेट किए गए हैं। हम पिछले फ़ंक्शन को निम्नलिखित के साथ बदल सकते हैं:
macro(doubleIt VARNAME VALUE)
math(EXPR ${VARNAME} "${VALUE} * 2") # Set the named variable in caller's scope
endmacro()
doubleIt(RESULT "4") # Tell the macro to set the variable named RESULT
message("${RESULT}") # Prints: 8
दोनों कार्य और मैक्रोज़ एक मनमानी संख्या को स्वीकार करते हैं। तर्क एक विशेष चर नाम के माध्यम से, एक सूची के रूप में कार्य के संपर्क में हैं ARGN
।
यहां एक ऐसा फ़ंक्शन है जो प्रत्येक तर्क को दोगुना करता है, जो प्रत्येक को एक अलग लाइन पर प्रिंट करता है:
function(doubleEach)
foreach(ARG ${ARGN}) # Iterate over each argument
math(EXPR N "${ARG} * 2") # Double ARG's numeric value; store result in N
message("${N}") # Print N
endforeach()
endfunction()
doubleEach(5 6 7 8) # Prints 10, 12, 14, 16 on separate lines
function
औरmacro
: का शब्दार्थreturn()
: जब एक में उपयोग किया जाता हैmacro
, तो आप मैक्रो से वापस नहीं आएंगे लेकिन कॉलिंग फ़ंक्शन से।