В $ 6.5.2.2.6 стандарт C11:Что означает это утверждение в стандарте C11 (о вариационных функциях)?
Если выражение, которое обозначает вызываемой функции имеет тип, который не включает в себя прототип, целые акции выполняются на каждый аргумент, и аргументы, имеют тип float, до double. Они называются рекламными акциями по умолчанию. Если число аргументов не равно числу параметров, то поведение не определено. Если функция определена с типом, в котором содержит прототип, и либо прототип заканчивается на эллипсис (, ...), либо типы аргументов после продвижения по службе не являются , совместимыми с типами параметров, поведение не определено. Если функция определена с типом, который не включает прототип, а типы аргументов после продвижения не совместимы с поведением параметров после продвижения по службе, то поведение не определено, за исключением следующих случаев:. ..
Что это значит - я действительно не могу это понять (особенно первая часть). Из того, что я могу, однако это означает, что определение функции, как это:
void func(int a, int b, ...)
{
}
А потом называть это не определено поведение, которое я думаю, что это глупо.
Этот стандарт C является странным. Где задействовано многоточие, которое вы показываете мне? Потому что они существуют в стандартном заявлении, который я выделил. – AnArrayOfFunctions
@FISOCPP Выделив предложение, вы упомянули два случая, один из которых связан с параметрами '...'. Пример Вона Катона относится к другому делу. – fuz
@FISOCPP: раздел, который вы выделили, предназначался для двух разных случаев. Я также добавил свой ответ, чтобы включить случай elipses. –