Green-sell.info

Новые технологии
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Что означает в программировании

Что означает в программировании






! — восклицательный знак — помимо создания восклицательных предложений, данный символ используется в шаблонах, где знак обозначает один символ, например, “Rab!.txt” — обозначает файл с именем, в котором находятся символы “Rab”, затем какой-либо символ и далее “.txt”. То есть, могут быть файлы “Raba.txt”, “Rab1.txt”, “Rab9.txt”, “Rab0.txt” и т. д., но не “Rab21.txt”, так как здесь имеется два символа (21) вместо восклицательного знака.

!= — не равно — в некоторых языках программирования используется в логических выражениях и означает не равно.

# — символ номера — используется для определения шаблона, в которых находятся числа. Например, ##.### означает, что в данном месте будет выведено число, которое имеет две цифры до запятой и три цифры после.

$ — символ доллара — 1. стандартное использование данного символа заключается в определении денежных сумм, выраженных в долларах, например, $1 000 означает тысячу долларов. 2. используется в некоторых языках программирования, например, в языке Бейсик для обозначения переменных, например, I1$ — имя переменной.

& — амперсант — 1. данный символ обозначает соединительный союз “и”, 2. логическое “ИЛИ” в некоторых языках программирования.

() — скобки — данные символы часто встречаются в математических формулах для обозначения первенства операций. Например, 2*3+1=7 и 2*(3+1)=8 дают разный результат, так как при отсутствии скобок вначале выполняются операции умножения или деления, а потом операции сложения и вычитания.

* — звездочка — 1. часто используется как символ умножения, 2. в шаблонах обозначает, что на данном месте может быть любое количество определенных символов, например, *.* обозначает имя файла, в котором до и после точки может находиться любое символьное название.

. — точка — помимо знака конца предложения означает также, разделение чего-либо, например, целой части числа от дробной (например, 3.55); разделение имени файла от его расширения в системе ДОС (например, Rab.txt); разделение элементов в адресе при работе в сети, например, www.aaa.com.

: — двоеточие — используется для определения логического устройства, например, А:, С:.

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

@ — знак “при” — 1. используется в командных файлах как комментарий. 2. используется в имени почтового домена.

[ ] — квадратные скобки — при описании синтаксиса команд обозначают необязательный параметр, например, запись Dir_[/P] обозначает, что можно использовать команду Dir без параметров и с параметром /P (Dir_/P).

обратная косая черта — используется для разделения имен каталогов при описании их имени, например, WindowsTmp.

^ — крыша — обозначает нажатие на клавишу Ctrl, например ^С обозначает одновременное нажатие на две клавиши: Ctrl и С (в книге Ctrl+С). Часто, в некоторых языках программирования обозначает символ возведения в степень. Например, 2^3-8. Кроме того, является специальным знаком над символом в некоторых мировых языках (циркумфлекс).

_ — подчеркивание — часто используется в именах файлов в системе ДОС для разделения нескольких слов, где нельзя использовать пробел, например, No_print. Используется также в языках программирования в названии переменных для тех же целей.

< >— фигурные скобки — при описании синтаксиса команд обозначают, что должен быть выбран один из параметров, которые находятся внутри скобок, например, запись обозначает, что должно быть выбрано одно из значений: “ON” или “OFF”.

| — вертикальная черта — используется при описании синтаксиса команды как символ обозначающий “или”, например, запись обозначает, что должно быть выбрано одно из значений: “ON” или “OFF”.

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

True-False (отрицание истины обозначает ложь).

+ — плюс — помимо операции сложения, знак плюс обозначает также соединение файлов в системе ДОС, например, Rab.txt+Rab2.txt — означает, что два файла будут рассматриваться как один, то есть, за концом одного файла будет находиться начало другого.

<> — не равно — в некоторых языках программирования обозначает не равно.

> — знак больше — помимо своего значения больше, обозначает также символ перенаправления вывода в системе ДОС. Например, >Rab.txt означает, что вывод будет происходить не на экран монитора, а в файл с именем Rab.txt.

