Las sentencias condicionales Do C siempre devuelven [1 o 0], o devuelven [0 o 'algo diferente de cero']. Lo pregunto porque:¿Un condicional C siempre devolverá 1 o 0?
seudo código -
foo (dirección, shouldSend):
registro >> = 1
registro < < = 1 // para borrar bits en la primera posición
registro | = shouldSend // para indicar si se debe enviar o no
El problema se produce si alguien ingresa un valor de shouldSend de verdadero mayor que uno (como solo 0 es falso y todo lo demás es cierto, técnicamente esto es válido). ya que estoy directamente en el valor de verdad de shouldEnviar con el registro, ¡mejor no decir 0xFF! Ya tengo una solución, entonces la pregunta es más por curiosidad. Me pregunto aunque si:
foo (dirección, shouldSend):
registro >> = 1
registro < < = 1 // para borrar bits en la primera posición
registro | = (shouldSend> 0) // para indicar si debe enviar o no
resuelve el problema? Creo que ahora el problema de un 0xFF (o en general, algo mayor que 1) pasado es enmascarado por el condicional C. pero esto solo tiene validez SI los condicionales C están garantizados para regresar [0 o 1].
ps - también me doy cuenta de que es probablemente dependiente del compilador, pero ¿qué dice el estándar ansi sobre esto?
¿No debería ser (shouldSend! = 0)? Usar !! shouldSend es un truco malvado. –