C++ — Операторы
- Главная
- Туториалы
- Программирование
- C++
Оператор — это символ, который сообщает компилятору выполнить определенные математические или логические манипуляции. C ++ богат встроенными операторами и предоставляет следующие типы операторов:
- Арифметические операторы
- Реляционные операторы
- Логические операторы
- Побитовые операторы
- Операторы присваивания
- Другие операторы
Арифметические операторы
Существуют следующие арифметические операторы, поддерживаемые языком C ++:
Оператор | Описание | Пример |
---|---|---|
+ | Добавляет два операнда | A + B даст 30 |
— | Вычитает второй операнд с первого | A — B даст -10 |
* | Умножает оба операнда | A * B даст 200 |
/ | Делит числитель на де-числитель | B / A даст 2 |
% | Оператор модуля и остаток после целочисленного деления | B% A даст 0 |
++ | Оператор приращения увеличивает целочисленное значение на единицу | A ++ даст 11 |
— | Уменьшает целочисленное значение на единицу | A— даст 9 |
Реляционные операторы
Существуют следующие реляционные операторы, поддерживаемые языком C ++:
Оператор | Описание | Пример |
---|---|---|
== | Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. | (A == B) не соответствует действительности. |
знак равно | Проверяет, равны ли значения двух операндов или нет, если значения не равны, условие становится истинным. | (A! = B) истинно. |
> | Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. | (A> B) неверно. |
< | Проверяет, является ли значение левого операнда меньше значения правильного операнда, если да, тогда условие становится истинным. | (A <B) истинно. |
> = | Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. | (A> = B) неверно. |
<= | Проверяет, является ли значение левого операнда меньше или равно значению правильного операнда, если да, тогда условие становится истинным. | (A <= B) истинно. |
Логические операторы
Существуют следующие логические операторы, поддерживаемые языком C ++:
Оператор | Описание | Пример |
---|---|---|
&& | Вызывается логическим оператором AND. Если оба операнда отличны от нуля, условие становится истинным. | (A && B) является ложным. |
|| | Вызывается логическим оператором ИЛИ. Если любой из двух операндов отличен от нуля, тогда условие становится истинным. | (A || B) истинно. |
! | Вызывается логическим оператором NOT. Используется для изменения логического состояния операнда. Если условие истинно, то логический оператор NOT сделает ложным. | ! (A && B) истинно. |
Побитовые операторы
Побитовый оператор работает с битами и выполняет побитовую операцию. q
Побитовые операторы, поддерживаемые языком C ++, перечислены в следующей таблице:
Оператор | Описание | Пример |
---|---|---|
& | Двоичный оператор AND копирует бит в результат, если он существует в обоих операндах. | (A & B) даст 12, что составляет 0000 1100 |
| | Двоичный оператор OR копирует бит, если он существует в любом из операндов. | (A | B) даст 61, который равен 0011 1101 |
^ | Оператор двоичного XOR копирует бит, если он установлен в один операнд, но не тот и другой. B) даст 49, который равен 0011 0001 | |
~ | Binary Ones Оператор дополнения является унарным и имеет эффект «flipping» бит. | (~ A) даст -61, что составляет 1100 0011 в форме дополнения 2 из-за подписанного двоичного числа. |
<< | Двойной левый оператор сдвига.Значение левых операндов перемещается влево на количество бит, заданных правым операндом. | A << 2 даст 240, что составляет 1111 0000 |
>> | Двоичный оператор правого сдвига. Значение левых операндов перемещается вправо на количество бит, заданных правым операндом. | A >> 2 даст 15, что составляет 0000 1111 |
Операторы присваивания
Существуют следующие операторы присваивания, поддерживаемые языком C ++:
Оператор | Описание | Пример |
---|---|---|
знак равно | Простой оператор присваивания, присваивает значения из правых операндов в левый операнд. | C = A + B присваивает значение A + B в C |
+ = | Оператор Add AND присваивания, Он добавляет правый операнд в левый операнд и присваивает результат левому операнду. | C + = A эквивалентно C = C + A |
знак равно | Subtract AND assign operator, вычитает правый операнд из левого операнда и присваивает результат левому операнду. | C — = A эквивалентно C = C — A |
знак равно | Оператор умножения и присваивания, Он умножает правый операнд на левый операнд и присваивает результат левому операнду. | C * = A эквивалентно C = C * A |
знак равно | Оператор Divide AND assign. Он делит левый операнд на правый операнд и присваивает результат левому операнду. | C / = A эквивалентно C = C / A |
знак равно | Модуль и оператор присваивания, он принимает модуль с использованием двух операндов и присваивает результат левому операнду. 2 | |
| = | Побитовое включение оператора OR и присваивания. | C | = 2 совпадает с C = C |2 |
Другие операторы
В следующей таблице перечислены некоторые другие операторы, поддерживаемые C ++:
Оператор | Описание |
---|---|
sizeof |
Возвращает размер переменной. Например, sizeof (a), где ‘a’ является целым числом и будет возвращать 4. |
Condition ? X : Y |
Если Условие истинно, то оно возвращает значение X, иначе возвращает значение Y. |
, |
Вызывает последовательность операций. Значение всего выражения запятой — это значение последнего выражения списка, разделенного запятыми. |
. (dot) and -> (arrow) |
Используются для ссылки на отдельных членов классов, структур и союзов. |
Cast |
Преобразуют один тип данных в другой. Например, int (2.2000) вернет 2. |
& |
Возвращает адрес переменной. Например, & a; даст фактический адрес переменной. |
* |
Является указателем на переменную. Например * var; будет указывать на переменную var. |
Приоритеты операторов в C ++
Приоритет оператора определяет группировку терминов в выражении. Это влияет на оценку выражения. Некоторые операторы имеют более высокий приоритет, чем другие; например, оператор умножения имеет более высокий приоритет, чем оператор сложения —
Например, x = 7 + 3 * 2; здесь x назначается 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому он сначала умножается на 3 * 2, а затем добавляется в 7.
Здесь операторы с наивысшим приоритетом появляются в верхней части таблицы, а нижние — внизу. Внутри выражения сначала будут оцениваться операторы с более высоким приоритетом.
Категория | Оператор | Ассоциативность |
---|---|---|
постфикс | () [] ->. ++ — — | Слева направо |
Одинарный | + -! ~ ++ — — (тип) * & sizeof | Справа налево |
Multiplicative | * /% | Слева направо |
присадка | + — | Слева направо |
сдвиг | << >> | Слева направо |
реляционный | <<=>> = | Слева направо |
равенство | ==! = | Слева направо |
Побитовое AND | & | Слева направо |
Побитовое XOR | ^ | Слева направо |
Побитовое OR | | | Слева направо |
Логические AND | && | Слева направо |
Логический OR | || | Слева направо |
условный | ?: | Справа налево |
присваивание | = + = — = * = / =% = >> = << = & = ^ = | = | Справа налево |
запятая | , | Слева направо |
что это и зачем нужны
Оператор в программировании — это команда, обозначающая определенное математическое или логическое действие, выполняемое с данными (операндами). Является минимальным автономным элементом компьютерной программы. По сути любая компьютерная программа представляет собой последовательность операторов. Близким аналогом операторов в естественных языках являются фразы или предложения, из которых состоит текст.
Каждый оператор имеет свое написание (синтаксис) и семантику (содержание, смысл). В зависимости от конкретного языка синтаксис оператора может существенно различаться, хотя в целом для обозначения той или иной операции используются символы, имеющие аналогичное или похожее значение в математике или формальной логике.
Зачем нужны операторы в программировании?Компьютерная программа представляет собой алгоритм, то есть последовательность определенных действий с данными. Ее создает человек, но исполняет компьютер, поэтому она должна быть понятна им обоим. Поэтому просто описать определенную операцию, скажем, присваивания значения переменной обычным (естественным) языком, хоть и теоретически возможно, на практике очень неудобно. Для человека такой код будет очень громоздким и сложно воспринимаемым настолько, что написание сколько-нибудь большой программы станет невозможным. А чтобы код воспринимался компьютером, придется разработать сложный компилятор для его перевода на машинный язык.
Поэтому для обозначения операций в программировании были взяты символы, используемые в аналогичных языках в математических выражениях и формальной логике. Именно они стали основой для синтаксиса операторов в абсолютном большинстве современных ЯП. Таким образом, операторы в программировании выполняют следующие функции:
- упрощают и сокращают код, делают его более понятным человеческому восприятию;
- обозначают определенную операцию с данными таким образом, чтобы ее можно было легко перевести на машинный код.
Среди дополнительных преимуществ использования операторов можно выделить простое восприятие программы человеком независимо от того, носителем какого естественного языка он является. Это достигается за счет универсальности математических и логических символов.
Общее свойство операторовВсе операторы в программировании имеют одно общее свойство — они исполняются. То есть по своей сути они являются инструкциями, которым должен следовать компьютер, чтобы определенным образом обработать данные и выполнить программу. При этом сам оператор является чистой математической или логической абстракцией, под ним не подразумевается каких-либо конкретных объектов вроде ячеек памяти. На протяжении всего исполнения программы он остается в неизменном виде — зато изменяются данные, содержащиеся в памяти компьютера. Иными словами, эти изменения информации и являются исполнением команды, обозначенной оператором.
Виды операторов в программированииВ различных языках программирования имеются свои системы операторов и операций. Но в целом их можно классифицировать, разделив на несколько основных типов.
Оператор присваивания. Он используется в том случае, когда необходимо присвоить определенное значение переменной. То есть показать программе, что в данной ячейке памяти, обозначенной именем, лежат конкретные данные, которые нужно будет использовать в процессе исполнения кода. В большинстве языков программирования алгоритм присваивания использует знак равенства. Например, на языке Python данная операция выглядит следующим образом:
х = 365, где х — это имя переменной, 365 — ее значение, а «=» — знак присваивания.
Арифметические операторы. Это группа операторов, обозначающих математические действия с данными. В большинстве языков программирования они обозначаются символами, использующимися в том же значении в обычных арифметических управлениях, хотя некоторые из них могут иметь собственное обозначение — например:
- «-» — вычитание;
- «+» — сложение;
- «*» — умножение;
- «/» — деление без остатка;
- «—» — уменьшение;
- «++» — увеличение.
Два последних оператора из этого списка используются в языке С и обозначают уменьшение или увеличение операнды на 1. В других ЯП эта операция записывается, например, следующим образом: х = х + 1 или х = х – 1.
Логические операторы. Они помогают установить отношения между различными данными и/или обозначить условия, при которых будут выполняться какие-либо действия. Ключевой концепцией для их понимания является соотношение «правда/ложь» (true/false). Логические операторы по своей семантике и синтаксису базируются на формальной логике. В различных языках программирования их обозначение бывает разным, причем не только символьным, но и буквенным — например:
- Оператор «И» сравнивает несколько значений друг с другом и выдает результат «истина/ложь», от которого зависит дальнейшее выполнение программы. Результат «истина» возможен только в том случае, когда все значения истинны. Обозначается словом «and» или знаками &, &&.
- Оператор «ИЛИ» также сравнивает несколько значений друг с другом. Отличается от предыдущего тем, что выдает результат «ложь» только в том случае, когда все сравниваемые значения ложные. Обозначается словом «or», знаком ||.
- Оператор «НЕ» предназначен для замены значения на противоположное, то есть «истина» на «ложь» и наоборот. В программировании обозначается восклицательным знаком «!».
Операторы сравнения. Они часто используются в связке с логическими операторами для сравнения различных значений друг с другом, результатом чего является результат «истина/ложь». Например, в языке С они обозначаются следующими символами:
- «>» — больше;
- «<» — меньше;
- «>=» — больше или равно;
- «<=» — меньше или равно;
- «==» — равно;
- «!=» — не равно.
Помимо этих основных операторов в программировании используются и другие, причем в зависимости от языка их набор может существенно различаться, что влияет на возможности ЯП и гибкость написанного на нем кода. Часто в одном и том же языке сосуществуют операторы, обозначаемые словом или символом. Например, в языке Pascal наряду с символьным оператором присваивания «:=» присутствует оператор безусловного перехода «goto», записанный буквами латинского алфавита.
Все указанные выше команды являются простыми, то есть обозначающими одну конкретную операцию с данными. Помимо них в программировании используются составные операторы, то есть состоящие из нескольких простых. Соответственно, они имеют специальные обозначения для корректного написания в программе:
- Границы составного оператора могут обозначаться в различных языках фигурными скобками (в С или С++), словами «begin» и «end».
- Разделителем, отделяющим друг от друга простые операторы, входящие в состав сложного.
Составные операторы впервые появились в языке Алгол, из которого были унаследованы многими другими ЯП, такими как Pascal, C, C++ и т. д. Они позволяют использовать несколько операторов там, где ожидается применение одного — например, в операциях ветвления. Составные операторы позволяют упростить программный код и упорядочить его исполнение. Пример написания составного условного оператора «switch» (заменяющего множество простых операторов «if» на языке С:
switch(ii)
{
case 1: Buf_1[Pok-f+i]= Prognoz; break;
case 2: Buf_2[Pok-f+i]= Prognoz; break;
case 3: Buf_3[Pok-f+i]= Prognoz; break;
}
По своему назначению в структуре программы операторы можно разделить на следующие основные типы:
Операторы выбора. Они используются в тех случаях, когда программа подразумевает выбор из некоторого числа значений, в зависимости от которых происходит ее дальнейшее исполнение или неисполнение. Иными словами, они обозначают ветвление алгоритма. Типичным примером является оператор «if» в языке С, который разделяет программу на два сценария в зависимости от того, исполняется или нет указанное в нем условие.
Операторы цикла. С помощью таких операторов в программе обозначаются операции, выполняемые многократно (циклы). Они тоже содержат условия или параметры, при соблюдении которых цикл повторяется. В языке Pascal таким оператором является «while». Например, конструкция «while B do S» в переводе на естественный язык означает, что пока значение логического выражения (условия) B истинно, программа будет исполнять цикл S до тех пор пока B не станет ложным. В зависимости от того, как используется условие, операторы цикла можно разделить на 3 группы:
- с предусловием — то есть условием, соблюдение которого необходимо для осуществления цикла;
- В операторе с постусловием ситуация обратная — при выполнении условия цикл завершится;
- В операторе с параметром (переменной) вводится изменяемое значение, которое определяет конечное количество повторений цикла.
Операторы вызова процедуры. Под процедурами в программировании подразумевается подпрограмма (функциональный блок, входящий в основную программу). Фактически оператор вызова процедуры инициирует ее начало и определяет завершение по достижении нужных результатов. Таким образом, он позволяет сделать программу более понятной, а ее исполнение — последовательным и безошибочным.
Операторы перехода. Они перенаправляют исполнение программы к определенному фрагменту кода, помеченному специальной меткой. Операторы перехода позволяют создавать работающие алгоритмы со сложной структурой. Типичным примером такого оператора в языке Pascal является безусловный оператор «goto». Помимо него есть также оператор прерывания цикла «break» или досрочного завершения его текущей операции «continue», прерывания всей программы «exit» и т. д. Подобные операторы присутствуют и в других языках программирования, таких как С, С++, Java и т. д.
Порядок исполнения операторовДля правильного использования операторов в программировании важно правильно задать последовательность их исполнения. Стандартным является вариант, когда простые и сложные операторы исполняются последовательно сверху вниз (если они расположены на разных строках) и справа налево (в одной строке). Так они и должны быть отражены в коде программы. Простые операторы, входящие в состав сложного (множественного), исполняются по тому же принципу. Однако такой принцип последовательности не единственный: в некоторых языках программирования есть возможность настроить его более гибко. Это зачастую ведет к усложнению структуры программы.
Таким образом, операторы в программировании являются одной из важнейших составляющих кода, минимальной функциональной единицей, без которой невозможно исполнение даже самой простой программы. Для их эффективного применения необходимо четко соблюдать правила синтаксиса, предусмотренные в конкретном языке, понимать смысл выполняемых операций и правильно задавать последовательность их исполнения.
Обозначение Big O в C
следующий → ← предыдущая В разделе «Структура данных и алгоритмы в программировании на C» мы изучили множество алгоритмов, поняв различные аспекты и цели алгоритма. Мы также изучили сложность алгоритма и то, как анализировать и вычислять сложность алгоритма. Мы нашли временную и пространственную сложность алгоритма и пришли к выводу, что алгоритм с меньшей временной и пространственной сложностью оценивается как лучший алгоритм. Мы поняли, как найти лучший случай, худший случай и средний случай алгоритма. Таким образом, для анализа всех таких сложностей и представления их концепция Используется асимптотическая нотация , согласно которой доступны различные типы для представления сложностей. Одним из таких типов является Big O Notation . В этом разделе мы обсудим нотации большого O и кратко представим асимптотические нотации и их типы. Что такое асимптотические обозначенияЭто математические обозначения, используемые для асимптотического анализа алгоритмов. Термин «асимптотический» описывает выражение, в котором существует переменная, значение которой стремится к бесконечности. Короче говоря, это метод, описывающий ограничивающее поведение выражения. Таким образом, используя асимптотические обозначения, мы анализируем сложность алгоритма и его производительность. Используя асимптотические обозначения, мы определяем и показываем сложности после его анализа. Следовательно, существует три типа асимптотических обозначений, с помощью которых мы можем анализировать сложность алгоритмов:
Таким образом, эти три асимптотических обозначения являются наиболее часто используемыми обозначениями, но помимо них также присутствуют более распространенные асимптотические обозначения, такие как линейные, логарифмические, кубические и многие другие. Обозначение с большой буквой OОбозначение Big O используется для выражения верхней границы времени выполнения алгоритма и, таким образом, для измерения временной сложности алгоритма в наихудшем случае. Он анализирует и вычисляет время и объем памяти, необходимые для выполнения алгоритма для входного значения. Математически, Для функции f(n) и другой функции g(n), , где обе функции определены на некотором неограниченном множестве действительных (положительных) чисел. Где g(n) строго положительно для всех больших значений n. Это можно записать как: f(n) = O(g(n)) где n стремится к бесконечности (n → ∞) Но видно, что допущение бесконечности n остается невысказанным, поэтому мы можем просто записать вышеприведенное выражение как: f(n) = O(g(n)) Здесь f и g необходимые функции преобразования положительных целых чисел в неотрицательные действительные числа. Таким образом, асимптотика Big O относится к большим значениям n. Свойства нотации Big OНекоторые существенные свойства нотации Big O обсуждаются ниже:
Здесь, с точки зрения большого O, все функции журнала увеличиваются одинаково. Как Big O Notation выполняет анализ алгоритма во время выполненияДля анализа производительности алгоритма мы вычисляли и сравнивали сложность времени выполнения алгоритма в наихудшем случае. Порядок O (1), который известен как Постоянное время выполнения , считается самым быстрым временем выполнения для алгоритма, когда время, затрачиваемое алгоритмом, одинаково для разных размеров входных данных. Однако постоянное время работы — идеальное время работы алгоритма, но оно достигается очень редко. Это связано с тем, что время выполнения алгоритма зависит от входного размера n. Например: Как мы знаем, производительность алгоритма во время выполнения зависит от входного размера n. Давайте посмотрим на некоторые математические примеры для выполнения анализа времени выполнения алгоритма для разного размера n:
Таким образом, аналогичным образом мы вычисляем производительность алгоритма во время выполнения. Давайте посмотрим на некоторые алгоритмические примеры и посмотрим на анализ этих алгоритмов во время выполнения: 9н). Как нотация Big O анализирует сложность пространстваОчень важно определить сложность алгоритма как во время выполнения, так и в пространстве. Это потому, что при анализе производительности алгоритма во время выполнения мы узнаем время выполнения алгоритма, а при анализе пространственной сложности алгоритма мы узнаем объем памяти, занимаемый алгоритмом. Таким образом, для измерения пространственной сложности алгоритма необходимо сравнить производительность алгоритма с пространственной сложностью в наихудшем случае. Чтобы определить пространственную сложность алгоритма, необходимо выполнить следующие две задачи: Задача 1: Требуется реализация программы для конкретного алгоритма. Задача 2: Размер входных данных n требуется, чтобы узнать объем памяти, который будет занимать каждый элемент. Обе эти две важные задачи должны быть выполнены в первую очередь, только после этого мы можем вычислить пространственную сложность алгоритма. Примеры алгоритмовНиже мы упомянули некоторые алгоритмические примеры с их пространственной сложностью:
Ниже мы реализовали алгоритм сортировки выбором на C и вычислили сложность алгоритма в наихудшем случае (обозначение Big O): для (целое я = 0; я Для анализа алгоритма:
Вы можете реализовать другие алгоритмы на C, проанализировать его и определить сложности аналогичным образом. Следующая темаLCM из двух чисел в C ← предыдущая следующий → |
Соглашения и обозначения C, C++, используемые в практическом программировании 005
Венгерская нотация в основном используется в средах программирования Microsoft Windows, таких как Microsoft C, C++ и Visual Basic. Первоначально он был разработан Чарльзом Симони , венгром, который много лет был старшим программистом в Microsoft. Венгерская нотация предполагает хранение информации о переменной в самом имени переменной. Такие сведения, как тип данных и область действия переменной, обычно можно получить, взглянув на имя переменной. В венгерской нотации имена переменных разделены на две части:
Префикс нижнего регистра, содержащий информацию о типе переменной, и
Квалификатор, указывающий, что содержит переменная. Классификатор обычно начинается с заглавной буквы.
Например: pstrError
Это может быть указатель на строку, которая будет содержать сообщение об ошибке.
Большая часть Windows API, примеры кода и документация написаны в этой нотации. Обратите внимание, что венгерская нотация разработана для языка C, а не для C++. В C довольно просто придумать осмысленные префиксы для «нескольких» типов, которые имеют смысл в конкретной области (например, в программировании Windows). С C++ действительно сложнее.
Венгерская нотация на самом деле не нужна при использовании современного строго типизированного языка , поскольку компилятор предупреждает программиста, если переменная одного типа используется так, как если бы она была другого типа. Это менее полезно в объектно-ориентированных языках программирования, таких как C++, где многие переменные будут экземплярами классов.
Нотация CamelCase — это обычное название практики написания сложных слов или фраз, в которых слова соединяются без пробелов, а каждое слово в составном слове пишется с заглавной буквы. Эта практика известна под множеством названий, в том числе BiCapitalization , InterCaps , MixedCase и т. д. CamelCase — это стандартное соглашение об именах идентификаторов для нескольких языков программирования, которое также стало модным в маркетинге для названий продуктов и компаний. Название CamelCase происходит от заглавных «шишек» в середине составного слова, что предполагает горбы верблюда. Например:
thisIsCamelCase, thisIsLowerCamelCase.ThisIsUpperCamelCase
Есть две распространенные разновидности CamelCase, отличающиеся обработкой первой буквы. Разновидность, в которой первая буква написана заглавной, обычно называется UpperCamelCase , PascalCase или BiCapitalized . Разновидность, в которой первая буква оставлена строчной, обычно называется lowerCamelCase или иногда просто camelCase . Термин StudlyCaps похож, но не обязательно идентичен CamelCase. Иногда он используется в отношении CamelCase, но также может относиться к случайная смешанная заглавная буква (как в «СМЕШАННАЯ КАПИТАЛИЗАЦИЯ»), широко используемая в онлайн-культуре. Другие примеры синонимов для нотации CamelCase включают:
BumpyCaps
BumpyCase
CamelCaps 90 351
CamelHumpedWord
CapWordsPython (ссылка)
MixedCase (для нижнего CamelCase) в Python (ссылка)
ClCl (заглавная-нижняя заглавная-нижняя) и иногда ClC
HumpBackNotation
InterCaps
InternalCapitalization
NerdCaps
90 027WordsStrungTogether или WordsRunTogether
В программах любого значительного -слово) идентификаторы, такие как «предыдущий баланс» или «конец файла». Написание слов вместе, как в «endoffile», неудовлетворительно, потому что имена часто становятся нечитаемыми. Стандарт набора символов ASCII, принятый в конце 19 в.60-х годов, что позволяет разработчикам языка C использовать символ подчеркивания «_» в качестве соединителя слов. Составные части, разделенные подчеркиванием, такие как «end_of_file», по-прежнему широко распространены в программах и библиотеках на C.
Поскольку программы стали более сложными как с точки зрения размера, так и с увеличением количества типов данных, многие программисты приняли соглашение об именах переменных, которое обычно называют Венгерская нотация 90 275 (апокрифически назван в честь программиста Microsoft Чарльза Симони). Другая нотация, обычно используемая в языке программирования, — CamelCase. За последние несколько лет было предложено и/или опубликовано несколько стандартных версий венгерской нотации. Приведенная здесь версия продиктована частично личными предпочтениями и частично соглашениями, установленными Windows в именовании констант, переменных и определений структур данных. Поскольку все эти стандарты предназначены для вашего удобства, вы можете следовать им или изменять их по своему усмотрению. Используя венгерскую нотацию, имена переменных начинаются с одной или нескольких строчных букв , которые обозначают тип переменной , таким образом, обеспечивая внутреннюю идентификацию. Например, префикс h используется для идентификации дескриптора, как в hWnd или hDlg , ссылаясь на дескрипторы окна и диалогового окна соответственно. Аналогичным образом префикс lpsz идентифицирует длинный указатель на строку с завершающим нулем (ASCIIZ). В таблице 1 приведены некоторые венгерские обозначения. |
Префикс | Тип данных |
B | Boolean. |
по | байт или символ без знака. |
c | симв. |
cx/cy | короткий используется как размер. |
dw | DWORD, двойное слово или длинное без знака. |
фн | функция. |
ч | ручка. |
i | целое (целое). |
л | Длинн. |
n | короткая внутр. |
p | переменная-указатель, содержащая адрес переменной. |
с | строка. |
sz | Строка ASCIIZ с нулем в конце. |
w | WORD целое без знака. |
x, y | короткие используются в качестве координат. |
Таблица 1: Примеры венгерской системы обозначений. |
Windows также использует обширный список предопределенных констант, которые используются в качестве сообщений, значений флагов и других рабочих параметров. Эти постоянные значения всегда вводятся полностью в верхнем регистре, и большинство из них включают двух- или трехбуквенный префикс, выделенный символом подчеркивания. Вот несколько примеров:
CS_HREDRAW | CS_VREDRAW | CW_USER ПО УМОЛЧАНИЮ |
DT_CENTER | DT_SINGLELINE | DT_VCENTER |
IDC_ARROW 902 37 | IDI_APPLICATION | WM_DESTROY |
WM_PAINT | WS_OVERLAPP ЭДВИНДОУ |
|
В случае идентификаторов констант префиксы указывают на общую категорию константы. В таблице 2 показаны значения префиксов в приведенных здесь примерах.
ПрефиксКатегория | Среднее | 9023 8
CS | Стиль класса |
CW | Создать окно |
DT | Текст |
IDC | Идентификатор курсора |
Идентификатор значка | |
WM | Окно сообщения |
9 0005 WS | Стиль окна |
Таблица 2. Несколько постоянных префиксов. |
Windows также использует множество новых типов данных и идентификаторов типов, большинство из которых определены в заголовочных файлах WinDef.H или WinUser.H. В таблице 3 перечислены некоторые из наиболее распространенных примеров типов данных.
Тип данных | Значение | FAR | То же, что и далеко. Идентифицирует адрес, изначально использовавший схему адресации сегмент:смещение. Теперь FAR просто идентифицирует (по умолчанию) 32-битный адрес, но во многих случаях может быть полностью опущен. |
ПАСКАЛЬ | То же, что и Паскаль. Соглашение Pascal, требуемое Windows, определяет порядок, в котором аргументы находятся в стеке при передаче в качестве параметров вызова. |
СЛОВО | Беззнаковое целое (16 бит) |
UINT | Целое без знака, то же, что и WORD |
DWORD | Двойное слово, длинное без знака int (32 бита) |
LONG | Длинное целое число со знаком (32 бита) |
LPSTR 9 0006 | Длинный (дальний) указатель на строку символов |
NEAR | Устаревшее, ранее идентифицированное значение адреса в блоке памяти размером 16 КБ. |
Таблица 3. Несколько типов данных Windows. |
Точно так же Windows добавляет множество новых структур данных. Опять же, большинство из них определены либо в WinDef.H, либо в WinUser.H. Примеры показаны в таблице 4.
Структура | Пример | Значение | MSG | msg | Структура сообщения. |
PAINTSTRUCT | пс | Структура краски. |
PT | pt | Точечная структура (положение мыши). |
RECT | rect | Прямоугольная структура, две пары координат. |
WNDCLASS | туалет | Структура класса окна. |
Таблица 4: Примеры обозначений, используемых для структур Windows. |
Подобным образом определены различные дескрипторы для использования с различными элементами Windows. Как и константы, дескриптор типы используют все идентификаторы в верхнем регистре. В таблице 5 показано несколько примеров.
Тип ручки | Примеры 9000 6 | Значение |
РУКОЯТКА | ручная или длинная | 90 005 Универсальная ручка |
HWND | hwnd или hWnd | Оконная ручка |
HDC | hdc или hdc | Контекстная ручка устройства (CRT) 9 0237 |
HBRUSH | hbr или hBrush | Ручка кисти |
HPEN | hpen или hPen | Ручка для рисования |