Без -O2 этот код печатает 84 84
, с флагом O2 на выходе получается 84 42
. Код был скомпилирован с использованием gcc 4.4.3.
на 64-битной платформе Linux. Почему выходные данные для следующего кода отличаются?
Обратите внимание, что при компиляции с параметром -Os получается 0 42
#include <iostream>
using namespace std;
int main() {
long long n = 42;
int *p = (int *)&n;
*p <<= 1;
cout << *p << " " << n << endl;
return 0;
}