> If the callee can determine the number of actual parameters passed (for example, printf uses the format string to determine that),
Are you sure?
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.
printf( "This is my int %d\n", 1, 2, 3, 4, 5 );
> how does it know how many parameters it can access?
will try to read an int anyway from where the next parameter is expected to be.
printf( "This is my int %d\n" );
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.