Файл: Понятие переменной в программировании. Виды и типы переменных.pdf
Добавлен: 06.04.2023
Просмотров: 175
Скачиваний: 2
Зачастую, используются специальности определенных видов процессоров. Всем знакомый пример низкоуровневого языка – это язык, на ассемблере, но более правильно будет говорить о целой группе таких языков. Так же для одного процессора разработаны разные виды ассемблера. Они будут одинаковы в машинных командах, но различны в наборе новых функций. Еще к таким языкам, относятся CIL, применяемый в платформе Microsoft.
Во многих офисных продуктах и в графических программах, во время обработки макроса на автомате, проходит назначенная для каждого из макросов цепочку действий. Создается интерфейс для ввода новых и переделывания ранних макросов. Также созданы текстовые редакторы, которые могут работать с макросами, например, Notepad++.
Во время использования макросов, можно во много раз преумножить полезность работы над программой. Так же кроме работы набора внутренних задач, макрос дает возможность обрабатывать внешние файлы, передавать разновидные данные с помощью сети интернет, читать и менять параметры операционной системы. Чаще всего записывание действий пользователя с помощью макроса дает пользователю код, который в обязательном порядке нужно доработать. Но, даже этот макрос очень сильно уменьшает то время, которое требуется для выполнения долгих и легких задач.
В таких языках как ассемблер и еще в некоторых, макрос - это символьное имя, которое заменяется во время обработки процессором цепочку программных задач.
Для каждой программы, выполняющей интерпретацию создан уникальный синтаксис объявления и вызова макросов. Он имеет свойство «разворачиваться» во все возможные последовательности задач во время каждого вызова, но это зависит от тех разветвлений внутри макроса которые сработали, а также перенесенных в него аргументов.
В языке Лисп[14], благодаря хорошо развитой макросистеме, макропрограммирование, дает возможность разнообразить этот язык совершенно новыми для него функциями. Так получается, что макросы помогают оператору распознать предметно-ориентированный язык как раз для задачи решаемой в данный момент времени и процессор для него. Процессор в этом случае имеет смысл программы, которая создает типы данных другого языка на его языке. При помощи такого программирования появляется возможность запустить работу компилятора. Вместе с языком создатель прошёл полный процесс фундаментальной стандартизации, чтобы для использования военного дела и промышленности, после чего создался диалект Common Lisp, затем поставленный в стандарт ANSI. Он создан для большого количества платформ. [3 c.188]
Этот язык программирования, используется и как средство обычного промышленного программирования, от встроенных скриптов до веб-приложений массового использования, хотя популярным его назвать нельзя.
Лисп является одним из старейших, которые работают в данный момент высокоуровневых языков, помимо этого он самый первый, кто сохранился для использования языков, которые умеют автоуправление и самостоятельное удаление ненужных файлов.
Он активирует рабочую систему видов. Функциональность языка будет с самого начала, так же содержит вероятность начиная уже с начальных вариаций имеет черты императивности, к тому же, имеет все способности символьной обработки, дает возможность реализовать объектно-ориентированность; примером можно назвать платформу CLOS.
Так же служит языком системного программирования для так Лисп-машин, которые производились в 1980-е годы.
Тип char
char – это самый экономичный тип. char может быть знаковым и не использовать их вовсе. Обозначается, как "signed char" и "unsigned char", соответственно. Знаковый тип должен содержать значения от -128 до +127. Без знаковый - от 0 до 255. Для переменной char выделяют 1 байт памяти.
Основные слова signed и unsigned показывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если показано основное слово unsigned, то нулевой бит указывается как часть числа, в протвном случае нулевой бит будет знаковым.
Тип int
Цельная величина int может быть shоrt или lоng .
Основное слово shоrt ставится после основных слов signed или unsigned. Таким образом, имеют различие такие типы, как: signed shоrt int, unsigned shоrt int, signed lоng int, unsigned lоng int.
Переменная типа signed shоrt int может принять значение от -32768 до +32767, unsigned shоrt int (без знаковая короткая целая) - от 0 до 65535. Для каждой из них выделяется по два байта памяти (16 бит).
При объявлении переменной signed shоrt int основные слова signed и shоrt могут быть убраны, и данная переменная может быть объявлена, как int. Можно допустить и объявление этого типа основным словом shоrt.
Переменная unsigned shоrt int может быть объявлена как unsigned int или unsigned shоrt.
Для каждой величины signed lоng int или unsigned lоng int выделяется 4 байта памяти. Значения переменных данного типа будут находиться в интервалах от -2147483648 до 2147483647 и от 0 до 4294967295.
По типу переменных, существуют такие как: lоng lоng int, для них выделяется 8 байт памяти. Они могут быть как знаковыми, так и без знаковыми. Для знакового типа разница значений находится от -9223372036854775808 до 9223372036854775807, для без знакового - от 0 до 18446744073709551615. Знаковый тип может быть объявлен и просто двумя ключевыми словами lоng lоng.
Простые переменные не имеют внутренней структуры, которая доступна для адресации. Заключительное дополнение важно из-за, что для компилятора или процессора переменная может быть как угодно сложной, но определенная система программирования скрывает от пользователя свое внутреннее строение, давая возможность ссылаться только в целом.
Сложные переменные программист создаёт для хранения данных, которые имеют внутреннюю структуру. То есть, появляется возможность обратиться к любому элементу.
Самый характерный пример сложных типов является массив однотипных элементов и запись с элементами разного типа
Следует подчеркнуть, что относительность данного деления: в разных программах одинаковая переменная может иметь разную структуру.
Например, компилятор разделяет в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная - одна ячейка памяти, сохраняющая вещественное число.
1.2 Локальные и глобальные переменные. Области видимости
По области видимости различают: локальные и глобальные переменные. Первые, разрешаются только назначенной подпрограмме, вторые - полностью всей программе. С разрастанием модульного и объектного программирования, создались ещё и общие переменные (открытые для заданных уровней иерархии подпрограмм). Область видимости задаётся классном памяти. Ограничение видимости может быть сделана путём проставления пространств имен.
Переменная может принадлежать только одному классу памяти, добиться этого можно достаточно легко, нужно всего лишь использовать нужное ключевое слово и поставить его до типа переменной.
Auto - это автоматическая переменная. Они создаются только непосредственно перед входом в функцию и удаляются только при выходе. Их можно распознать исключительно внутри функции, в которых они являются определенными.
Static - это статическая переменная. Если static находится внутри функции. Такие переменные используют внутреннюю область видимости, но время жизни постоянное. Так же, static находящийся не в функции будет иметь отличающиеся значение.
Extern - это внешняя переменная. Они имеют доступ абсолютно везде, где могут быть описаны, и представлены. Если использовать ключевое слово extern, то появляется возможность использовать функции внешнюю переменную и даже в том случае, если она определяется с течением времени в данном или каком-либо еще файле. Именно на шаге компоновки проходит связывание с адресом для этих переменных.
Register – это регистровая переменная. Она нужна для подсказывания компилятору переносить много используемую переменную в регистры данного процессора, чтобы приобрести программе большую скорость. [4 c.238]
Если класс памяти все же не будет указан, то начнут действовать эти настройки:
локальными считаются только те переменные, которые будут описаны только внутри функции.
внешними считаются только те переменные, которые будут вне всяких функций.
Статическая переменная, описанная вне любой функции, становится внешней статической. Разница между внешней переменной и внешней статической переменной заключается в области их действия. Обычная внешняя переменная может использоваться функциями в любом файле, а внешняя статическая переменная может использоваться только функциями того же самого файла, причем после определения переменной.
Ограничение зоны видимости[15] создали для того чтобы использовать общие имена переменных (что выгодно, когда в различных подпрограммах от переменных требуются похожие функции), так и для сохранения от ошибок, вызванных из-за неправомерного использования переменных (только, для этого программист вынужден обладать и использовать подходящую логику при структуризации данных).
Область видимости в программировании - является частью программы, в рамках которой определитель, названный как имя одной программной сущности, остаётся объединенным с данной сущностью, то есть создает возможность, с помощью себя обратиться к ней. Бывает, что идентификатор объекта «виден» в каком-то одном месте программы, если в этом месте с помощью него можно обратиться к этому объекту. За границами области видимости этот самый определитель возможно будет связан с новой переменной или функцией, или будет свободным (не соединенным ни с какой из них). Область видимости может, но как правило не обязана повторяться с границей существования объекта, с которым связано имя.
Соединение идентификатора в некоторых языках программирования - процесс выяснения программного объекта, вход к которому позволяет идентификатору в данном месте программы и в определенное время её выполнения. Данное понятие похоже на область видимости, но возможно более комфортно при оценивании определенных вариантов выполнения программ.
1.3 Статические и динамические переменные
Адрес поименованной ячейки памяти также может определяться как на этапе компиляции, так и во время выполнения программы. По времени создания переменные бывают статическими[16] и динамическими[17]. Первые создаются в момент запуска программы или подпрограммы, а вторые создаются в процессе выполнения программы.
Статическими типами данных чаще всего пользуются в тех языках программирования, в которых переменная, параметр сопутствующей программы и обратное значение функции налаживает связь с этим типом, в тот момент, когда его объявляют и больше не может подвергаться изменениям. Они обладают следующими преимуществами:
- Статические типы указывают на то, что в работе будет задействован самый простой код. Из этого следует вывод, что они подходят для языков, которые предоставляют исполняемые файлы операционной системы и компилируемых байт-кодов.
- Они позволяют избежать большое количество ошибок уже в самом начале, на этапе компиляции и благодаря этой типизации можно написать быстрый код.
- Если выполняемый проект будет сложным и масштабным, эта типизация откроет большее преимущество и наоборот.
Так же в статической типизации данных есть ряд недостатков, которые остро выделяются во время работы и выполнения определенных условий задачи, чтобы можно было предугадать эти минусы, рассмотрим их.
Те языки, в которых плохо проработана вычислительная основа, получаются достаточно растянутыми и каждой переменной приходится ставить тип. В небольшом количестве языков присутствует автоматическое проставление типа, но это обычно приводит с малозаметных ошибок. При использовании внешних источников, возможны осложнения в работе.
Динамическими типами данных чаще всего пользуются в тех языках программирования, где переменная объединяется с типом в тот момент, когда присваивается значение, но никак не когда объявляется переменная. Следуя из этого одна и так же переменная, в разных местах, имеет свойство принимать значение отличающихся типов.
В ряде языков с плохой динамической типизацией нависла угроза сравнения величин.
Динамическая адресация нужна только тогда, когда количество поступающих на хранение данных заранее точно не известно. Такие данные размещают в специальных динамических структурах, тип которой выбирается в соответствии со спецификой задачи и с возможностями выбранной системы программирования. Это может быть стек[18], куча[19], очередь и т.п. Даже файл, в том смысле, который заложил Н. Вирт [20]в Паскаль, является динамической структурой.