La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cuáles son los efectos secundarios y los puntos de secuencia en la programación en lenguaje C?

¿Cuáles son los efectos secundarios y los puntos de secuencia en la programación en lenguaje C?

En lenguaje C, el término efecto secundario se refiere a la modificación de un objeto o archivo de datos. Por ejemplo, la siguiente declaración var = 99

El efecto secundario es cambiar el valor de var a 99. Evaluar una expresión también puede tener efectos secundarios, por ejemplo:

se = 100

Un efecto secundario de evaluar esta expresión es que el valor de se se modifica a 100.

Un punto de secuencia se refiere a un momento especial en la ejecución de un programa antes del cual todos los efectos secundarios han terminado y los efectos secundarios posteriores aún no han ocurrido.

El terminador de la instrucción c: punto y coma (;) es el punto de secuencia. En otras palabras, los efectos secundarios causados ​​por asignaciones, incrementos o decrementos en declaraciones C deben terminar antes del punto y coma. Hablaremos más adelante sobre algunos operadores que involucran puntos de secuencia. El punto en el que termina cualquier operación de expresión completa también es un punto de secuencia. La llamada expresión completa significa que esta expresión no es una subexpresión. La llamada subexpresión se refiere a la expresión dentro de la expresión. Por ejemplo:

f = e 3

Esta expresión completa es una expresión completa. e, 3 y e 3 en esta expresión son todas sus subexpresiones.

Con el concepto de puntos de secuencia, analicemos un error muy común:

int x = 1, y;

y = x x;

p>

Aquí y = x x es una expresión completa y x es su subexpresión. El punto en el que termina la operación de esta expresión completa es un punto de secuencia, int x = 1, y también es un punto de secuencia; Es decir, x x se encuentra entre dos puntos de la secuencia. Según el estándar, el valor que tiene un objeto se puede modificar como máximo una vez entre dos puntos de secuencia. Pero podemos ver claramente que en el ejemplo anterior, el valor de x se modificó dos veces entre los dos puntos de la secuencia. ¡Esto obviamente está mal! Compilar este código en diferentes compiladores puede producir diferentes valores de y. Un resultado común es que el valor de y termina modificándose a 2 o 3. No entraré aquí en un análisis más profundo de esta cuestión. Sólo recuerda que esto está mal y no lo uses tanto. Si está interesado, puede consultar la información relevante que se enumera a continuación.

Las definiciones de efectos secundarios y puntos de secuencia en el estándar del lenguaje C son las siguientes:

Acceder a objetos volátiles, modificar objetos, modificar archivos o llamar a funciones que realizan estas operaciones son todos efectos secundarios y son entornos de ejecución Cambio de estado. La evaluación de expresiones puede tener efectos secundarios. En ciertos puntos específicos de la secuencia de ejecución (llamados puntos de secuencia), todos los efectos secundarios de las evaluaciones anteriores deben estar completos y no deben ocurrir efectos secundarios de las evaluaciones posteriores.

La traducción es la siguiente:

Acceder a objetos mutables, modificar objetos o archivos o llamar a funciones que incluyen estas operaciones son efectos secundarios y cambiarán el estado del entorno de ejecución. La evaluación de expresiones también puede tener efectos secundarios. Algunos puntos específicos de la secuencia de ejecución se denominan puntos de secuencia. En el punto de secuencia, los efectos secundarios de todas las operaciones anteriores a este punto deberían haber terminado y los efectos secundarios de las operaciones posteriores aún no han ocurrido.