Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

будет вычисляться как а = (Ь = 0);

в результате чего переменным а и b будет присвоено значение 0. В случае выра-жения x[i] + ++i

не определено, в каком порядке компилятор будет выполнять оценку, — начиная с левой части оператора «плюс» или начиная с правой части. В данном случае порядок вычислений влияет на результат, поскольку значение i может быть увеличено до того, как будет вычисляться x[i],

В этом выражении порядок вычислений также не определен: x[i] = ++i

В этой ситуации не определено, когда значение i будет использовано как индекс для х, — до приращения i или после приращения.

Порядок вычисления аргументов функции или метода тоже не определен. Поэтому при вызове функции f(i, ++i);

или в выражении с сообщением [myFract setTo: i over: ++i];

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

Язык Objectivc-C гарантирует, что операторы && и || будут вычисляться слева направо. Поэтому в случае && гарантируется, что второй операнд нс будет оцениваться, если первый равен 0; в случае || гарантируется, что второй операнд не будет оцениваться, если первый не равен 0. Этот факт необходимо учитывать при формировании таких выражений, как if ( dataFlag || [myData checkData])

поскольку в этом случае checkData вызывается, только если значение dataFlag равно 0. Еще один пример. Если в определении объект-массив а содержит п элементов, то оператор, который начинается с if (index >= 0 && index < n && ([a objectAtlndex: index] == 0))

является ссылкой на элемент этого массива, только если index является допустимым индексом в этом массиве. Константные выражения

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

Как значение после case в операторе switch.

Для указания размера массива.

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

Чтобы указать размер битового поля в определении структуры.

Чтобы присвоить начальные значения внешним или статическим переменным.

Чтобы задать начальные значения для глобальных переменных.

Как выражение после #if в препроцессорном операторе #if. В первых четырех случаях константное выражение должно состоять из це-лых констант, символьных констант, перечисляемых констант и выражений sizeof. Могут использоваться только арифметические операторы, побитовые операторы, операторы отношения, оператор с условным выражением и опера-тор приведения тина (cast).

В пятом и шестом случаях помимо вышеперечисленных правил может ис-пользоваться явно или неявно адресный оператор. Однако он может приме-няться только к внешним или статическим переменным или функциям. На-пример, выражение &х+ 10

будет допустимым константным выражением, если х является внешней или статической переменной. Кроме того, выражение &а[10] - 5

янляется допустимым константным выражением, если а является внешним или статическим массивом. И, наконец, поскольку &а[0] эквивалентно выражению а + sizeof (char) * 100

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

В последней ситуации, где необходимо константное выражение (после #if), применяются такие же правила, как для первых четырех случаев, за исключе-нием того, что не могут использоваться оператор sizeof, константы перечисления и оператор приведения типа (cast). Однако разрешается специальный определенный оператор (см. раздел «Директива if»). Арифметические операторы

При условии, что а, b выражения любого базового типа данных за исключением void; i, j выражения любого целого типа данных

выражение -а изменяет знак а на противоположный; +а дает значение а; а + b выполняет сложение а и b; а - b выполняет вычитание b из а; а * b выполняет умножение а на b; а / b выполняет деление а на b; i % j дает остаток от деления i на j.

В каждом выражении выполняются обычные арифметические преобразо-вания над операндами (см. ниже раздел «Преобразование базовых типов дан-ных»), Если а — переменная без знака (unsigned), то для вычисления -а сначала выполняется целочисленное расширение, выполняется вычитание из большего значения расширенного типа и к результату добавляется 1.

При делении двух целых значений выполняется усечение результата. Если один из операндов меньше нуля, то направление усечения не определено (то есть -3/2 может дать на некоторых машинах -1 и -2 на других); в противном случае усечение всегда выполняется в сторону 0(3/2 всегда дает 1). Сводку арифметических операций с указателями см. в разделе «Базовые операции с указателями». Логические операторы

При условии, что а, b выражения любого базового типа данных за исключением void или оба операнда являются указателями;

выражение а && b имеет значение 1, если а и Ь не равны нулю, и значение 0 в противном случае (Ь оценивается только в том случае, если а отлично от нуля); а || b имеет значение 1, если а или b не равно нулю, и значение 0 в противном случае (Ь оценивается только в том случае, если а отлично от нуля); ! а имеет значение 1, если а равно 0, и значение 0 в противном случае.

К а и b применяются обычные арифметические преобразования (см. ниже раздел «Преобразование базовых типов данных»). Во всех случаях результат имеет тип int. Операторы отношения

При условии, что а, Ь выражения любого базового типа данных за исключением void или оба операнда являются указателями;

выражение а < b имеет значение 1, если а меньше Ь, и значение 0 в противном случае; а <= b имеет значение 1, если а меньше или равно Ь, и значение 0 в противном случае; а > Ь имеет значение 1, если а больше Ь, и значение 0 в противном случае; а >= b имеет значение 1, если а больше или равно Ь, и значение 0 в противном случае; а != b имеет значение 1, если а не равно Ь, и значение 0 в противном случае.

Поделиться:
Популярные книги

Мажор. Дилогия.

Соколов Вячеслав Иванович
Фантастика:
боевая фантастика
8.05
рейтинг книги
Мажор. Дилогия.

Законы Рода. Том 12

Андрей Мельник
12. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 12

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Вернувшийся: Первые шаги. Том II

Vector
2. Вернувшийся
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Первые шаги. Том II

Кровь на клинке

Трофимов Ерофей
3. Шатун
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Кровь на клинке

Одинаковые. Том 3. Индокитай

Алмазный Петр
3. Братья Горские
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Одинаковые. Том 3. Индокитай

Камень Книга двенадцатая

Минин Станислав
12. Камень
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Камень Книга двенадцатая

Deus vult

Зот Бакалавр
9. Герой Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Deus vult

Точка Бифуркации XIII

Смит Дейлор
13. ТБ
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Точка Бифуркации XIII

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Компас желаний

Кас Маркус
8. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Компас желаний

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5