Забавно ...
#include <stdio.h>
int main()
{
const int a = 5;
const int* p = &a;
int* p1 = (int*)p;
(*p1)--;
printf("a = %d\n*p1 = %d\n",a, *p1);
return 0;
}
компилируем в С и в С++
получаем два разных результата !!!
Почему ????
ValK wrote:
> получаем два разных результата !!!
>
> Почему ????
Потому что это UB, т.е. работает так, как бог на душу положит. А как по-твоему должно быть и почему?
Posted via RSDN NNTP Server 2.0
Здравствуйте, ValK, Вы писали:
VK>Забавно ...
VK>VK>#include <stdio.h>
VK>int main()
VK>{
VK> const int a = 5;
VK> const int* p = &a;
VK> int* p1 = (int*)p;
VK> (*p1)--;//UB - нельзя изменять "настоящие" константы
VK> printf(
"a = %d\n*p1 = %d\n",a, *p1);
VK>
return 0;
VK>}
VK>
VK>компилируем в С и в С++
VK>получаем два разных результата !!!
VK>Почему ????
Здравствуйте, ValK, Вы писали:
VK>а что такое UB ?????
Unexpected Bayan

(потому что много-много раз уже обсуждалось, и поиск рулит).
Неопределённое поведение (undefined behavior).
Конкретно в твоём случае компилятор (как сишный, так и плюсовый) может подставлять в printf(.... a ....) как содержимое памяти (на которую указывает p), так и числовой литерал.
А его решение зависит от опций (в частности, режима оптимизации).
... << RSDN@Home 1.2.0 alpha rev. 655>>