Стандарт C не определяет порядок оценки аргументов.Однако все аргументы оцениваются перед вызовом функции.Согласно C 2018 6.5.2.2 10 (где рассматриваются вызовы функций):
Существует точка последовательности после вычислений указателя функции и фактических аргументов, но до фактического вызова.
Таким образом, когда начинается выполнение вызываемой функции, все аргументы оцениваются, поэтому их значения известны.Затем выражения размера изменяемых параметров оцениваются в соответствии с 6.9.1 10 (в котором обсуждаются определения функций):
При входе в функцию оцениваются выражения размера каждого изменяемого параметра иЗначение каждого выражения аргумента преобразуется в тип соответствующего параметра, как если бы это было сделано с помощью присваивания.
(Обратите внимание, что аргументы - это то, что вызывающий объект передает функции, а параметры - это объекты, объявленные как частьобъявление или определение функции, которые получают значения при входе в функцию.)