C. Тема 2. Раздел 1
.pdfТема 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; |
|
|
|
??> |
|
/* } |
*/ |