Share via


巨集 (C/C++)

預處理器會在預處理器指示詞 以外的 所有行中展開宏,這些行具有 # 做為第一個非空白字元的行。 它會在部分指示詞中展開宏,這些指示詞不會在條件式編譯中略過。 條件式編譯指示詞 可讓您隱藏原始程式檔部分的編譯。 它們會測試常數運算式或識別碼,以判斷要傳遞至編譯器的文字區塊,以及在前置處理期間要從原始程式檔移除的文字區塊。

#define 指示詞通常用於讓有意義的識別項與常數、關鍵字和常用的陳述式或運算式產生關聯。 代表常數的識別碼有時稱為 符號常數 資訊清單常數 。 表示語句或運算式的 識別碼稱為 宏。 這份前置處理器文件中只會使用「巨集」這個詞彙。

當程式來源文字或特定其他預處理器命令的引數中辨識宏名稱時,它會被視為該宏的呼叫。 巨集名稱會以巨集主體的複本取代。 如果巨集接受引數,巨集名稱後面的實際引數就會取代巨集主體中的正式參數。 以主體已處理的複本取代宏呼叫的程式稱為 宏呼叫的擴充

實際上,巨集分成兩種類型。 類似 物件的宏不會接受任何引數。 可以定義類似 函式的宏來接受引數,讓它們看起來就像函式呼叫一樣。 因為宏不會產生實際的函式呼叫,所以您有時可以藉由以宏取代函式呼叫,讓程式執行得更快。 (在 C++ 中,內嵌函式通常是慣用的方法。不過,如果您未定義並使用宏,宏可能會建立問題。 您可能需要在具有引數的巨集定義中使用括號,以保持運算式中的適當優先順序。 此外,巨集也可能無法正確處理具有副作用的運算式。 如需詳細資訊,請參閱 getrandom #define 指示詞 中的 範例。

定義宏之後,您就無法將它重新定義為不同的值,而不需要先移除原始定義。 不過,您可以用完全相同的定義重新定義巨集。 因此,相同的定義可能會在程式中出現多次。

指示 #undef 詞會移除宏的定義。 移除定義之後,您可以將宏重新定義為不同的值。 #define 指示詞 #undef 指示詞 分別討論 #define#undef 指示詞。

如需詳細資訊,請參閱:

另請參閱

C/C++ 預處理器參考