« Programmation C/Opérateurs » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Les opérateurs du C : référencement pas référençage !
Nathael (discussion | contributions)
m Ajout d'informations sur le cas "if (a = b)" quand b vaut 0
Ligne 255 :
if (a = b)
{
/* Le code qui suit sera toujours exécuté car b est différent de 0 ... */
}
</source>
 
Dans cet exemple, il y a un seul caractère <code>=</code> entre <code>a</code> et <code>b</code>, donc on ne teste pas si <code>a</code> est égal à <code>b</code>, mais on '''affecte''' la valeur de la variable <code>b</code> à la variable <code>a</code>. Le résultat de l'expression étant 2, elle est donc toujours considérée comme vraie (elle serait toujours considérée comme fausse si b avait la valeur 0). Ce genre de raccourci est en général à éviter. En effet, il est facile de faire une faute de frappe et d'oublier de taper un caractère <code>=</code>. Comme le code résultant est toujours valide au sens du C, cette erreur peut ne pas être vue immédiatement. Pour aider les développeurs à détecter ce genre d'erreurs, de nombreux compilateurs émettent un avertissement quand un tel code leur est présenté. Une manière de faire taire ces avertissements, ''une fois qu'on s'est assuré qu'il ne s'agit pas d'une erreur'', est de mettre entre parenthèses l'affectation:
 
<source lang="c">