巨集 (C/C++)
預處理器會在預處理器指示詞以外的所有行中展開宏,這些行具有 # 做為第一個非空格符的行。 它會在部分指示詞中展開宏,這些指示詞不會在條件式編譯中略過。 條件式編譯指示詞 可讓您隱藏原始程序檔部分的編譯。 它們會測試常數表示式或標識符,以判斷要傳遞至編譯程式的文字區塊,以及在前置處理期間要從原始程式檔移除的文字區塊。
#define
指示詞通常用於讓有意義的識別項與常數、關鍵字和常用的陳述式或運算式產生關聯。 代表常數的標識碼有時稱為 符號常數 或 指令清單常數。 表示語句或表達式的標識碼稱為宏。 這份前置處理器文件中只會使用「巨集」這個詞彙。
當程式來源文字或特定其他預處理器命令的自變數中辨識巨集名稱時,它會被視為該巨集的呼叫。 巨集名稱會以巨集主體的複本取代。 如果巨集接受引數,巨集名稱後面的實際引數就會取代巨集主體中的正式參數。 以本文已處理複本取代巨集呼叫的程序稱為擴充巨集呼叫。
實際上,巨集分成兩種類型。 類似 物件的宏不會接受任何自變數。 可以定義類似 函式的宏來接受自變數,讓它們看起來就像函數調用一樣。 因為宏不會產生實際的函數調用,所以您有時可以藉由以宏取代函數調用,讓程式執行得更快。 (C++,內嵌函式通常是慣用的方法。不過,如果您未定義並使用宏,宏可能會建立問題。 您可能需要在具有引數的巨集定義中使用括號,以保持運算式中的適當優先順序。 此外,巨集也可能無法正確處理具有副作用的運算式。 如需詳細資訊,請參閱 getrandom
#define 指示詞中的範例。
定義巨集之後,您就無法將它重新定義為不同的值,而不需要先移除原始定義。 不過,您可以用完全相同的定義重新定義巨集。 因此,相同的定義可能會在程序中出現多次。
指示 #undef
詞會移除巨集的定義。 拿掉定義之後,您可以將巨集重新定義為不同的值。 #define 指示詞 和 #undef 指示詞 分別討論 #define
和 #undef
指示詞。
如需詳細資訊,請參閱: