Por que eu tenho "operação pode ser indefinida" em expressão de declaração em C ++?
para descrever o problema simplesmente, por favor, dê uma olhada no código abaixo:
int main()
{
int a=123;
({if (a) a=0;});
return 0;
}
Eu recebi esse aviso de [-Wsequence-point]
Line 4: warning: operation on 'a' may be undefined
minha versão g ++ é 4.4.5
Eu apreciarei quem quer que explicasse este problema simples.
btw você poderia encontrar o meu programa original e problema original em # 7 emisto Site chinês (não é necessário)
UPD1:
embora para mudar o código em({if(a) a=0; a;})
pode evitar o aviso, mas reconheci que a verdadeira razão do problema pode não serThe last thing in the compound statement should be an expression followed by a semicolon
.
porque o documentário também diziaIf you use some other kind of statement last within the braces, the construct has type void, and thus effectively no value
.
Um exemplo pode mostrar isso:
int main()
{
int a=123, b;
({;});
({if (a) b=0;});
return 0;
}
e esse código temsem avisos! então eu acho que a verdadeira razão é algo sobre o ponto de seqüência.
por favor ajude!
UPD2:
desculpe a @AndyProwl por ter inaceitado sua resposta que foi aceita antes de UPD1. seguindo seu conselho, posso fazer uma nova pergunta (a UPD1 é uma nova pergunta diferente da original). Eu aceito sua resposta novamente porque certamente evita os avisos de qualquer maneira :)
Se eu decidi fazer uma nova pergunta, atualizarei esta questão para adicionar um link.