0.28 micron technology — 0.28 — микронная технология — технология производства интегральных микросхем, где компоненты имеют размер 0.28 микрон. Чем меньше технология, тем больше компонент можно поместить на микросхеме и тем меньше требуется напряжения для их работы, следовательно, меньше выделяется тепла и требуется меньшее охлаждение. В настоящее время уже произошел переход к 0.35-микронной технологии и происходит переход к 0.28-микронной технологии.

0.35 micron technology — 0.35 — микронная технология — технология производства интегральных микросхем, где компоненты имеют размер 0.35 микрон.

0.5 micron technology — 0.5 — микронная технология — технология производства интегральных микросхем, где компоненты имеют размер 0.5 микрон.

101-key keyboard — 101-клавишная клавиатура — наиболее распространенный вид клавиатуры в настоящее время.

10 Basexx – варианты реализации сетей Ethernet со скоростью передачи данных 10 мб/сек. Может быть хх — F , T , 2, 5, означающие разные варианты реализации сети с разным расстоянием между станциями от 90 метров и выше. Варианты 100 Basexx обозначают сеть со скоростью передачи данных до 100 мб/сек, где хх — разные варианты реализации, то есть первые цифры обозначают скорость передачи, а хх — модификация.

14-inch monitor — 14 дюймовый монитор — монитор, который имеет размер экрана по диагонали 14 дюймов. На самом деле видимая область дисплея с Электронно-Лучевой Трубкой (ЭЛТ), на которую выводится информация несколько меньше 14 дюймов, точнее чуть больше 13 дюймов. В тоже время для жидкокристаллического монитора указывается, как правило, размер выводимой области экрана, то есть, при указании 14 дюймов он будет соответствовать 15 дюймовому экрану с ЭЛТ трубкой.

15-inch monitor — 15 дюймовый монитор — монитор, который имеет размер экрана по диагонали 15 дюймов. См. также 14-inch monitor.

16-bit mashine — 16-разрядная машина — компьютер, центральный процессор которого обрабатывает информацию порциями по 16 бит (80286).

16-bit microprocessor — 16-разрядный микропроцессор — тоже, что и 16-bit mashine.

17-inch monitor — 17 дюймовый монитор — монитор, который имеет размер экрана по диагонали 17 дюймов. См. также 14-inch monitor.

21-inch monitor — 21 дюймовый монитор — монитор, который имеет размер экрана по диагонали 21 дюймов. Данный тип монитора используется часто для настольно-издательских систем. См. также 14-inch monitor.

286 — серия компьютеров с процессором 80286. —

3 1/2 inch disk — 3.5 дюймовый диск — гибкий диск, который имеет в диаметре размер 3.5 дюйма. В настоящее время наиболее распространенными являются диски емкостью 1.44 мегабайт. Существуют также менее распространенные 2.88 мегабайт и в перспективе выйдут более емкие диски.

32-bit mashine — 32-разрядная машина — компьютер, центральный процессор которого обрабатывает информацию порциями по 32 бит (80386).

32-bit microprocessor — 32-разрядный микропроцессор — тоже, что и 32-bit mashine.

32-bit operating system — 32 битная операционная система — операционная система, которая разработана специально для 32-битных процессоров. Система Windows 3.1 разработана для 16-битных процессоров, дальнейшие системы, начиная с Windows 95 работают уже как 32-битная система.

Читать еще:  Система программирования это

386 — серия компьютеров с процессором 80386. –-

3 COM – название одной из крупнейших компаний по производству компьютерного оборудования.

486 — серия компьютеров с процессором 80486. —

4x — четырехскоростной. Кроме того, имеются 8х, 12х, 16х, 32х и пр., где цифра обозначает кратность скорости, чем больше цифра, тем быстрее работает устройство (для CD-ROM) .

5 1/4-inch disk — 5.25 дюймовый диск — гибкий диск, который имеет в диаметре размер 5.25 дюйма. В настоящее время практически не используется. Имел распространение в начале 90х годах.

586 — серия компьютеров с процессором Pentium.

64-bit mashine — 64-разрядная машина — компьютер, центральный процессор которого обрабатывает информацию порциями по 64 бит, например, в серии Pentium.

64-bit microprocessor — 64-разрядный микропроцессор — тоже, что и 64-bit mashine.

68ххх — серия центральных процессоров фирмы Motorola, которые используются для компьютеров Макинтош.

