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