При цене 6.5.2.2.6 $ стандарт C11:
Если выражение, обозначающее вызываемую функцию, имеет тип, не включающий прототип, целочисленные повышения выполняются для каждого аргумента, а аргументы с типом float повышаются до удвоения. Это называется продвижением аргументов по умолчанию. Если количество аргументов не равно количеству параметров, поведение не определено. Если функция определена с типом, который включает прототип, и либо прототип заканчивается многоточием (, ...), либо типы аргументов после продвижения несовместимы с типами параметров, поведение не определено. Если функция определена с типом, который не включает прототип, и типы аргументов после продвижения несовместимы с типами параметров после продвижения, поведение не определено, за исключением следующих случаи: ...
Что это значит - я толком не понимаю (особенно первую часть). Однако из того, что я могу сказать, это означает, что определение такой функции:
void func(int a, int b, ...)
{
}
А затем называть это неопределенным поведением, которое я считаю глупым.