Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C. Тема 2. Раздел 1

.pdf
Скачиваний:
15
Добавлен:
21.03.2016
Размер:
808.3 Кб
Скачать

Тема 2. Профессиональное программирование. Раздел 1. Препроцессор

Основы препроцессоров

Триграфы

Включение

Макросы

Условная компиляция

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

Встроенные макросы

Часть 1

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

Примеры препроцессоров

Система компьютерной вёрстки TeX

PHP – Hypertext Preprocessor

Лексический препроцессор – низкоуровневый препроцессор, выполняющий только лексический анализ исходного текста

Обрабатывается только исходный текст перед парсингом

Осуществляется простая замена лексем и специальных символов заданными последовательностями символов, в соответствии с правилами

Типовые возможности лексических препроцессоров

Замена макросов

Подключение файлов

Условная компиляция

Препроцессор языка Си является лексическим препроцессором

Основные возможности

Замена триграфов

Замена комментариев пустыми строками

Включение файла (#include)

Макро-подстановки (#define, #undef)

Условная компиляция (#if, #ifdef, #ifndef, #else, #endif)

Дополнительные команды

Часть 2

Триграф – последовательность из трёх символов, первые два из которых вопросительные знаки, а третий указывает на значение триграфа

Причина появления тригафов – отсутствие некоторых символов на старых клавиатурах

 

 

 

 

 

 

 

 

 

Триграф

Эквивалентный символ

 

 

 

 

 

 

??=

#

 

 

 

 

 

 

??/

\

 

 

 

 

 

 

??'

^

 

 

 

 

 

 

??(

[

 

 

 

 

 

 

??)

]

 

 

 

 

 

 

??!

|

 

 

 

 

 

 

??<

{

 

 

 

 

 

 

??>

}

 

 

 

 

 

 

??-

~

 

 

 

 

 

 

 

 

 

 

??=include <stdio.h>

/* #

*/

int

main(void)

 

 

 

??<

 

/*

{

*/

 

char n??(5??);

/*

[ and ]

*/

/* ??- = ~; ??‘ = ^ and ??! = | */ n??(4??) = '0' - (??-0 ??' 1 ??! 2);

/* ??/ = \

*/

 

 

printf("%c??/n",

n??(4??)");

 

return 0;

 

 

 

??>

 

/* }

*/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]