// 可変個数引数マクロの作り方 (gccの場合)
#include <stdio.h>
// 引数の数が違う、同じ関数に置き換える
#define DEBUG_PRINT(...) printf(__VA_ARGS__)
#define DEBUG_PRINT2(fmt, ...) printf(fmt, __VA_ARGS__)
// 引数の数が違う、別の関数に置き換える
#define GET_MACRO(_1,_2,_3,NAME,...) NAME
#define SUM(...) GET_MACRO(__VA_ARGS__, sum3, sum2)(__VA_ARGS__)
int sum2(int a,int b) { return a+b; }
int sum3(int a,int b,int c) { return a+b+c; }
int main(void) {
DEBUG_PRINT("num=%d\n",2);
DEBUG_PRINT("num=%d,%d\n",3,4);
DEBUG_PRINT2("num=%d\n",2);
DEBUG_PRINT2("num=%d,%d\n",3,4);
printf("SUM(2,3)=%d\n", SUM
(2,3)); printf("SUM(2,3,4)=%d\n", SUM
(2,3,4));
return 0;
}
Ly8g5Y+v5aSJ5YCL5pWw5byV5pWw44Oe44Kv44Ot44Gu5L2c44KK5pa5IChnY2Pjga7loLTlkIgpCgojaW5jbHVkZSA8c3RkaW8uaD4KCi8vIOW8leaVsOOBruaVsOOBjOmBleOBhuOAgeWQjOOBmOmWouaVsOOBq+e9ruOBjeaPm+OBiOOCiwojZGVmaW5lIERFQlVHX1BSSU5UKC4uLikgIHByaW50ZihfX1ZBX0FSR1NfXykKI2RlZmluZSBERUJVR19QUklOVDIoZm10LCAuLi4pICBwcmludGYoZm10LCBfX1ZBX0FSR1NfXykKCi8vIOW8leaVsOOBruaVsOOBjOmBleOBhuOAgeWIpeOBrumWouaVsOOBq+e9ruOBjeaPm+OBiOOCiwojZGVmaW5lIEdFVF9NQUNSTyhfMSxfMixfMyxOQU1FLC4uLikgTkFNRQojZGVmaW5lIFNVTSguLi4pIEdFVF9NQUNSTyhfX1ZBX0FSR1NfXywgc3VtMywgc3VtMikoX19WQV9BUkdTX18pCgppbnQgc3VtMihpbnQgYSxpbnQgYikgeyByZXR1cm4gYStiOyB9CmludCBzdW0zKGludCBhLGludCBiLGludCBjKSB7IHJldHVybiBhK2IrYzsgfQoKaW50IG1haW4odm9pZCkgewoJREVCVUdfUFJJTlQoIm51bT0lZFxuIiwyKTsKCURFQlVHX1BSSU5UKCJudW09JWQsJWRcbiIsMyw0KTsKCglERUJVR19QUklOVDIoIm51bT0lZFxuIiwyKTsKCURFQlVHX1BSSU5UMigibnVtPSVkLCVkXG4iLDMsNCk7CiAgICAgICAgCglwcmludGYoIlNVTSgyLDMpPSVkXG4iLCBTVU0oMiwzKSk7CglwcmludGYoIlNVTSgyLDMsNCk9JWRcbiIsIFNVTSgyLDMsNCkpOwoKCXJldHVybiAwOwp9Cg==