Ничто не доставляет столько хлопот, как поиск ошибки, допущенной только потому, что разработчик не знал правил старшинства и ассоциативности. Мне попадались сообщения в почтовых конференциях, в которых разумные вроде бы люди предлагали своего рода механизм самодокументирования — использование пробелов для указания операторов, которые,
по их мнению,
имеют старшинство. Например, поскольку мы знаем, что оператор умножения приоритетней оператора сложения, нам следовало бы написать примерно такой код, в котором пробелы указывают
подразумеваемое
старшинство:
а = b*c + d;
Такой подход в корне неверен: компилятор не может проводить корректный синтаксический анализ кода, если не определен конкретный синтаксис. Компилятор анализирует код согласно правилам, определенным разработчиками компилятора. С другой стороны, существуют круглые скобки, используемые для явного указания старшинства и ассоциативности. Например, выражение
а
=
b * с + d
можно переписать как
а =( b * с) + d
или как
а
=
b * (с + d)
и компилятор будет сначала вычислять выражение в скобках. Если есть несколько пар скобок, компилятор сначала вычислит выражения в скобках, а затем все выражение, основываясь на описанных правилах старшинства и ассоциативности.
Я твердо убежден, что следует всегда применять скобки, если в выражении несколько операторов. Рекомендую делать это, даже если вам понятен порядок вычислений, ведь люди, которые будут сопровождать ваш код, могут быть не такими грамотными.