¿Por qué tengo "la operación puede estar indefinida" en la expresión de la declaración en C ++?

para describir el problema simplemente, por favor, eche un vistazo al código a continuación:

int main()
{
    int a=123;
    ({if (a) a=0;});
    return 0;
}

Recibí esta advertencia de [-Punto de secuencia]

Line 4: warning: operation on 'a' may be undefined

mi versión g ++ es 4.4.5

Apreciaré a quien quiera explicar este simple problema.

Por cierto, puedes encontrar mi programa original y mi problema original en # 7 enesta Sitio chino (no es necesario)

UPD1:

aunque para cambiar el código en({if(a) a=0; a;}) puede evitar la advertencia, pero reconocí que la verdadera razón del problema puede no serThe last thing in the compound statement should be an expression followed by a semicolon.

Porque el documental también decía.If you use some other kind of statement last within the braces, the construct has type void, and thus effectively no value.

Un ejemplo puede mostrarlo:

int main()
{
    int a=123, b;
    ({;});
    ({if (a) b=0;});
    return 0;
}

y este código tienesin advertencias! Así que creo que la verdadera razón es algo sobre el punto de secuencia.

¡por favor ayuda!

UPD2:

perdón a @AndyProwl por haber rechazado su respuesta que fue aceptada antes de UPD1. siguiendo su consejo, puedo hacer una nueva pregunta (UPD1 es una nueva pregunta diferente de la original). Aceptaré su respuesta de nuevo porque, de cualquier modo, seguramente evita las advertencias. :)

Si decidí hacer una nueva pregunta, la actualizaré para agregar un enlace.

Respuestas a la pregunta(1)

Su respuesta a la pregunta