Форум программистов, компьютерный форум CyberForum.ru

Компилятор влияет на результат!!! - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Chainyk
 Аватар для Chainyk
15 / 15 / 1
Регистрация: 24.08.2010
Сообщений: 94
03.12.2010, 23:34     Компилятор влияет на результат!!! #1
Есть такая программа:
C++
1
2
3
4
5
6
7
int _tmain(int argc, _TCHAR* argv[])
{
        const long l = 10;
        *((long*)&l) = 200;
        printf ("%d", l);
        return 0;
}
По умолчанию компилируеться как С++ и выводит 10, но когда правой кнопкой кликнуть по проекту и изменить в свойствах настройки компиляции как чистый С, тогда выводит 200. Подскажите почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
05.12.2010, 15:21     Компилятор влияет на результат!!! #21
Evg, и я о том же
все зависит от воли компилятора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
05.12.2010, 15:26     Компилятор влияет на результат!!! #22
Цитата Сообщение от alex_x_x Посмотреть сообщение
все зависит от воли компилятора
Так с этим вроде бы никто и не спорил
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
05.12.2010, 16:02     Компилятор влияет на результат!!! #23
Так значит, то что константы записываются в таблицу имен при компиляции (т.е. память для них не выделяется) это всего навсего решение компилятора? Просто в "Философия С++" написано так, что я подумал это подразумевается стандартом.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
05.12.2010, 16:13     Компилятор влияет на результат!!! #24
Цитата Сообщение от Kastaneda Посмотреть сообщение
Так значит, то что константы записываются в таблицу имен при компиляции (т.е. память для них не выделяется) это всего навсего решение компилятора? Просто в "Философия С++" написано так, что я подумал это подразумевается стандартом.
В данном примере компилятору ничего не остаётся, как завести переменную. Точно так же, если глобальная переменная НЕ static, то компилятор не имеет права её не создавать (потому как к ней могут быть обращения в других модулях)

C
1
2
const int a = 10;
const int *p = &a;
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
05.12.2010, 16:24     Компилятор влияет на результат!!! #25
Т.е. если переменная объявлена как const, то место под нее выделяется лишь по необходимости. Если такой необходимости нет, то компилятор будет с ней работать как с define'ом. Так?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
05.12.2010, 16:25     Компилятор влияет на результат!!! #26
Цитата Сообщение от Kastaneda Посмотреть сообщение
то компилятор будет с ней работать как с define'ом
что значит как с дефайном?
есть вариант, что на уровне команд ассма вместо адреса памяти будет напрямую подставлено значение
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
05.12.2010, 16:27     Компилятор влияет на результат!!! #27
Цитата Сообщение от alex_x_x Посмотреть сообщение
есть вариант, что на уровне команд ассма вместо адреса памяти будет напрямую подставлено значение
Об этом и речь.


Цитата Сообщение от alex_x_x Посмотреть сообщение
что значит как с дефайном?
Значит не как с :
C++
1
const int a=5;
а как с:
C++
1
#define a 5
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2010, 16:39     Компилятор влияет на результат!!!
Еще ссылки по теме:

Родительский класс неявно влияет на значение переменной наследника C++
Параметр конструктора класса нигде не задействован, но его отсутствие влияет на компиляцию, почему так? C++
C++ Локальная переменная влияет на отображение глобальной, что делать?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
05.12.2010, 16:39     Компилятор влияет на результат!!! #28
Цитата Сообщение от Kastaneda Посмотреть сообщение
Т.е. если переменная объявлена как const, то место под нее выделяется лишь по необходимости. Если такой необходимости нет, то компилятор будет с ней работать как с define'ом. Так?
Грубо говоря, да. Но в этом отношении компилятор Си ничем не отличается от компилятора Си++. Различие между ними состоит в том, что в первом необязательно таскать за собой значение в процессе разбора текста, а во втором - обязательно. А потому и технически работа с const'ами в компиляторах Си и Си++ реализована по разному
Yandex
Объявления
05.12.2010, 16:39     Компилятор влияет на результат!!!
Ответ Создать тему
Опции темы

Текущее время: 11:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru