I am reading an ebook on x86 assembly, and in the chapter describing calling conventions, the author compares caller-cleanup conventions to callee-cleanup conventions.

For callee-cleanup conventions, the author asserts, as a disadvantage, that functions following callee-cleanup conventions must have a fixed number of parameters.

What I don't get is, why?

If the callee can determine the number of actual parameters passed (for example, printf uses the format string to determine that), what is stopping the callee from cleaning up the stack?

Thanks