首頁 > 後端開發 > C++ > 如何處理 C/C 中宏參數中的逗號?

如何處理 C/C 中宏參數中的逗號?

Linda Hamilton
發布: 2024-12-17 06:29:25
原創
909 人瀏覽過

How Can I Handle Commas in Macro Arguments in C/C  ?

C/C 中宏內的逗號

使用接受多個參數的巨集時可能會遇到困難,特別是當參數包含逗號時。考慮以下範例:

#define FOO(type, name) type name
登入後複製

雖然將巨集與下列參數一起使用很簡單:

FOO(int, int_var);
登入後複製

處理涉及逗號的複雜參數時會出現問題,例如:

FOO(std::map<int, int>, map_var); // Error: 3 arguments passed to macro 'FOO', which takes only 2
登入後複製

為了解決這個問題,可以引入一種自訂類型定義:

typedef std::map<int, int> map_int_int_t;
FOO(map_int_int_t, map_var); // Compiles successfully
登入後複製

但是,這種方法缺乏人體工學,並且需要額外的類型轉換。

另一個解決方案是定義一個名為 COMMA 的巨集:

#define COMMA ,
登入後複製

這樣定義時,可以使用 COMMA宏將複雜的參數傳遞給宏,例如:

FOO(std::map<int COMMA int>, map_var);
登入後複製

這個方法也允許參數字串化,如以下程式碼所示:

#include <cstdio>
#include <map>
#include <typeinfo>

#define STRV(...) #__VA_ARGS__
#define COMMA ,
#define FOO(type, bar) bar(STRV(type) \
    " has typeid name \"%s\"", typeid(type).name())

int main()
{
    FOO(std::map<int COMMA int>, std::printf);
}
登入後複製

此程式碼將輸出:“ std::map has typeid name "St3mapIiiSt4lessIiESaISt4pairIKiiEEE」。

以上是如何處理 C/C 中宏參數中的逗號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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