Const в C и С++
От: ValK Россия  
Дата: 21.09.06 13:01
Оценка:
Забавно ...


#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;
}


компилируем в С и в С++

получаем два разных результата !!!

Почему ????
Re: Const в C и С++
От: kan Великобритания  
Дата: 21.09.06 13:09
Оценка:
ValK wrote:

> получаем два разных результата !!!

>
> Почему ????
Потому что это UB, т.е. работает так, как бог на душу положит. А как по-твоему должно быть и почему?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Const в C и С++
От: Lorenzo_LAMAS  
Дата: 21.09.06 13:10
Оценка:
Потому, что UB
Of course, the code must be complete enough to compile and link.
Re: Const в C и С++
От: Константин Л.  
Дата: 21.09.06 13:10
Оценка:
Здравствуйте, 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>Почему ????
Re[2]: Const в C и С++
От: ValK Россия  
Дата: 21.09.06 13:15
Оценка: :)
VK>> (*p1)--;//UB — нельзя изменять "настоящие" константы

Ну дык это понятно ...
но все равно забавно ...

а что такое UB ?????
Re[3]: Const в C и С++
От: Кодт Россия  
Дата: 21.09.06 13:25
Оценка: 1 (1) :))) :))) :)
Здравствуйте, ValK, Вы писали:

VK>а что такое UB ?????


Unexpected Bayan (потому что много-много раз уже обсуждалось, и поиск рулит).
Неопределённое поведение (undefined behavior).

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