Por que eu posso atribuir estruturas, mas não compará-los
Pergunta
Mesmo que eu sou um longo tempo programador C, eu só aprendi recentemente que se pode variáveis ??de estrutura diretamente atribuir a um ao outro em vez de usar memcpy:
struct MyStruct a,b;
...
a = b; /* implicit memcpy */
Embora este se sente um pouco "alto nível" para C, é definitivamente útil. Mas por que não posso fazer igualdade e desigualdade de comparação:
if (a == b) ...
if (a != b) ...
Existe alguma boa razão para o padrão para excluir esta? Ou esta é uma inconsistência na - caso contrário, muito elegante - padrão?
Eu não vejo por que eu posso substituir o meu memcpy é para atribuições limpas, mas eu tenho que manter aqueles feio memcmp de no lugar.
Solução
Por comp.lang.c FAQ :
Não há nenhuma boa maneira para que um compilador para implementar comparação estrutura (Isto é, para apoiar o operador para == estruturas) o que é consistente com sabor de baixo nível de C. Um simples byte-por-byte comparação podia fundador em bits aleatórios apresentar em não utilizada "furos" na estrutura (tais estofamento é usado para manter o alinhamento de campos mais tarde corrigir). A comparação de campo-a-campo pode exigir quantidades inaceitáveis ??de código repetitivo para grandes estruturas. Qualquer comparação gerado pelo compilador Não se podia esperar para comparar ponteiro campos adequadamente em todos casos: por exemplo, é muitas vezes apropriar-se de comparar campos char * com strcmp ao invés de ==.
Se você precisa comparar duas estruturas, você vai ter que escrever sua própria função a fazê-lo, campo a campo.