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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Chainyk
15 / 15 / 1
Регистрация: 24.08.2010
Сообщений: 94
#1

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

03.12.2010, 23:34. Просмотров 1576. Ответов 27
Метки нет (Все метки)

Есть такая программа:
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. Подскажите почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2010, 23:34     Компилятор влияет на результат!!!
Посмотрите здесь:

Влияет ли на производительность - C++
Влияет ли на производительность определение(тоесть реализация) функций внутри класса, а также использование вложенных классов?

Задачу создать 2-мя способами:1) передавать результат работы подпрограммы через результат, возвращаемый функци - C++
Здравствуйте, дорогие форумчане! Будьте добры, помогите не совсем опытному юзеру разобраться с небольшим непониманием : дано условие (см....

На что влияет разрядность библиотеки? - C++
Здравствуйте, я переустановил WIN, до этого писал первую программу с расчетом на то, что она пойдет как можно большего числа пользователей,...

Влияет ли конструктор на выделение памяти под объект? - C++
Прочёл в книге Р.Лафоре "Объектно-ориентированное программирование в С++:" Подобно конструкторам, деструкторы не возвращают значения и...

На что влияет расположение строчки using namespace std; ? - C++
В учебнике вывод предлагают делать так: 1-ый способ: #include <iostream> int main() { std::cout << "Hello World!" <<...

Родительский класс неявно влияет на значение переменной наследника - C++
Написал элементарную программу на тему наследования: есть родительский класс, у которого есть 2 наследника. У наследников есть свои...

Локальная переменная влияет на отображение глобальной, что делать? - C++
#include <iostream> void myFunction(); int x=5, y=7; int main() { using std::cout;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
05.12.2010, 15:21     Компилятор влияет на результат!!! #21
Evg, и я о том же
все зависит от воли компилятора
Evg
Эксперт CАвтор FAQ
17468 / 5706 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
05.12.2010, 15:26     Компилятор влияет на результат!!! #22
Цитата Сообщение от alex_x_x Посмотреть сообщение
все зависит от воли компилятора
Так с этим вроде бы никто и не спорил
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
05.12.2010, 16:02     Компилятор влияет на результат!!! #23
Так значит, то что константы записываются в таблицу имен при компиляции (т.е. память для них не выделяется) это всего навсего решение компилятора? Просто в "Философия С++" написано так, что я подумал это подразумевается стандартом.
Evg
Эксперт CАвтор FAQ
17468 / 5706 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
05.12.2010, 16:13     Компилятор влияет на результат!!! #24
Цитата Сообщение от Kastaneda Посмотреть сообщение
Так значит, то что константы записываются в таблицу имен при компиляции (т.е. память для них не выделяется) это всего навсего решение компилятора? Просто в "Философия С++" написано так, что я подумал это подразумевается стандартом.
В данном примере компилятору ничего не остаётся, как завести переменную. Точно так же, если глобальная переменная НЕ static, то компилятор не имеет права её не создавать (потому как к ней могут быть обращения в других модулях)

C
1
2
const int a = 10;
const int *p = &a;
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
05.12.2010, 16:24     Компилятор влияет на результат!!! #25
Т.е. если переменная объявлена как const, то место под нее выделяется лишь по необходимости. Если такой необходимости нет, то компилятор будет с ней работать как с define'ом. Так?
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
05.12.2010, 16:25     Компилятор влияет на результат!!! #26
Цитата Сообщение от Kastaneda Посмотреть сообщение
то компилятор будет с ней работать как с define'ом
что значит как с дефайном?
есть вариант, что на уровне команд ассма вместо адреса памяти будет напрямую подставлено значение
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 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     Компилятор влияет на результат!!!
Еще ссылки по теме:

Влияет ли манипуляторы hex,oct,dec на массив символов? - C++
Влияет ли манипуляторы hex,oct,dec на массив символов? есть unsigned char str; Ввожу и так cin >> hex >> str; и так cin >> str; ...

Влияет ли невыполняющееся условие на скорость выполнения строчки с этим условием? - C++
Здравия всем! Мне тут стало любопытно. Есть у меня, к примеру, такой код: var = 0; if (var = 1) {exit(0)} if (var = 2)...

Как влияет inline и обертка(#ifndef #define #endif) .h файла на компоновщик. - C++
Есть файл Point.h: #ifndef POINT_GUARD #define POINT_GUARD ...

Параметр конструктора класса нигде не задействован, но его отсутствие влияет на компиляцию, почему так? - C++
#include <string> #include <vector> using namespace std; ////////////////////////////////////////// class kl { ...

Компилятор - C++
В какой программе вы бы посоветовали работать: Visial C++; MinGW Developer Studio; и т.д. И как в ней скомпилировать программу?...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru