Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В следующем фрагменте значение переменной a непредсказуемо:
d=0; a=b++=c++=d++;
Цепочка присваиваний может приводить к различным результатам.
Первый способ: c получает значение d, а затем обе переменные инкрементируются.
Далее b присваивается значение с и затем b инкрементируется. И, наконец, результат 2 присваивается переменной а.
Второй способ: Сначала выполняется цепочка присваиваний, а затем операции инкремента. В этом случае последнее присваивание имеет вид a=0.
Оба метода с точки зрения стандарта языка являются правильными. Стандарт сознательно устроен так, что большинство подобных вопросов оставлено на усмотрение разработчиков компиляторов, так как лучший порядоквычислений определяется архитектурой машины.
Вывод: Для обеспечения переносимости программ следует избегать выражений, которые зависят от порядка вычислений и дают непредсказуемые побочные эффекты (побочные эффекты иногда полезны).
В следующей таблице приведены приоритеты и порядок выполнения для всех операций Си (включая и те, которые еще не изучались).
Операции с одинаковым приоритетом выполняются слева направо в порядке следования.
Дата публикования: 2014-12-25; Прочитано: 176 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!