8-bit mashine — 8-разрядная машина — компьютер, центральный процессор которого обрабатывает информацию порциями по 8 бит (8086).

8-bit microprocessor — 8-разрядный микропроцессор — тоже, что и 8-bit mashine.

80286 — первые компьютеры, имеющие одноименный процессор — 80286.

80287 — сопроцессор для процессора 80286.

80386 — компьютеры, имеющие одноименный процессор — 80386.

80386DX — компьютеры, имеющие одноименный процессор — 80386.

80386SX — компьютеры, имеющие одноименный процессор — 80386SX. Более дешевые и медленные, чем 80386. Фактически урезанный вариант 386-го процессора.

80387 — сопроцессор для процессора 80386.

80486 — компьютеры, имеющие одноименный процессор — 80486.

80486DX — компьютеры, имеющие одноименный процессор — 80486.

80486SX — компьютеры, имеющие одноименный процессор — 80486SX. Более дешевые и медленные, чем 80486. Фактически урезанный вариант 486-го процессора.

80487 — сопроцессор для процессора 80486.

8086 — первые компьютеры, имеющие одноименный процессор — 8086.

8087 — сопроцессор для процессора 8086.

84-key keyboard — 84-клавишная клавиатура — старый вид клавиатуры, который был разработан для компьютеров серии АТ.

Лекция 3. Операторы и выражения¶

Архитектура программы¶

  • символы
  • лексемы
  • операторы и выражения
  • функции
  • модули

Выражения и операторы¶

Операторы и выражения — запись действия в программе.

  • Программа строится из операторов.
  • Операторы включают в себя выражения.
  • Выражение представляет собой комбинацию операций и операндов.
  • Выражение имеет некоторое значение (которое можно сохранить в памяти), а оператор значения не имеет.
  • У оператора есть некоторый результат (побочный эффект), например повторение действия.

Понятие оператора¶

Существуют операторы преобразования данных и операторы управления работой программы.

Операции¶

Характеристики операций¶

  • Ассоциативность (левоассоциативные, правоассоциативные)
  • Количество аргументов (унарные, бинарные, тернарные)
  • Приоритет
  • Префиксная и постфиксная форма (для ++, — —)

Приоритет операций¶

Результат операций¶

В языке Си у операций могут быть следующие результаты:

  • Числовая константа, означающая результат присвоения, математического выражения, адрес ячейки памяти.
  • Числовая константа, означающая логическое значение (0 — ложь, 1 — истина).
  • Ссылка на область памяти.

В Си не имеется встроенного логического типа со значениями true и false, но любое ненулевое целое значение означает истину, а нулевоеложь.

Арифметические операции¶

Знак / всегда означает деление. Однако если с обеих сторон от этого знака стоят целые величины (константы, переменные или их комбинации), он означает целочисленное деление. Если в результате такого деления получается остаток, С++ его отбрасывает.

Знак % означает выделение остатка при целочисленном делении. Эта операция требует, чтобы с обеих сторон от ее знака стояли целые величины

Присваивание¶

Особенностью Си является возможность комбинирования операции присваивания с другими операциями, а также выполнение множественного присваивания.

Существуют два класса выражений:

l-value (левостороннее выражение. Может стоять слева от присваивания)

r-value (правостороннее выражение. Может стоять справа от присваивания)

Составное присваивание¶

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

Преобразование типов¶

В различных выражениях могут встречаться данные как одного, так и разных типов. Компилятор может выполнять операцию приведения типов по-умолчанию, действуя согласно простого правила: короткие типы приводятся к длинным. Если необходимо изменить стандартное преобразование, то вводят явное приведение типов.

Сравнение¶

Операции сравнения являются бинарными и используются для сравнения двух значений

В приведенном примере, если (a) равно (b) , строка Hello появляется на экране, иначе не появляется.

Значения операций¶

Инкремент и декремент¶

Данные операции могум использоваться в префиксной и постфиксной формах. основная разница — изменение приоритета.

будет эквивалентен следующему

будет эквивалентен следующему

  1. Постфиксная форма
  2. СНАЧАЛА переменная изменяется на 1;
  3. и только после этого используется в выражении.
  4. Префиксная форма
  5. старое значение переменной сохраняется для использования в дальнейшем выражении, в котором встретилась эта переменная;
  6. и только ПОСЛЕ этого ее значение СРАЗУ ЖЕ изменяется на 1.

