How do you add default arguments when you don't control the source?

Sometimes, a closed source API will only be providing:

func f(a: Int, b: Int, c: Int) { }

when everybody wants:

func f(a: Int = 0, b: Int = 0, c: Int = 0) { }

Is macros the solution to generate this?

func f() { f(a: 0, b: 0, c: 0) }
func f(a: Int) { f(a: a, b: 0, c: 0) }
func f(b: Int) { f(a: 0, b: b, c: 0) }
func f(c: Int) { f(a: 0, b: 0, c: c) }
func f(a: Int, b: Int) { f(a: a, b: b, c: 0) }
func f(a: Int, c: Int) { f(a: a, b: 0, c: c) }
func f(b: Int, c: Int) { f(a: 0, b: b, c: c) }

Just create a custom function which has all the default parameters and calls the existing method.

No, that has a different signature. The different signature is not acceptable. The solution must add missing overloads.

Well, you should have specified that requirement in your first post.

Even if you do give it the same name in-source, those are still completely new functions whose names are mangled differently because of the differing argument count. The name will even be different merely because YourModule.f() is distinct from TheirModule.f().