Всем, привет.
Споткнулся на следующей штуке:
...
int a = 10;
int b = sizeof(a++); // мне казалось тут значение "а" должно увеличиться на 1 :???:
printf("a: %d\n", a);
printf("b: %d\n", b);
...
в консоли: 10 и 4. Кто может растолковать почему не 11?
Здравствуйте, Аноним, Вы писали:
А>Споткнулся на следующей штуке:
А>А>...
А>int a = 10;
А>int b = sizeof(a++); // мне казалось тут значение "а" должно увеличиться на 1 :???:
А>printf("a: %d\n", a);
А>printf("b: %d\n", b);
А>...
А>
А>в консоли: 10 и 4. Кто может растолковать почему не 11?
это классика.
выражение в операции sizeof служит только для определения типа, и, естественно, не вычисляется.
Здравствуйте, Аноним, Вы писали:
А>Всем, привет.
А>Споткнулся на следующей штуке:
А>А>...
А>int a = 10;
А>int b = sizeof(a++); // мне казалось тут значение "а" должно увеличиться на 1 :???:
А>printf("a: %d\n", a);
А>printf("b: %d\n", b);
А>...
А>
А>в консоли: 10 и 4. Кто может растолковать почему не 11?
Умный компилятор подставил константу на этапе компиляции и не вычислял выражение.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
СМ>это классика.
СМ>выражение в операции sizeof служит только для определения типа, и, естественно, не вычисляется.
Вот так-то, большое спасибо. Пойду читать матчасть
Здравствуйте, Сергей Мухин, Вы писали:
F>>Умный компилятор подставил константу на этапе компиляции и не вычислял выражение.
СМ>это поведение по стандарту, и не зависит умный компилятор или нет.
Умный компилятор не стал нарушать стандарт, чтобы его не стерли с диска