que acabo de escribir la siguiente línea de código:uso adecuado del operador de incremento previo en combinación con el operador de referencia de puntero
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
Mi intención es incrementar la variable count
dentro de la estructura de datos que data_ptr
puntos a antes de hacer la comparación a threshold
, y esta línea de código funciona.
Si en cambio hubiera querido incrementar data_ptr
antes de hacer la comparación, habría escrito esta:
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
Por curiosidad, también probé esta línea de código:
if (++data_ptr->count > threshold) { /*...*/ } // example 3
Y encontró que se comporta exactamente igual que el primero.
Primera pregunta: ¿Por qué hace el ejemplo # 3 trabajo lo mismo que el ejemplo # 1? ¿Es una cuestión de precendencia del operador? Algo en el estándar? Tuve que escribir un programa de prueba rápido porque la respuesta no era obvia para mí.
Segunda pregunta: ¿Debo escribir esta declaración if
de manera diferente? Podría realizar el incremento primero, en su propia línea, y luego probar la condición para evitar cualquier posible confusión. ¿Es esto necesario, o los primeros dos ejemplos son suficientemente evidentes por sí solos?
+1 sucinto. '' –