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

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

Жанры

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

Для обработки исключений во время выполнения нужно включить операторы, которые могут генерировать исключение, в блок @try, который имеет общий формат @try программныйОператор 1 @catch (исключение) программныйОператор 2 @catch (исключение) ... @finally программныйОператор n

Если исключение выдает программныйОператор 1, то проверяются (по поряд-ку) последующие блоки @catch на совпадение соответствующего исключения с выданным исключением. Если да, то будет выполнен соответствующий программ-ныйОператор. Независимо от факта выдачи и перехвата исключения будет вы-полнен блок @finally (если

он задан). Препроцессор

Препроцессор анализирует исходный файл до того, как компилятор рассмотрит сам код. Препроцессор выполняет следующие действия.

Он заменяет триграммы (группы из трех последовательных символов) на их эквиваленты (см. выше раздел «Составные операторы»).

Он объединяет в одну с троку любые строки, которые заканчиваются обратным слешем (\).

Он разделяет программу на поток маркеров.

Он удаляет комментарии, заменяя их одним пробелом.

Он обрабатывает мрепроцессорные директивы (см. ниже раздел «Директивы препроцессора») и раскрывает макросы. Последовательности из триграмм

Для обработки наборов символов, не соответствующих ASCII, используются следующие трехсимвольные последовательности (триграммы), которые распоз-наются и обрабатываются специальным образом там, где они находятся в про-грамме (а также внутри символьных строк). Триграмма Значение ??= # ??( [ ??) ] ??< { ??> } ??/ \ ??’ ^ ??! | ??- ~ Директивы препроцессора

Все директивы препроцессора начинаются с символа #, когорый должен быть первым символом в строке, отличным от пробела. После # могут следовать один или несколько символов «пробел» или tab. Директива #define Формат 1 #define имя текст

Определяется имя идентификатора для препроцессора, это имя связывается с текстом, который начинается после первого пробела, следующего за именем, и заканчивается концом строки. При последующем использовании имени в программе оно заменяется текстом. Формат 2 #define имя (парам_ 1, парам_2,..., парам_п) текст

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

Если макрос принимает переменное число параметров, то в конце списка аргументов используются три точки. Остальные аргументы в списке обозначаются специальным идентификатором VA_ARGS. Например, ниже определяется макрос с именем myPrintf, принимающий переменное число аргументов. #define myPrintf(...) printf ("DEBUG:" _VA_ARGSJ;

Этот макрос можно использовать, например, в форме myPrintf ("Hello world!\n"); или myPrintf ("i = %i, j = %i\n", i, j);

Если для определения требуется более чем одна строка, то для продолжения каждой строки ее нужно заканчивать символом обратного слеша. После опре-деления имени его можно использовать в любом

месте данного файла.

В директивах «define, которые принимают аргументы, можно использовать оператор #, после которого следует имя аргумента. Препроцессор помещает в кавычки фактическое значение, передаваемое макросу при его вызове, то есть значение превращается в символьную строку. Например, определение #define printint(x) printf (# х "= %d\n", х)

при вызове printint (count);

раскрывается препроцессором как printf ("count" "= %i\n", count); или эквивалентно как printf ("count = %i\n", count);

Препроцессор помещает символ \ перед любой кавычкой или символами \ при выполнении этой операции преобразования в строку. Например, в случае определения #define str(x) # х вызов sir (The string ,r\t"contains a tab)

раскрывается следующим образом "The string \"\\t\"contains a tab"

В директивах «define, принимающих аргументы, допускается также оператор ##. Перед ним (или после него) ставится имя аргумента для макроса. Препроцессор берет значение, передаваемое при вызове макроса, и создает один маркер из этого аргумента и из маркера, который следует за ## (или предшествует ##). Например, в случае определения макроса #define printx(n) print! ("%i\n", x «# n );

вызов printx (5)

дает printf ("%i\n", x5);

Определение #define printx(n) printf ("x"« n "= %i\n", x ## n );

при вызове printx(1O)

дает printf ("xIO = %i\n", xIO);

после подстановки и конкатенации символьных строк.

Вокруг операторов « и #« можно не ставить пробелы. Директива #error Общий формат #error текст ...

Указанный текст записывается препроцессором как сообщение об ошибке. Директива #if Формат 1 #if константное^выражение «endif

Вычисляется константное выражение. Если результат не равен нулю, то обрабаты-ваются все строки программы до директивы «endif; в противном случае они ав-томатически пропускаются и не обрабатываются препроцессором или компи-лятором. Формат 2 #if константное_выражение_1 ... #elif константное_выражение_2 ... #elif константноевыражениеп ... #else ... #endif

Если константное выражение^ не равно нулю, то обрабатываются все строки программы до #elif, а остальные строки до «endif пропускаются. В противном случае, если константное_выражение_2не равно нулю, то обрабатываются все строки программы до следующей директивы #elif, а остальные строки до «endif про-пускаются. Если все константные выражения равны нулю, то обрабатываются строки после «else (если включена эта директива).

Как часть константного выражения можно использовать специальный оператор defined. Например, при использовании #if defined (DEBUG) ... #endif

будет обрабатываться код между «if и «endif, если ранее был определен иденти-фикатор DEBUG (см. также «ifdef в следующем разделе). Идентификатор не обя-зательно заключать в круглые скобки, то есть #if defined DEBUG

действует точно так же. Директива #ifdef

Общий формат #ifdef идентификатор ... #endif

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

Ренегат космического флота

Борчанинов Геннадий
4. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Ренегат космического флота

Император Пограничья 7

Астахов Евгений Евгеньевич
7. Император Пограничья
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Император Пограничья 7

Государь

Мазин Александр Владимирович
7. Варяг
Фантастика:
альтернативная история
8.93
рейтинг книги
Государь

Золотой ворон

Сакавич Нора
5. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Золотой ворон

Черный Маг Императора 16

Герда Александр
16. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 16

Мастер 4

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

Барон ломает правила

Ренгач Евгений
11. Закон сильного
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Барон ломает правила

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

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

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

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

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

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

Неудержимый. Книга XV

Боярский Андрей
15. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XV

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

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

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости