Разница между неопределённым поведением программы и неопределёнными функциями заключается в следующем:
Неопределённое поведение программы — это поведение, на которое стандарт языка не накладывает каких-либо требований. 1 Оно может ожидаться, когда не указано явное поведение или когда программа использует ошибочные конструкции или данные. 1
Неопределённые функции не существуют в привычном понимании, но есть понятие неопределённого порядка вычисления аргументов функции. 23 Например, порядок вычисления аргументов функции произвольный и зависит от компилятора. 2
Таким образом, неопределённое поведение относится к общему поведению программы, а неопределённый порядок вычисления аргументов функции — к конкретному аспекту поведения, когда невозможно предсказать, как будут вычисляться аргументы функции. 23