首頁 > 後端開發 > C++ > 如何確定 C 可變參數巨集中的參數數量?

如何確定 C 可變參數巨集中的參數數量?

Linda Hamilton
發布: 2024-12-25 14:48:14
原創
228 人瀏覽過

How Can I Determine the Number of Arguments in a C   Variadic Macro?

使用 C 預處理器的VA_ARGS

C 中的變數巨集允許使用任意數量的參數。然而,確定傳遞給可變參數巨集的參數數量可能具有挑戰性。本文探討了使用 VA_ARGS 預處理器巨集的簡單且有效率的解決方案。

理解VA_ARGS

VA_ARGS 是內建的預處理器宏,可擴展為傳遞可變參數宏的實際參數。但是,它不提供有關參數數量的任何資訊。

使用整數數組大小計算參數

要確定可變參數巨集中的參數數量,我們可以利用 C 預處理器中數組大小的行為。以下巨集 NUMARGS() 使用此技術:

#define NUMARGS(...) (sizeof((int[]){__VA_ARGS__})/sizeof(int))
登入後複製

此巨集擴展為包含傳遞給它的所有參數的陣列的大小,除以整數的大小。結果值是參數的數量。

用法範例

考慮下列巨集SUM(),它計算其參數的總和:

#define SUM(...) (sum(NUMARGS(__VA_ARGS__), __VA_ARGS__))
登入後複製

要使用SUM(),我們將使用可變數量的參數來呼叫它,例如so:

SUM(1);
SUM(1, 2);
SUM(1, 2, 3);
登入後複製

NUMARGS()巨集會計算參數的數量,並將其與參數一起傳遞給 sum() 函數。

處理空參數清單

預設情況下,如果使用空參數清單呼叫 NUMARGS() 巨集將會失敗。為了解決這個問題,可以使用 GNU C 擴充來定義巨集的變體:

#define NUMARGS(...) (sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1)
登入後複製

此變體允許空參數列表並正確計算所有情況下的參數數量。

結論

VA_ARGS 預處理器巨集可以用來有效計算可變參數巨集中的參數數量。透過將此技術與整數數組大小操作相結合,我們可以開發有用的巨集來處理 C 中可變數量的參數。

以上是如何確定 C 可變參數巨集中的參數數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板