2010-08-17 4 views
0

Possible en double:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)Puzzler Entrée en C

int main() 
{ 
int a=5,s; 
s=++a + ++a; 
printf("%d",a); 
printf("%d",s); 
} 

sortie est 7 et 14

MAIS

int main() 
{ 
int a, s; 
printf("Enter value of a"); 
scanf ("%d",&a); 
s=++a + ++a; 
printf("%d",a); 
printf("%d",s); 
} 

l'utilisateur d'entrée donne 5 la sortie est 7 et 13

POURQUOI?

+0

je vois pour le 2ème exemple '714' aussi: http://ideone.com/vJbaH – Blindy

+0

Il y a tellement de doubles de ce sur le SO. Par exemple: http://stackoverflow.com/questions/2902638/post-and-pre-increment-in-c ou http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors -iiiii-etc – Naveen

+0

que compilateur C utilisez-vous? –

Répondre

3

comportement non défini:

s=++a + ++a; 

Tout peut se produire lorsque non défini, de sorte que votre comportement est tout à fait valable.

+0

Manquant le point. – Blindy

+1

@Blindy: Peut-être pourriez-vous expliquer, exactement, quel point manque. –

+0

Il manque le point que, indépendamment de cette ligne, les deux versions de l'OP du code devraient (et font) retourner la même chose sur le même compilateur. Voilà en quoi consiste la question. – Blindy

1

Je suppose qu'il s'agit d'un artefact d'optimisation du compilateur, dans le premier exemple a est connu afin que le compilateur optimise les pré-incréments à se produire avant l'ajout. Dans le second exemple, la valeur est inconnue et le compilateur n'optimise pas la séquence en l'intégrant de gauche à droite. Cela peut être une fonction de votre compilateur spécifique et il devrait être examiné spécifiquement.

1

Comportement non défini. Changez-le ou vous risquez d'être attaqué par des rapaces.

0

salut budy ce codage fonctionne correctement dans le compilateur VI ..