#include <stdio.h>
int fonction1(int a)
{
if (a & 1)
return 1;
else
return 0;
}
int fonction2(int a)
{
if ((a*10) == 10 )
return 1;
else
return 0;
}
void main(void)
{
int nombre;
do
{
printf("Entre un nombre :\n");
fflush(stdin);
scanf("%d",&nombre);
} while( fonction1(nombre) && fonction2(nombre));
}
#include <stdio.h>
int fonction1(int a)
{
if (a & 1)
return 1;
else
return 0;
}
int fonction2(int a)
{
if ((a*10) == 10 )
return 1;
else
return 0;
}
void main(void)
{
int nombre;
do
{
printf("Entre un nombre :\n");
fflush(stdin);
scanf("%d",&nombre);
} while( fonction1(nombre) && fonction2(nombre));
}
) du style:
Uther
: C'est loin d'être un bug, c'est même imposé par les standards C il me semble.
Tout à fait.
Enfin tous les compilo C et la grande majorité des autres langagues fonctionnent comme cela.Oui, mais pas le VB par exemple
C'est même pratique dans le cas cité par Nu. Par contre ça permet aussi des horreurs(donc j'adoreOui, mais ce genre de code s'utilise très souvent en PHP. Je ne vois pas trop le problème ?) du style:
mafonction(truc) || printf("Erreur: mafonction retourne 0");

Sasume :Je parlais de langague de programation, pas de VB
Enfin tous les compilo C et la grande majorité des autres langagues fonctionnent comme cela.Oui, mais pas le VB par exemple![]()
Sasume :
C'est même pratique dans le cas cité par Nu. Par contre ça permet aussi des horreurs(donc j'adoreOui, mais ce genre de code s'utilise très souvent en PHP. Je ne vois pas trop le problème ?) du style:
mafonction(truc) || printf("Erreur: mafonction retourne 0");
if (pwet && plop && ouga) tagada(tsointsoin); if (pouet || marmotte || bouga) tagada(tsointsoin);
if (pwet)
if (plop)
if (ouga)
{
tagada(tsointsoin);
}
if (pouet)
tagada(tsointsoin);
else if (marmotte)
tagada(tsointsoin);
else if (bouga)
tagada(tsointsoin);


sub ParseScript()
{
while( <IN> )
{
$line++;
( /^\s+$/ || /#.+/)
|| (/\s*SET\s+PROTOCOL\s+([0-9]+)/) && SISTCommand("3",$1)
|| (/\s*RESET/) && FSISTCommand("4",$1)
|| (/\s*MEMORY\s+RANGE\s+([0-9]+)/) && SISTCommand("0B",$1)
|| (/\s*POLL\s+([0-9]+)/) && SISTCommand("16",$1)
|| (/\s*WRITE\s+WORD\s+([0-9]+)/) && SISTCommand("17",$1)
|| (/\s*LATCH\s+HIGH\s+DATA\s+([0-9]+)/) && SISTCommand("18",$1)
|| (/\s*LATCH\s+LOW\s+ADDRESS\s+([0-9]+)/) && SISTCommand("19",$1)
|| (/\s*LATCH\s+HIGH\s+ADDRESS\s+([0-9]+)/) && SISTCommand("1A",$1)
|| (/\s*SET\s+BYTE\s+([0-9]+)/) && SISTCommand("1B",$1)
|| (/\s*READ\s+BYTE\s+([0-9]+)/) && SISTCommand("1C",$1)
|| (/\s*JUMP\s+AND\s+EXECUTE\s+([0-9]+)/) && SISTCommand("1F",$1)
}
}
int MaFonction(int *pt_i)
{
if(pt_i==NULL || *pt_i<0)
return -1;// Les valeurs sont invalides
(*pt_i)++;
return 0;
}
Link :
En C, un truc pour lequel on utilise pas mal cette notation, c'estpour contrôler des pointeurs et des valeurs pointées
int MaFonction(int *pt_i) { if(pt_i==NULL || *pt_i<0) return -1;// Les valeurs sont invalides (*pt_i)++; return 0; }
Ici, si pt_i est NULL, le programme ne regardera pas la valeur pointée.
Et j'y repense vu que ta variable est un int tu peux utiliser le fait que le bit de poids fort est en fait un bit de signe...
Après, c'est possible qu'un compilo optimise "if (x&0x8000)" en "if (x<0)", mais sinon c'est de loin la deuxième version qui sera la plus rapide...
)
(encore que, bcp de processeurs ont une instruction de comparaison avec zéro, qui risque d'être plus rapide qu'une comparaison avec un nombre quelconque, et éventuellement plus rapide qu'une instruction de test de bit, puisqu'il y a une seule opérande donc éventuellement moins de données à lire en mémoire)
(surtout qu'on ne peut pas tjs éviter de mentionner le 0, par exemple if (x>0) n'a pas d'équivalent sans 0)