> If the callee can determine the number of actual parameters passed (for example, printf uses the format string to determine that),
Are you sure?
Code:
printf( "This is my int %d\n", 1, 2, 3, 4, 5 );
Whilst being dumb, it isn't fatal. So long as the n conversions in the format string are matched by at least n compatible values, all is well.
> how does it know how many parameters it can access?
It doesn't.
Code:
printf( "This is my int %d\n" );
will try to read an int anyway from where the next parameter is expected to be.
Without a strong type-check to enforce a bunch of rules for variadic functions, it's quite hard work for the callee to work out how many real parameters there are.