Skip to main content

Что такое точка последовательности?

Точка последовательности в компьютерном программировании - это момент, который возникает во время выполнения программы, когда значение переменной было полностью вычислено, без изменений, ожидающих от предыдущих операций, и без выполнения вычислений в будущем выражении. Существует ряд мест, где существуют точки последовательности - в основном определенные в стандарте языка C - например, перед выполнением кода внутри функции, в конце управляющих выражений в выражениях, таких как «for» и «if», и в конце любого полного выражения, такого как простая строка кода C. Некоторые причины для определения точки последовательности состоят в том, чтобы избежать ситуаций, которые являются неоднозначными, приводят к неопределенному поведению или могут запутать компилятор и генерировать непредсказуемый код. Во многих случаях программисты явно не беспокоятся о точке последовательности, хотя при создании компилятора концепция очень важна для обеспечения правильного выполнения кода.

Примером точки последовательности в языке программирования C является оператор A = A + B ;. В этом выражении точка с запятой является точкой последовательности; когда выражение будет завершено, будет вычислено значение A, и до тех пор, пока не начнется следующее выражение, для него не будет выполнено никаких остаточных вычислений. Знак равенства не является точкой последовательности, потому что значение A может быть изменено компилятором в любом порядке по всему выражению.

Основное правило точки последовательности состоит в том, что ни одна переменная не будет доступна более одного раза между точками для любой цели, кроме как для вычисления изменения ее значения. Нарушение этого правила лучше всего выражается при присваивании значения массиву. Если есть переменная A и массив с именем I, то грамматически в C можно написать выражение I [A] = A ++. Здесь к переменной обращаются более одного раза с целью, отличной от оценки ее текущего значения; а именно, он используется в качестве индекса в массиве I. Это означает, что компилятор может увеличивать A перед тем, как использовать его в качестве индекса или после его использования, создавая непредсказуемое поведение, на которое нельзя полагаться в программе.

Точка последовательности в основном может рассматриваться как способ гарантировать, что операторы могут и будут последовательно оцениваться и выполняться компилятором. Это также позволяет компилятору использовать стратегии оптимизации, поскольку определенное поведение предсказуемо. В стандарте языка C есть три основных экземпляра точек последовательности, а именно, когда функция начинает выполнение, в точке логических операторов и запятых и в конце полного выражения, заканчивающегося точкой с запятой, как это делают большинство операторов C ,