Операции инкремента/декремента¶

Что можно сказать о следующей программе?

Ошибка компиляции: l-value required as left operand of assignment

Неопределенное поведение¶

Определение (см. Википедию)

Неопределённое поведение (англ. undefined behaviour) — свойство некоторых языков программирования (наиболее заметно в Си), программных библиотек и аппаратного обеспечения в определённых маргинальных ситуациях выдавать результат, зависящий от реализации компилятора (библиотеки, микросхемы) и случайных параметров

При его выполнении переменная i может принять значения 13 или 14 для C/C++, 13 для Java, PHP и C#, 12 при реализации на LISP.

Неопределенность в языке C/C++ связана с тем, что согласно стандартам С и С++ побочные эффекты (то есть инкремент в данном случае) могут быть применены в любой удобный для компилятора момент между двумя точками следования (см. раздел Дополнительная информация).

Операторы¶

Основные алгоритмические конструкции¶

Основная теорема структурного программирования

Программа для решения любой задачи может быть составлена из комбинации следования, ветвления и цикла (Бойм-Якопини, 1966).

  • следование
  • ветвление
  • цикл

Классификация операторов¶

  • простые
  • составные
  • прочие (оператор-выражение)

Оператор if¶

Оператор if

Примеры if¶

Несколько версий одной и той же программы

Удачные/неудачные конструкции¶

Удачные и неудачные конструкции¶

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

Если необходимо сравнить значение переменной с набором констант, то лучше отказаться от if в пользу switch

Сложные выражения¶

С позволяет конструировать очень сложные выражения. Эта сложность должна быть оправдана.

Оператор switch¶

Оператор switch

Вопрос: Чему будут равны значения переменных, если строка: babah!?

Оператор while¶

Операторы цикла¶

В Си существуют операторы с предусловием и постусловием. Особенность первых состоит в том, что условное выражение находится у них перед телом, так что возможно выполнить тело один раз, а возможно — ни разу. Циклы с постусловием обеспечивают выполнение тела хотя бы один раз, проверочное выражение находится у них после описания тела.

  • Циклы с предусловием: while(), for()
  • Циклы с постусловием: do..while()

Оператор while

Ошибки при организации while¶

В чем состоит ошибка?

Оператор do while¶

Оператор do while

Это цикл с постусловием. Тело цикла выполняется как минимум 1 раз

Оператор for¶

Оператор for

Оператор for¶

Операторы управления¶

  • goto — безусловный переход на метку.
  • return — возвращение из функции.
  • break — прерывание тела цикла и switch
  • continue — переход на следующую итерацию цикла.

Оператор goto усложняет отладку программы и сильно портит стиль разработчика (‘’спагетти-код’‘)!

Спагетти-код¶

Пример спагетти кода на языке BASIC:

Тоже самое, но без goto:

Оператор break¶

Назначение break — прерывать цикл или тело switch:

Читать еще:  В состав интегрированной системы программирования входят

Оператор continue¶

Дополнительная информация¶

Точка следования (англ. Sequence point) — в программировании любая точка программы, в которой гарантируется, что все побочные эффекты предыдущих вычислений уже проявились, а побочные эффекты последующих еще отсутствуют.

