LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Наблюдаемый эффект, когда печатается только «B», идет не от языка, а от оптимизатора

Какая глупость! Не надо путать людей. Оптимизатор исходит из правил языка, именно по ним он оптимизирует. Если бы оптимизатор делал это по своему усмотрению, не опираясь на язык, то можно было бы сказать что это ошибка, и уже бежать с багрепортом в gcc.

Более того, я могу найти такой багрепорт, где разработчики gcc говорят что это поведение следует стандарту, и оно наоборот правильное, а то что получается без оптимизаций, платформокомпиляторозависимое.

В языке, адреса это обычные числа

Я уже показал что это не так.

номер байта в адресном пространстве процессора

Даже на x86 это не является правдой.

Кстати, в С указатели на функции, и указатели на данные даже не кастуются, нельзя преобразовать указатель на функцию в (void*), потому что стандартом предусмотрено, что на некой платформе, к примеру, код может быть в одном сегменте, а данные в другом. И для функции может потребоваться два числа. Поверх этого еще другие правила. Ну это все ты можешь прочесть, а не выдумывать лично какие то объяснения с байтами...

Исходная версия MOPKOBKA, :

Наблюдаемый эффект, когда печатается только «B», идет не от языка, а от оптимизатора

Какая глупость! Не надо путать людей. Оптимизатор исходит из правил языка, именно по ним он оптимизирует. Если бы оптимизатор делал это по своему усмотрению, не опираясь на язык, то можно было бы сказать что это ошибка, и уже бежать с багрепортом в gcc.

Более того, я могу найти такой багрепорт, где разработчики gcc говорят что это поведение следует стандарту, и оно наоборот правильное, а то что получается без оптимизаций, платформокомпиляторозависимое.

В языке, адреса это обычные числа

Я уже показал что это не так.

номер байта в адресном пространстве процессора

Даже на x86 это не является правдой.

Кстати, в С указатели на функции, и указатели на данные даже не кастуются, нельзя преобразовать указатель на функцию в (void*), потому что стандартом предусмотрено, что на некой платформе, к примеру, код может быть в одном сегменте, а данные в другом. И для функции может потребоваться два числа.