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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top