Por que a troca XOR com números inteiros dispara um aviso?
Digitei o seguinte programa:
#include <stdio.h>
int main(void) {
int a = 3;
int b = 42;
printf("a = %d\nb = %d\n", a, b);
printf("Exchanging values.\n");
a ^= b ^= a ^= b;
printf("a = %d\nb = %d\n", a, b);
return 0;
}
e está tudo bem. Quando tento compilá-lo, recebo o seguinte:
$ gcc test.c -o test -Wall -Wextra -ansi -pedantic-errors
test.c: In function ‘main’:
test.c:11: warning: operation on ‘a’ may be undefined
Esse é o código padrão, não é?
Por que dispara um aviso? Até onde eu sei, o XOR bit a bit é implementado por padrão paraint
desde que você esteja usando uma implementação padrão de C.
Muito obrigado.