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

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

Жанры

Программирование на 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

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

Родословная. Том 6

Ткачев Андрей Юрьевич
6. Линия крови
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 6

Дважды одаренный. Том VIII

Тарс Элиан
8. Дважды одаренный
Фантастика:
боевая фантастика
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Дважды одаренный. Том VIII

Я еще не бог. Книга XXXV

Дрейк Сириус
35. Дорогой барон!
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Я еще не бог. Книга XXXV

Двойник короля 11

Скабер Артемий
11. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 11

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

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

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

Винокуров Юрий
29. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXIX

Корректировщик

Головачев Василий Васильевич
Фантастика:
научная фантастика
6.25
рейтинг книги
Корректировщик

Тыл-фронт

Головин Андрей
Проза:
военная проза
проза прочее
5.00
рейтинг книги
Тыл-фронт

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

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

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

Снега

Чепурин Юлий Петрович
Поэзия:
драматургия
5.00
рейтинг книги
Снега

Врубель

Коган Дора Зиновьевна
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Врубель

Солнечный флот

Вайс Александр
4. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Солнечный флот

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6