В C99 f () + g () не определено или просто не указано?

Раньше я думал, что в C99, даже если побочные эффекты функций f и g мешали, и хотя выражение f () + g () не содержит точки последовательности, f и g будет содержать некоторые из них, поэтому поведение будет неопределенным: либо f () будет вызываться перед g (), либо g () перед f ().

Я больше в этом не уверен. Что, если компилятор встраивает функции (что компилятор может решить сделать, даже если функции не объявлены inline ), а затем переупорядочивает инструкции? Можно ли получить результат, отличный от двух вышеупомянутых? Другими словами, является ли это неопределенным поведением?

Это не потому, что я намереваюсь писать такие вещи, а для того, чтобы выбрать лучший ярлык для такого оператора в статическом анализаторе.

54
задан Pascal Cuoq 16 October 2010 в 11:16
поделиться