В C и C++ определены следующие точки следования:

  • Между вычислением левого и правого операндов в операторах && (логическом И), || (логическом ИЛИ) и операторах-запятых. Например, в выражении *p++ != 0 && *q++ != 0 все побочные эффекты левого операнда texbf <* p++ != 0> проявятся до начала каких либо действий в правом.
  • Между вычислением первого и второго или третьего операндов в операторе условия. В строке a = (*p++) ? (*p++) : 0 точка находится после первого операнда *p++, при выполнении второго p уже увеличена на 1.
  • В конце всего выражения. Эта категория включает в себя инструкции-выражения a=b;, выражения в инструкциях return, управляющие выражения в круглых скобках инструкций ветвления if или switch и циклов while или do-while и все три выражения в круглых скобках цикла for.
  • Перед входом в вызываемую функцию. Порядок, в котором вычисляются аргументы не определен, но эта точка следования гарантирует, что все ее побочные эффекты проявятся на момент входа в функцию. В выражении f(i++) + g(j++) + h(k++) каждая из трёх переменных: i, j и k, принимает новое значение перед входом в f, g и h соответственно. Однако, порядок вызова функций f(), g(), h() неопределён, следовательно неопределён и порядок инкремента i, j, k. Значения j и k в теле функции f оказываются неопределенными. Следует заметить, вызов функции нескольких аргументов f(a,b,c) не является случаем применения оператора-запятой и не определяет порядок вычисления значений аргументов.
  • При возврате из функции, на момент когда возвращаемое значение будет скопировано в вызывающий контекст.(Явно описана только в стандарте С++, в отличие от С.)
  • В объявлении с инициализацией на момент завершения вычисления инициализирующего значения, например, на момент завершения вычисления (1+i++) в int a = (1+i++);

Что означает в программировании

Сегодня говорим о том, что такое язык программирования.

Языки программирования (ЯП) похожи на языки человеческого общения, но устроены проще. Выучить язык программирования можно за несколько месяцев. Опытные программисты могут изучить новый язык за несколько недель. В мире уже более 8000 языков программирования. Нет такого консенсуса, как «лучший язык». Хотя есть языки, которые дают фундаментальные знания, С++ например. И есть отслеживание популярности языков, в частности, TIOBE Index.

Ядро из двух десятков наиболее популярных языков состоит из: Java, C, Python, C++, Visual Basic .NET, JavaScript, C#, PHP, SQL, Objective-C, Assembly language, MATLAB, Perl, Delphi/Object Pascal, R, Ruby, Visual Basic, Go, Groovy, Swift. Есть еще 2-3 десятка довольно широко используемых языков, таких как Scala, Lua, Fortran, COBOL, Lisp, Prolog, Rust, Kotlin, Eglang, Haskell и др. Со временем разработчик знает и сочетает несколько языков для разных задач и платформ.

У языков программирования есть авторы, правила, спецификации, стандарт конкретного языка и разные реализации / воплощения стандарта. Реализации языка влияют на то, как разработчики пользуются им.

Языки программирования – по сути, инструмент сторителлинга. У вас есть идея, «сюжет», и на языке программирования вы пишете структурированное «произведение», которое компьютер сможет считать, интерпретировать и выполнить. То есть «оживить» исходный код в виде программы, сайта, приложения и т. д., где доступен ряд действий. (Если образно, то напоминает придумывание сюжета, работу над архитектурой истории, написание добротного сценария без ляпов, овладение специальными инструментами для съемки, сам съемочный процесс, монтаж и демонстрацию кино, причем интерактивного.)

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

Язык программирования – это набор правил, которые определяют, как написанная компьютерная программа выглядит и что компьютер может сделать под ее управлением. Программа представляет собой код, написанный по правилам конкретного языка программирования. Код, из которого состоит программа, называют «исходный код».

Язык программирования – это средство общения человека и компьютера. При этом код на языке программирования пишется так, чтобы он был понятен человеку. Один из критериев хорошего кода – программист читает его и понимает, что это, для чего нужно и как будет работать.

Сегодня код, написанный на популярных языках программирования, для удобства выглядит как текст, состоящий из строк на английском языке. Для того чтобы исходный код смог прочитать и выполнить компьютер, он «переводится». Об этом Almamat Blog расскажет в другом выпуске IT-ликбеза.

В спецификациях языка прописаны его синтаксис и семантика. Каждый язык программирования имеет свой словарь/алфавит. Цепочки и последовательности символов образуют предложения, построенные по правилам языка программирования, – это грамматика. Синтаксическая структура языка служит для определения смысла написанного кода.

Семантика языка программирования – это начальное смысловое значение слов и конструкций языка. Семантика – это смысл кода, его назначение, то, что должно получиться в результате запуска написанного кода.

Синтаксис языка
программирования – это порядок слов, форма записи; правила построения сообщений, комбинирования символов и слов. Синтаксис ЯП проще, чем синтаксис человеческих языков общения.

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

Что означает «parsing» в программировании?

Главное меню » Статьи » Что означает «parsing» в программировании?

