[討論] 如何將#define用於不定參數函數

看板C_and_CPP作者 (懂得放手..才是王道)時間9年前 (2016/02/28 22:16), 9年前編輯推噓5(502)
留言7則, 5人參與, 最新討論串1/1
各位好, 一般來說, #define可以用來定義function Ex: void Func(unsigned char a, unsigned char b); #define Func1(A) Func(1, A) 但不定參數函數有辦法用#define來定義嗎? Ex: void Func(unsigned char a, unsigned char b, ...); #define Func(A, ...) Func(1, A, ...) 我有試著嚐試用上面的方法來定義, 但似乎行不通.. 這需要有什麼特別的方法來處理嗎? 謝謝賜教.. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.171.215.105 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1456669008.A.AE2.html

02/28 22:24, , 1F
__VA_ARGS__
02/28 22:24, 1F

02/28 22:25, , 2F
#define Func(A, ...) Func(1, A, __VA_ARGS__)
02/28 22:25, 2F
感謝樓上兩位的賜教.. 又學到一招了.. ※ 編輯: MaxHaru (118.171.215.105), 02/29/2016 13:30:41

03/02 13:41, , 3F
加上## Func(1, A, ##__VA_ARGS__)
03/02 13:41, 3F

03/02 14:11, , 4F
樓上這個加 ## 的作用是在 __VA_ARGS__ 為空時吃掉逗號
03/02 14:11, 4F

03/02 14:12, , 5F
不過這是 gnu-extension, 只在 gnu 系編譯器有用
03/02 14:12, 5F

03/05 20:26, , 6F
#define Func(...) Func(1, __VA_ARGS__)
03/05 20:26, 6F

03/05 20:28, , 7F
如果不要 gnu-extension 可以這麼寫
03/05 20:28, 7F
文章代碼(AID): #1Mqm5GhY (C_and_CPP)