- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
221 Глава 5
Вывод доказывает, что функция incrlO () непосредственно модифицирует пере- менную, переданную ей в аргументе.
Но если вы попытаетесь использовать числовое значение, такое как 20, в качестве аргумента incrlO (), то компилятор выдаст сообщение об ошибке. Дело в том, что компилятор обнаруживает, что параметр-ссылка может быть модифицирован внутри функции, но изменять значения констант нельзя. Это может внести в программы не- которое излишнее волнение, без которого имеет смысл обойтись.
Эта защита хороша, но если функция не собирается модифицировать переданное ей по ссылке значение, то вряд ли вы захотите, чтобы компилятор каждый раз выда- вал сообщения об ошибках, когда вы передаете константу. Должен же быть какой-то способ добиться этого? Разумеется, способ есть.
Использование модификатора const
Чтобы сообщить компилятору, что вы не собираетесь никоим образом модифици- ровать параметр функции, вы можете применить модификатор const. Это заставит компилятор проверить код функции на предмет того, действительно ли он не изме- няет значения аргумента, и если нет, то никаких сообщений об ошибках не выдается при использовании константного аргумента.
Структурная
организация
программ
Ниже показан вывод этой программы.
Описание полученных результатов
Вы объявляете переменную num в main () как const, чтобы показать, что когда параметр функции incrlO () объявлен как const, то компилятор более не выдает со- общений об ошибке при передаче константного объекта.
Необходимо также закомментировать оператор, который увеличивает значение num в функции incrlO (). Если вы уберете комментарий с этой строки, программа перестанет компилироваться, потому что компилятор не допустит появления num в левой части присваивания. Когда вы специфицируете num как const в заголовке и в прототипе функции, это значит, что вы обязуетесь не модифицировать его, и компи- лятор проверяет, как вы держите слово.
Все работает как прежде, за исключением того, что переменные из main () более не изменяются в функции.
Используя аргументы-ссылки, вы берете лучшее из двух миров. С одной стороны, вы можете написать функцию, которая получает прямой доступ к исходному аргумен- ту вызывающего кода, позволив избежать копирования, которое подразумевает меха- низм передачи по значению. С другой стороны, когда вы не намерены модифициро- вать аргумент, вы получаете полную защиту от непреднамеренной его модификации, используя модификатор const со ссылкой.
Аргументы main ()
Функцию main () можно объявлять без аргументов (или лучше со списком пара- метров void), либо же специфицировать список параметров, которые позволяют этой функции получать аргументы из командной строки. Значения, передаваемые в качестве аргументов main (), всегда интерпретируются как строки. Если вы хотите в main () получить данные из командной строки, то должны определить ее следующим образом:
Первый параметр — счетчик строк, переданных программе в командной строке, включая имя самой программы, а второй параметр — массив указателей на эти строки плюс один дополнительный нулевой указатель. Таким образом, значение argc всегда не меньше 1, поскольку при запуске программы всегда, как минимум, указывается ее имя. Количество полученных аргументов зависит от того, что вы вводите в команд- ной строке для запуска программы. Например, предположим, что вы выполняете программу DoThat с помощью следующей команды:
DoThat.exe