Articles of language lawyer

Por que a operação left shift invoca o comportamento indefinido quando o operando esquerdo tem valor negativo?

Na operação de deslocamento à esquerda C bit a bit invoca o comportamento indefinido quando o operando do lado esquerdo tem valor negativo. Cotação relevante da ISO C99 (6.5.7 / 4) O resultado de E1 << E2 é E1 posições de bit E2 deslocadas para a esquerda; os bits desocupados são preenchidos com zeros. Se […]

Existem implementações não complementares de dois pares de C?

Como todos nós sabemos sem dúvida , o padrão ISO C (e C ++ também, eu acho, embora eu esteja mais interessado no lado C) permite três representações subjacentes de números assinados: complemento de dois; complemento de uns; e sinal / magnitude. A input da Wikipedia afirma que sign / magnitude é usado no IBM […]

Ordem de avaliação de argumentos usando std :: cout

Oi tudo que eu tropeçou neste pedaço de código hoje e estou confuso sobre o que exatamente acontece e mais em particular em que ordem: Código: #include bool foo(double & m) { m = 1.0; return true; } int main() { double test = 0.0; std::cout << "Value of test is : \t" << test […]

O “Comportamento Indefinido” realmente permite que * qualquer coisa * aconteça?

EDIT: Esta questão não foi concebida como um fórum para discussão sobre o (des) mérito do comportamento indefinido, mas isso é uma espécie de o que se tornou. Em qualquer caso, este tópico sobre um compilador C hipotético sem comportamento indefinido pode ser de interesse adicional para aqueles que acham que este é um tópico […]

Pegue o endereço de um elemento de array passado-a-fim via subscrito: legal pelo padrão C ++ ou não?

Eu já vi isso várias vezes agora que o seguinte código não é permitido pelo padrão C ++: int array[5]; int *array_begin = &array[0]; int *array_end = &array[5]; O código C ++ legal do &array[5] nesse contexto? Eu gostaria de uma resposta com uma referência ao padrão, se possível. Também seria interessante saber se ele […]

Acessando o membro da união inativa e o comportamento indefinido?

Fiquei com a impressão de que acessar um membro do union que não seja o último conjunto é UB, mas não consigo encontrar uma referência sólida (além de respostas alegando que é UB, mas sem qualquer suporte do padrão). Então, é um comportamento indefinido?