#define funcdecl(output, name, ...) output (*name)(VA_ARGS) void DoA(int a, char b) { a += 1; b = 'c'; } int main(void) { void (*A)(int); A(); // Error funcdecl(void, Do, int a, char b) = DoA; Do(0, 'c'); Do(); // Not error return 0; }
I was testing some macro in Godbolt and for some reason, if I call A()
then the compiler said "too few arguments for call" but if I just call Do()
with no arguments then it's fine. Why is that?
Wow, I'm so stupid. It should be __VA_ARGS__
not VA_ARGS
. But, weirdly, the compiler doesn't say anything.