2010-11-15 2 views
1

Можно создать дубликат:
FAQ : Undefined Behavior and Sequence Pointsразличные выходы на другой компилятор

Различные выходы на другой компилятор? Это правда, что некоторые операторы могут генерировать разные выходы на разных компиляторах. У меня есть два компилятора для gcc и msvc. Когда я попробовал образец кода на обоих из них, я был потрясен, увидев на них разные выходы.

Это был образец кода.

#include<stdio.h> 
int main(void) 
{ 
int variable_a = 100; 
printf("%d %d", ++variable_a, variable_a++); return 0; 
} 

Вывод, который я получил на НКУ было 102 100
На MSVC я получил 102 101.
Почему такая разница?

+2

"неопределенное поведение". http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors-iiiii-etc – kennytm

+1

Тот факт, что вы потрудились вводить в программу, говорит о том, что у вас были причины подозревать это или следовать учебник, который следовало бы объяснить, так почему же он был шокирован? –

+0

Я нахожусь в стадии обучения, и мне нравится проверять выходы на нескольких компиляторах. результаты были разными, так что спрашивать здесь. – Shruti

ответ

4

Вы вызываете неопределенное поведение, увеличивая число a более одного раза. Любой компилятор будет в пределах своих прав, чтобы проникнуть в ваш дом и избить вас палкой.

+0

Что увеличилось более одного раза ??? – Shruti

+2

+1 для эвакуации. –

+0

@Andrzej, +1 для использования "evocativeness" –

1

Существуют различные тонкие эффекты такого рода, где язык явно не определен. Есть много истории, почему язык оставляет эти углы неопределенными. С точки зрения кодера нам нужно избегать определенных шаблонов, таких как тот, на который вы наткнулись.

See this reference for some explanation