你可以用(C99,不GCC特異性)啓動:
#define MY_MACRO(type, name, ...) \
type name[] = {__VA_ARGS__};
的my_call
部分將更加困難;有在線的宏可以計算參數的數量,但是您需要像Boost.Preprocessor(它應該用C語言)將my_call
應用於數組的連續元素。你有多少元素最多?你可能想要類似的東西:
#define COUNT(...) COUNT2(__VA_ARGS__, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
#define COUNT2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, count, ...) count
#define PP_CAT(a, b) PP_CAT2(a, b)
#define PP_CAT2(a, b) a ## b
#define CALL_MY_FUNC(arr, ...) my_call(PP_CAT(ITER_, COUNT(__VA_ARGS__))(arr));
#define ITER_0(arr) /**/
#define ITER_1(arr) (arr)
#define ITER_2(arr) (arr), ITER_1((arr) + 1)
#define ITER_3(arr) (arr), ITER_2((arr) + 1)
#define ITER_4(arr) (arr), ITER_3((arr) + 1)
等等。
你的宏究竟做了什麼? – karlphillip 2011-02-09 18:28:50
你想要的是任意數量的參數,不可能完全像寫入的那樣,但我很困惑你爲什麼要傳遞指向每個數組元素的單個指針到函數調用。只要傳遞一個指向第一個元素的指針就可以。 – 2011-02-09 18:34:34