O que deve acontecer com a negação de um size_t (ou seja, `-sizeof (struct foo)`))?
Estou lidando com algum código no trabalho que inclui uma expressão do formulário
-(sizeof(struct foo))
ou seja, a negação de umsize_t
e não estou claro sobre o que os padrões C e C ++ exigem dos compiladores quando eles vêem isso. Especificamente, olhando por aqui e em outros lugares,sizeof
retorna um valor integral não assinado do tiposize_t
. Não consigo encontrar nenhuma referência clara para o comportamento especificado ao negar um inteiro não assinado. Existe algum, e se sim, o que é isso?
Edit: Ok, então existem algumas boas respostas sobre aritmética em tipos não assinados, mas não está claro que isso é de fato tal. Quando isso nega, ele está operando em um inteiro não assinado, ou convertendo para um tipo assinado e fazendo algo com isso? É o comportamento esperado dos padrões "imagine que é o número negativo de magnitude semelhante e, em seguida, aplique as regras de 'estouro' para valores não assinados"?