Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[7]

Особый интерес представляет директива #pragma, которая позволяет указывать специальные опции компилятора.

Эта директива имеет следующий формат:

#pragma keyword options

где keyword - ключевое слово из таблицы 7.

Таблица 7 Варианты использования директивы #pragma

Директива

Описание

interuptlevel

Позволяет функции обработки прерываний быть вызванной из основной программы.

#pragma interuptlevel 2

Включает поддержку символов jis в обработчике строк.

#pragma jis

Запрещает поддержку символов jis в обработчике строк.

#pragma nojis

printfcheck

Включает проверку формата строк в стиле printf

#pragma printfcheck(printf)

Переименование секцию, определенную компилятором.

#pragma psect text=mytext

regsused

Явно указывает регистры которые используются в обработчике прерываний.

#pragma regsused w

Рассмотрим подробнее каждую из этих директив. #pragma jis и nojis

Если в вашей программе встречаются литералы, содержащие двухбайтные символы в кодировке JIS для Японии и проч., то данная директива управляет обработкой этих символов. (Как для меня, так не актуально)

#pragma prinfcheck

Некоторые библиотечные функции принимают в качестве аргумента строку формата с последующим списком аргументов переменной длины. Количество аргументов может быть разным в зависимости от строки формата наподобие функции ptintf. Несмотря на то, что строка формата интерпретируется во время выполнения программы, ее корректность может быть проверена на этапе компиляции. Эта директива как раз и включает такую проверку. Она по умолчанию включена в заголовочный файл <stdio.h>. Вы можите ее также включить и для ваших собственных функций, которые в качестве аргумента принимают список переменной длины. Учтите что уровень предупреждений компилятора должен быть установлен как минимум в -1, чтобы директива возымела действие.

#pragma psect

Обычно компилятор разбивает объектный код на фрагменты, которые размещены в именованных секциях, описанных в соответствующем разделе документации (я его не переводил - слишком глубоко...). Это поведение удовлетворяет потребностям большинства обычных приложений. Но иногда возникает необходимость перенаправить фрагмент в другую секцию. Когда возникнет, тогда и переведу этот фрагмент :-) #pragma regsused

Компилятор автоматически сохраняет контекст при возникновении прерывания. Но он определяет все те переменные и объекты, которые явно присутствуют в функции обработки прерываний. Чтобы ограничить количество сохраняемых переменных и объектов можно воспользоваться этой директивой.

Директива определяет поведение только первой по тексту программы функции обработки прерываний. В крутых контроллерах может быть несколько таких обработчико. В этом случае необходимо использовать эту директиву для каждой из функций.


5.8 Стандартные функции ввода-вывода

Несколько функций ввода-вывода поставляются в составе стандартной библиотеки. Основным их предназначением является ввод и вывод форматированного текста в стандартные потоки. Подробнее эти функции рассмотрены в разделе руководства "Функции стандартной библиотеки". Перечень поддерживаемых функций приведен в таблице.

Функция

Описание

prinf(char * s, ...)

Форматированная печать в stdout

sprintf(char * buf, char * s, ...)

Запись форматированного текста в buf

Перед тем, как станет возможным осуществлять запись-чтение текста необходимо описать служебные функции putch() и getch(), кроме них могут потребоваться getche() и kbhit().

В каталоге с примерами есть программы, где вы можите посмотреть реальную реализацию этих и других функций.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7]