Est-ce que les instructions conditionnelles C retournent toujours [1 ou 0] ou retournent-elles [0 ou "autre chose que zéro"]. Je demande parce que:Un C conditionnel retournera-t-il toujours 1 ou 0?
code pseudo -
foo (adresse, shouldSend):
registre >> = 1
registre < < = 1 // pour effacer bit en première position
registre | = shouldSend // pour indiquer si elle doit envoyer ou non
le problème se produit si quelqu'un passe dans une valeur de shouldSend de true supérieur à un (car seulement 0 est false et tout le reste est vrai, techniquement c'est valide). puisque je suis directement OR'ing la valeur de vérité de shouldSend avec le registre, il vaut mieux ne pas dire 0xFF! J'ai déjà une solution, donc la question est plus par curiosité. Je me demande cependant si:
foo (adresse, shouldSend):
registre >> = 1
registre < < = 1 // pour effacer bit en première position
registre | = (shouldSend> 0)// pour signaler si elle doit envoyer ou non
résout le problème? Je pense que maintenant le problème d'un 0xFF (ou en général, quelque chose de plus grand que 1) passé est masqué par le conditionnel C. mais cela ne tient que si les conditionnels C C sont garantis pour retourner [0 ou 1]. Ps - je me rends également compte qu'il est probablement dépendant du compilateur, mais que dit le standard ansi à ce propos?
Ce ne devrait pas être (shouldSend! = 0)? En utilisant !! shouldSend est un mauvais tour. –