參考: GNU C 4.5.x Manual, Chapter 6.19, Macros with a Variable Number of Arguments.
以下為 ISO C99 Standard Macro 裡的可變量參數(variable argument)範例:
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
前面的 '...' 是可變量參數, 後面的 __VA_ARGS__ 會替換掉 '...' 裡面的東西, 包含前一個逗點.
gcc 支援了 variadic macro, 可以使用不同的語法來表示可變量參數, 你可以幫可變量參數取名字如:
#define debug(format, args...) fprintf (stderr, format, args)
這方法跟 ISO C99 的範例是相同的, 但更好閱讀.
ISO C99 的 MACRO 在碰到 debug ("A message") 省略參數的用法時, 也會連逗點一起帶進來而產生錯誤.
要解決這個問題, 可以用 CPP 的方式在 __VA_ARGS__ 前面加上 '##':
#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
沒有留言:
張貼留言