星期一, 7月 04, 2011

GNU C 的 Variadic Macro 筆記

參考: 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__)

沒有留言: