Dlaczego mam „operację może być niezdefiniowana” w wyrażeniu Statement w C ++?

aby opisać problem po prostu, spójrz na poniższy kod:

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

Dostałem to ostrzeżenie z [-Punkt końcowy]

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

moja wersja g ++ to 4.4.5

Będę wdzięczny każdemu, kto wyjaśni ten prosty problem.

btw możesz znaleźć mój oryginalny program i oryginalny problem w # 7 wto Chińska strona (nie jest konieczna)

UPD1:

jednak zmienić kod na({if(a) a=0; a;}) może uniknąć ostrzeżenia, ale uznałem, że prawdziwym powodem problemu może nie byćThe last thing in the compound statement should be an expression followed by a semicolon.

ponieważ dokument również powiedziałIf you use some other kind of statement last within the braces, the construct has type void, and thus effectively no value.

przykład może to pokazać:

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

i ten kod dostałbez ostrzeżeń! więc myślę, że prawdziwym powodem jest coś o punkcie sekwencji.

proszę pomóż!

UPD2:

przepraszam @AndyProwl za to, że nie zaakceptował odpowiedzi, która została zaakceptowana przed UPD1. podążając za jego radą, mogę zadać nowe pytanie (UPD1 to nowe pytanie inne niż pierwotne). Przyjmę jego odpowiedź ponownie, ponieważ i tak na pewno uniknie ostrzeżeń :)

Jeśli zdecyduję się zadać nowe pytanie, zaktualizuję to pytanie, aby dodać link.

questionAnswers(1)

yourAnswerToTheQuestion