Определение синтаксического парсинга

Фактическое определение «синтаксического парсинга» в Викисловаре: «Разделить файл или другие входные данные на части, которые можно легко сохранить или ими манипулировать». Таким образом, мы разделяем строку на части, а затем распознаем части, чтобы преобразовать их в нечто более простое, чем строка.

Разбор целого числа

Примером может служить функция parseInt(). Для этого потребуется такой ввод, как «123», который будет строкой, состоящей из значений символов 1, 2 и 3. Затем он преобразует это значение в целое число 123, которое является простым числом, которое можно сохранить и обработать как целое число.

Мы можем понять, почему вы можете быть озадачены этим простым примером, хотя, поскольку строка «123» не имеет очевидных частей.

Разбор даты

Вот лучший пример, включающий парсинг даты из строки:

В этом примере показан формат даты, который на самом деле имеет узнаваемые части:

  • yyyy – год
  • – это буквальная тире
  • mm – месяц
  • – это еще одна буквальная тире
  • dd – день

Java анализирует строку даты для вас, разбивая ее на предопределенный шаблон частей и распознавая детали. Затем функция parse выводит объект даты, который легче хранить и манипулировать, чем строка даты.

Разбор целого языка

Это то, что всегда означает синтаксический анализ или парсинг (Если вам сложно осуществить парсинг самому, существуют организации предоставляющие услуги парсинга данных). Все языки программирования анализируются в соответствии с тем, как части создаются вместе в определении языка.
И не только это, но и отдельные высказывания, слова и фрагменты данных языка также могут быть проанализированы, потому что они определены как маленькие биты синтаксиса.

Примерами этого могут быть:

  • Разбор шестнадцатеричного числа, например «0xFF», разбивая его на 0, x и ряд символов от 0 до 9 и af или AF.
  • Разбор чисел с плавающей запятой, таких как «-1.23f», разбив его на знак, целочисленную часть, десятичную точку, дробную часть, затем букву f для float.

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

Однако Java имеет тенденцию ограничиваться вариациями известного синтаксиса, такими как integer, float и date, которые предопределены для него.

Зачем использовать функции синтаксического анализа или парсинга?

Поскольку пользовательский ввод почти всегда предоставлен в виде строк. Прежде чем вы сможете преобразовать его в тип данных Java, с которым вы действительно можете работать, вам обычно нужно разбирать его.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понятие переменных в программировании на C

В данной статье обсуждается суть и использование переменных в языке C в контексте встраиваемых приложений.

Многие из нас слышали слово «переменная» на уроках математики задолго до того, как узнали многое о компьютерном программировании. Математическая переменная – это величина, значение которой неизвестно или не ограничено одним числом. Это использование похоже, хотя и не идентично, понятию переменной в C. Два важных различия: во-первых, в математике для представления переменной мы обычно используем букву, такую как x или y , тогда как в C мы часто используем описательное слово или фразу, такую как temperature , MaxValue или Number_of_Samples . Во-вторых, существуют ситуации, в которых мы используем переменную C для определения величины, которая известна и не предназначена для того, чтобы когда-либо отличаться от исходного значения.

Переменные в аппаратном обеспечении

Для программистов переменные удобны и интуитивно понятны. С другой стороны, для вычислительной техники они не имеют реального значения. Микропроцессоры хранят данные в регистрах и ячейках памяти. Это фундаментальное различие между людьми, которые пишут прошивку, и машинами, которые выполняют прошивку, преодолевается языками высокого уровня, такими как C, который обрабатывает различные детали, связанные с переводом между текстовыми переменными и физической реальностью процессора.

Разработчики встраиваемых систем часто работают с 8-разрядными процессорами. В этих устройствах основной размер данных всегда составляет один байт. Память организована в соответствии с байтами, размер регистров составляет один байт, а сам CPU предназначен для обработки 8-разрядных данных. Это довольно неудобное ограничение, поскольку во многих ситуациях значение переменной будет превышать максимальное значение 8-разрядного числа.

В итоге все ваши тщательно определенные, грамотно названные переменные на C заканчиваются битами в памяти (или в регистрах)

Язык C не ограничивает размер переменной до 8 бит, даже когда вы работаете с 8-разрядным процессором. Это означает, что одна переменная в вашей прошивке может соответствовать нескольким регистрам или ячейкам памяти в аппаратном обеспечении. «Ручное» управление многобайтовыми переменными (т.е. через язык ассемблера) не является моей забавой, но компиляторы не возражают против этого, и они выполняют свою работу очень хорошо.

Определение переменных

Первым шагом в использовании переменной является определение этой переменной. Основными компонентами определения переменной являются тип и имя.

Существует много типов переменных; полный список, а также подробности аппаратной реализации будут зависеть от того, какой компилятор вы используете. Вот некоторые типы:

  • char : однобайтовое целое значение со знаком;
  • int : двух- или четырехбайтовое целое значение со знаком;
  • long : четырехбайтовое целое значение со знаком;
  • float : четырехбайтовое значение, которое может иметь числа после десятичной запятой – другими словами, оно не ограничивается целыми числами;
  • bit : значение переменной может быть ноль или единица.

Это наглядное представление о том, как последовательность битов интерпретируется по-разному, в зависимости от того, интерпретируется ли переменная как со знаком (с использованием двоичной записи) или без знака.

Следующий код показывает определения переменных, которые состоят только из базового типа и имени (более технический способ ссылка на имя – это «идентификатор»):

Инициализация переменной

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

Вот примеры определений переменных, которые включают в себя инициализацию:

Настраиваемые определения переменных

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

Следующие ключевые слова могут оказаться полезными в ваших проектах по разработке прошивок:

  • unsigned : Как вы могли догадаться, это говорит компилятору интерпретировать переменную как значение без знака, а не как значение со знаком. Я определяю большинство переменных как беззнаковые, потому что мне редко нужны отрицательные числа.
  • const : Классификатор типа const указывает компилятору, что значение переменной не должно изменяться. Как я уже упоминал в начале статьи, иногда значение «переменной» в C не является переменной. Если вы допустите ошибку в своем коде и попытаетесь изменить значение переменной const , компилятор выдаст ошибку.
  • volatile : Сложные компиляторы не просто берут исходный код и напрямую переводят его в собранную прошивку. Они также пытаются заставить код работать более эффективно, и этот процесс называется «оптимизацией». Однако время от времени это может испортить ваш день, потому что компилятор оптимизирует только на основе кода и не может учитывать аппаратные события, которые взаимодействуют с вашим кодом. Когда переменная имеет спецификатор типа volatile , компилятор знает, что он должен быть осторожен с оптимизациями, которые связаны с этой переменной. Прерывание может привести к изменению значения переменной так, как этого не ожидает компилятор, и это может привести к проблемной оптимизации
  • типы памяти, такие как xdata , idata и code : Эти ключевые слова заставляют компилятор размещать переменную в определенной части памяти микропроцессора. Тип памяти code особенно удобен: ресурсы оперативной памяти RAM часто гораздо более ограничены, чем энергонезависимая память программы, а тип памяти code позволяет использовать дополнительную память программы для хранения данных, которые используются в вашей программе, но никогда не изменяются.

Вот некоторые примеры:

Использование своих переменных

О том, как использовать переменные после того, как они были определены, можно сказать немного. На самом деле, что касается самой переменной, определение является большей частью работы. После этого вы просто включаете идентификатор переменной в математические операции, циклы, вызовы функций и так далее. Хороший компилятор будет не только обрабатывать детали аппаратной реализации, но и искать способы оптимизации кода с учетом скорости выполнения или размера программы.

Возможно, самая распространенная ошибка, связанная с использованием переменных, – это переполнение. Это относится к ситуации, в которой значение, присвоенное переменной, находится за пределами числового диапазона, связанного с типом данных переменной. Вы должны подумать обо всех возможных сценариях, связанных с данной переменной, а затем выбрать соответствующий тип данных.

Заключение

Основные возможности переменных, предоставляемые языком C, интуитивно понятны и просты, но есть немало деталей, которые помогут вам сделать встраиваемое приложение более надежным и эффективным. Если у вас есть какие-либо вопросы, связанные с переменными C, не стесняйтесь задавать их в комментариях, и мы постараемся включить соответствующую информацию в будущие статьи.

Ссылка на основную публикацию
Adblock
detector