Así es, y como eso de que con algo mayor a 1 tambien es conciderado TRUE es un arma de doble ya que con algún error o descuido podemos entrar como condicion verdadera algo que no lo es, se suele hacer:
#DEFINE TRUE 1
#DEFINE FALSE 0
#DEFINE PIN_LED (1<<5)
if ( (PORTB & PIN_LED) == TRUE) { }
Si bien son más "caracteres" escritos, se evitan algun posible error. No sé si es buena práctica lo que pongo acá, simplemente comentar que lo he visto en muchos programas "grandes"
Saludos!
Yo creo que no tendria sentido realizarlo, si me parece mas intuitivo para alguien que no sabe C el poner la condicion, pero sabiendo como funciona el if(), con los ejemplos que dio Picuino no deberia haber ningun problema. Algunos lenguajes True y False son palabras reservadas, asi que lo considero como una practica muy comun, ademas de poder designar a TRUE con cualquier valor que va a funcionar igual no importa que sea 1. Me explico el por que no se me ocurre que sea necesario.
EDIT: Me di cuenta de mi error en la explicacion que esta en el quote siguiente, pido perdon y espero que no cause confusiones (de todas formas dejo la explicacion que di para que se de cuenta del error), tome el operador == como si fuera un AND logico ( && ) lo cual fue mi error. Pero abajo del quote respondo por cual es el error realmente.
En la condicion del if, lo que realmente vale la pena mirar es PORTB & PIN_LED, Si vos te equivocas en eso o metes un error en eso el "== TRUE" no te va a salvar para nada. Miremos las 2 posibilidades
True == True -> True
False == True -> False
si la condicion que dije es True, el resultado es True. Si la condicion es False, el resultado tambien es False. No evitaria ningun error o un descuido por que pusiste mal el valor PIN o el PORT.
Ahora si pongo el error, en el caso que se presento if ( (PORTB & PIN_LED) == TRUE) { } , la condicion (PORTB & PIN_LED) puede que no de 1,
si suponemos que queremos saber el bit4 entonces PIN_LED seria 0x10 y de estar activo el PIN, devolviera 0x10 lo cual se compararia con un 0x01.
A no ser que hagas if ( (PORTB & PIN_LED) == PIN_LED) { } , veo complejo que funcione como se quiere. Y termina siendo mas engorroso.
No se me ocurre algo que implique una arma de doble filo a no ser que uses operadores de pre-incremento/decremento y multiples condiciones:
i=0,j=0;
if ( ++i<10 || ++j<10 )
{
Mostra los valores de i y de j
}
Pero hacer algo asi deberias tener un poco mas de conocimientos de C.
O tratar de resumirlo a ASM donde se ejecuta la primer condicion y si se cumple entonces no hay necesidad de hacer la otra. lo cual j no incrementaria hasta que i sea igual o mayor a 10.