Реферат: Препроцессор языка C.
использовании всех директив препроцессора. (Длинное макроопределение можно
разбить на несколько строк с применением последовательности
backslash-newline.) Хотя существует одно исключение: символы перевода
строки могут быть вкючены в макроопределение если они находятся в строковой
или символьной константе, потому как макроопределение не может содержать
каких-либо специальных символов. Макроопределение автоматически дополняется
соответствующим специальным символом, который завершает строчную или
символьную константу. Комментарии в макроопределениях могут содержать символы
перевода строки, так как это ни на что не влияет, потому как все комментарии
полностью заменяются пробелами вне зависимости от того, что они содержат.
В отличие от выше сказанного, не существует никаких ограничений на
значение макроса. Скобки не обязательно должны закрываться. Тело макроса не
обязательно должно содержать правильный С код.
Препроцессор С обрабатывает программу последовательно, поэтому
макроопределения вступают в силу только в местах, где они используются.
Поэтому, после обработки следующих данных С препроцессором
foo = X;
#define X 4
bar = X;
получится такой результат
foo = X;
bar = 4;
После подстановки препроцессором имени макроса, тело макроопределения
добавляется к началу оставшихся вводимых данных и происходит проверка на
продолжение вызовов макросов. Поэтому тело макроса может содержать ссылки
на другие макросы. Например, после выполнения
#define BUFSIZE 1020
#define TABLESIZE BUFSIZE
значением макроса 'TABLESIZE' станет в результате значение '1020'.