--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/9f25ea25-8662-4224-b1c9-dbd48bc0e0f6n%40googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CABoUv5RWcdLLud8WG4w65RwcBKSepYi2NP8r0R3E2ocKYPhDog%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CALXhAFxHbcWmT92vVy_CE%3DQbKLdznTbeHxqjeQSZ4SCnNnuSAQ%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CALXhAFxHbcWmT92vVy_CE%3DQbKLdznTbeHxqjeQSZ4SCnNnuSAQ%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CABoUv5TK0ggLnb49R5Zae7j%2BGXKvcnMSY8dKfNE%2BYtOhwS%2B0Bw%40mail.gmail.com.
--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/9f25ea25-8662-4224-b1c9-dbd48bc0e0f6n%40googlegroups.com.
Interessante...vou pesquisar isso depois.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CAKUebb-YRfmiwM8ooStQqQ9iotwDArKG9Po4%2BkKxGorzjVM9MQ%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CABoUv5T3Bc%3D_V9Y06sgVXuN5wpcGbK4mRN_xDB0TWCXEmr%2B1UQ%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CAM7p17NKvs63-bc1rn6kvszY-%2B6-umsEBwRcha3-MAAQxzmAsQ%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CAKUebb86ypeF%3DO8vD6K0dCVfo_ytQ%3DTP%2B-HHA8zpmiFUQqTZag%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CAM7p17O9-7SLsenttkG2keht-gTMCi5dY%2BgZiPmQ1gL6mVnxsw%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CABoUv5TQ7PmDrsc9YcaOJyLe8KVvN_o6%3DC92q2%3D78hJuOTBBMQ%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CAKUebb9ifrThZK%2B3-Pn7_hpuU99bhzG3DRDXSOjHas5qthhYmA%40mail.gmail.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CABoUv5SXfWzH%3D_a%2B36pabRtRTYBp9YgMjRbCq7TZ8bU8Z5%3DU8A%40mail.gmail.com.
A conversa tá boa. :)Augusto,Não é obrigatório que o compilador faça wraparound (ele pode fazer trap por padrão - segundo a documentação do GCC, o hardware é um dos ditadores aqui), mas se o fizer, seja porque ele decidiu ou porque você forçou com a -fwrapv, aí o que é este wraparound é definido pela especificação sim. Na C23 [1], o wraparound de uma expressão é definido como resultado % pow(2, largura_do_tipo_em_bits). Então INT_MAX + 1 sempre dará INT_MIN sim (assumindo wraparound, claro). Imagino que seja o mesmo para versões anteriores da especificação, mas seria preciso checar.
Em tempo, quando você diz que INT_MAX + 1 não pode ser armazenado num signed int, há controvérsias. :) Isto porque INT_MAX + 1 na verdade "cabe" no int de 32-bits:INT_MAX == 2147483647 == 0b01111111111111111111111111111111INT_MAX + 1 == 2147483648 == 0b10000000000000000000000000000000Mas claro, isso é um estouro. No entanto, os bits são os mesmos para o -2147483648 (INT_MIN) e para o 2147483648 (INT_MAX + 1). Logo, do ponto de vista do compilador a solução de wraparound cabe bem porque ele só precisa "deixar rolar".
Não sei de um compilador que faça como você sugeriu (atribuir INT_MAX). Tentei gerar uns casos aqui com casts no GCC e ele sempre optou por wraparound mesmo.[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3088.pdf (fim da página 26 no PDF)Fabricio,
>Eu concordo com você. Esse negócio de que "ah, já sei como o compilador X vai se comportar nesse caso", não me cheira bem, haja vista que o código pode ser compilado usando outro compilador com um comportamento diferenteEu discordo. Para mim tudo depende do requisito do projeto e suportar múltiplos compiladores é um dos requisitos. Veja, o GCC por exemplo oferece várias extensões que facilitam bastante a vida como VLAs e funções __builtin_*. Usá-las ou não (em favor da compatibilidade com outros compiladores) é uma decisão que, para mim, deve ser tomada ao desenhar [mentalmente] o projeto. Ou seja, não é um sim para todos os casos, nem um não para todos os casos. Mas claro, cada um pensa como quer. :)
> Neste caso, ou a pessoa muda o código para utilizar três variáveis mesmo ou coloca um workaround no código. Aí a pergunta muda: será que vale a pena esse trabalho todo para economizar uma variável?Não. A gente está admitindo que existe o requisito de não utilizar três variáveis, que é o problema proposto. ;)
Abraços,Fernando
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CAM7p17Oac4252SfJb7k-fBOH58SgysVz9bii-zmpx5bFjawk-g%40mail.gmail.com.