выражение в sizeof
От: Аноним  
Дата: 07.09.09 17:19
Оценка: :))
Всем, привет.

Споткнулся на следующей штуке:
...
int a = 10;
int b = sizeof(a++); // мне казалось тут значение "а" должно увеличиться на 1  :???: 
printf("a: %d\n", a);
printf("b: %d\n", b);
...

в консоли: 10 и 4. Кто может растолковать почему не 11?
Re: выражение в sizeof
От: Сергей Мухин Россия  
Дата: 07.09.09 17:35
Оценка: 3 (2)
Здравствуйте, Аноним, Вы писали:

А>Споткнулся на следующей штуке:

А>
А>...
А>int a = 10;
А>int b = sizeof(a++); // мне казалось тут значение "а" должно увеличиться на 1  :???: 
А>printf("a: %d\n", a);
А>printf("b: %d\n", b);
А>...
А>

А>в консоли: 10 и 4. Кто может растолковать почему не 11?

это классика.
выражение в операции sizeof служит только для определения типа, и, естественно, не вычисляется.
---
С уважением,
Сергей Мухин
Re: выражение в sizeof
От: frogkiller Россия  
Дата: 07.09.09 17:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всем, привет.


А>Споткнулся на следующей штуке:

А>
А>...
А>int a = 10;
А>int b = sizeof(a++); // мне казалось тут значение "а" должно увеличиться на 1  :???: 
А>printf("a: %d\n", a);
А>printf("b: %d\n", b);
А>...
А>

А>в консоли: 10 и 4. Кто может растолковать почему не 11?

Умный компилятор подставил константу на этапе компиляции и не вычислял выражение.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[2]: выражение в sizeof
От: Сергей Мухин Россия  
Дата: 07.09.09 17:40
Оценка: +1
Здравствуйте, frogkiller, Вы писали:

F>Умный компилятор подставил константу на этапе компиляции и не вычислял выражение.


это поведение по стандарту, и не зависит умный компилятор или нет.
---
С уважением,
Сергей Мухин
Re[2]: выражение в sizeof
От: michae1  
Дата: 07.09.09 17:57
Оценка:
СМ>это классика.
СМ>выражение в операции sizeof служит только для определения типа, и, естественно, не вычисляется.

Вот так-то, большое спасибо. Пойду читать матчасть
Re[3]: выражение в sizeof
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.09.09 23:06
Оценка: :))
Здравствуйте, Сергей Мухин, Вы писали:

F>>Умный компилятор подставил константу на этапе компиляции и не вычислял выражение.


СМ>это поведение по стандарту, и не зависит умный компилятор или нет.


Умный компилятор не стал нарушать стандарт, чтобы его не стерли с диска
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.