2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: О константах и перилах
Сообщение25.12.2018, 10:48 
Аватара пользователя
Sender в сообщении #1363582 писал(а):
Из тела программы вы не сможете обратиться к ним как к обычным константам.

Поясните, пожалуйста.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 12:57 
FomaNeverov в сообщении #1363328 писал(а):
Независимо от языка

не получится. Так как сейчас языков, в которых отсутствуют переменные, становится все больше, и они все ширше внедряются в различные области народного хозяйства.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 13:22 
.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 13:38 
Munin в сообщении #1363587 писал(а):
Поясните, пожалуйста.

Ну вот, к примеру, объявляете вы переменную в коде таким образом:
Используется синтаксис C
int i=1;

При старте программы переменной "i" присваивается значение "1". Полагаю, в большинстве случаев этим занимается операционная система, под управлением которой запускается данная программа. В случае же отсутствия таковой сама программа должна содержать небольшой загрузчик, выполняющий эту функцию. Разумеется, детали реализации непосредственно зависят от архитектуры используемого процессора. В любом случае происходит отображение области инициализированных данных, содержащихся в бинарном образе программы, хранящемся на информационном носителе, в область оперативной памяти, отведённую данной программе под инициализированные переменные. Во встраиваемых системах, где зачастую вся доступная память, в том числе и долговременная, организована в виде единого адресного пространства, используются понятия загрузочного адреса, откуда берутся данные для инициализации, и исполнительного адреса в оперативной памяти, куда они кладутся на этапе инициализации (об этом можно почитать, например, здесь http://www.keil.com/support/man/docs/armlink/armlink_pge1362065902090.htm. Вот здесь можно посмотреть на описание скриптов линковщика, в частности, позволяющих управлять размещением секций:
https://www.math.utah.edu/docs/info/ld_toc.html#SEC4). После запуска программы никто не мешает изменить значение переменной i с единицы на любое другое, и вы не сможете доступиться к единичке (которая, разумеется, никуда не делась из бинарного образа программы, хранящегося в долговременной памяти) по той причине, что её может попросту не быть в памяти процесса.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 14:45 
Аватара пользователя
Sender в сообщении #1363619 писал(а):
При старте программы переменной "i" присваивается значение "1".
Смотря где эта строчка. Если i глобальная (или была бы статической) - она будет храниться в data сегменте, и инициализируется операционной системой.
Если i локальная, то она будет храниться на стеке и, естественно, инициализировать ее будет пользовательский код в момент прохождения через это объявление.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 14:58 
Да, это важная оговорка. Подразумевалась глобальная, конечно.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:08 
Аватара пользователя
Sender в сообщении #1363582 писал(а):
Это смотря какой смысл вы вкладываете в это слово.

Обычный смысл: данные, которые при выполнении программы не изменяются.

Sender в сообщении #1363582 писал(а):
Из тела программы вы не сможете обратиться к ним как к обычным константам.

Ну и что? От этого константа не перестала быть константой.

Вопрос для уточнения, в Вашем примере в сообщении выше:
Используется синтаксис C
int i=1;

Что стоит справа от символа "="?

(Оффтоп)

На мой взгляд, самая обычная константа, заданная литералом

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:33 
Аватара пользователя
Sender
Вы написали кучу technical stuff, который я и так знаю. Про инициализированные переменные. И даже с ошибками, которые вам mihaild поправил.

Но про константы вы не написали ни слова. То есть, не ответили на мой вопрос. Жду ответа, поясните вашу первоначальную фразу.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:38 
Munin, прошу прощения, в таком случае раскройте ваш вопрос подробнее. Боюсь, мне он непонятен в его текущей формулировке.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:49 
Аватара пользователя
Что непонятного? Я прошу пояснить фразу
    Sender в сообщении #1363582 писал(а):
    Из тела программы вы не сможете обратиться к ним как к обычным константам.
Что значит "как к обычным константам", в чём отличие? Что вы подразумеваете под "обычными константами"?
Почему не смогу обратиться? Как к переменным-то могу, не вижу никаких проблем.
Какую роль играет уточнение "из тела программы"?

Если я вспоминаю константы, например, C++, то от вашего сообщения впадаю в ступор. Хочу, чтобы вы разъяснили мне досель неведомые аспекты языка, линковки и времени исполнения.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:52 
А ещё бывают и такие "константы", как строка в операторе printf("Value=%d\n", 7) - вроде и константа, но без слова const, и к которой никак не обратиться (вне printf). :-)

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:54 
Аватара пользователя
Извините, что влезаю.
Munin в сообщении #1363652 писал(а):
Как к переменным-то могу, не вижу никаких проблем.

Один из способов задания констант - это константы, заданные литералом.
И к ним Вы действительно не можете обратиться, как к переменным, и получить их значение.

-- 25.12.2018, 15:56 --

Dmitriy40 в сообщении #1363655 писал(а):
А ещё бывают и такие "константы", как строка в операторе printf("Value=%d\n", 7) - вроде и константа, но без слова const, и к которой никак не обратиться (вне printf).

ИМХО, зря слово константы в кавычках.
Второй операнд printf - тоже константа, кстати.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:58 
Аватара пользователя
Dmitriy40
Вот это как раз называется "литерал", а не "константа".

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 15:58 
EUgeneUS в сообщении #1363657 писал(а):
ИМХО, зря слово константы в кавычках.
Исключительно чтобы не ввязываться в определение что такое константы. Да и то вон не получилось.

Munin
Насколько я помню теорию, литерал представляет собой подмножество (один из видов) константного выражения, для краткости именуемого константой.

 
 
 
 Re: О константах и перилах
Сообщение25.12.2018, 16:02 
Аватара пользователя
Munin в сообщении #1363660 писал(а):
Вот это как раз называется "литерал", а не "константа".

Одно в другое включается

Цитата:
Литералы представляют собой константы, включаемые непосредственно в текст программы


(Оффтоп)

Dmitriy40 в сообщении #1363661 писал(а):
Исключительно чтобы не ввязываться в определение что такое константы.

Видимо, придется. Даже не знаю, :D или :-(


-- 25.12.2018, 16:05 --

Цитата:
Literals or constants are the values we write in a conventional form whose value is obvious. In contrast to variables, literals (123, 4.3, "hi") do not change in value. These are also called explicit constants or manifest constants. I have also seen these called pure constants, but I am not sure if that terminology is agreed on.


Из статьи про историю литералов от древних веков до наших дней

 
 
 [ Сообщений: 87 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group