m4 - макропроцессор
m4 [-e] [-s] [-Bцелое] [-Hцелое] [-Sцелое] [-Tцелое] [-Dимя[=значение] [-Uимя] [файл ...]
Макропроцессор m4 предназначен для макрогенерации на предварительном проходе в языках RATFOR, C и других. Все файлы-аргументы обрабатываются по очереди. Если файлы не указаны, или в качестве имени файла задан -, то читается стандартный ввод. Обработанный текст записывается на стандартный вывод.
Допустимы следующие опции:
-e Работать интерактивно. Прерывания игнорируются и вывод не буферизуется.
-s Разрешить вывод операторов #line для C-препроцессора.
-Bцелое Сменить размеры буфера повторного сканирования и буфера, в котором накапливаются аргументы. По умолчанию размер равен 4096.
-Hцелое Сменить размер хэш-таблицы имен с 199 по умолчанию. Размер должен быть простым числом.
-Sцелое Сменить размер стека вызовов со 100 элементов по умолчанию. Макрос занимает 3 ячейки в стеке вызовов; аргумент занимает одну ячейку.
-Tцелое Изменить размер буфера лексем с 512 байт по умолчанию.
Чтобы эти опции действовали, они должны располагаться перед всеми именами файлов и перед опциями -D и -U:
-Dимя[=значение] Эта опция определяет имя равным значению или пустой цепочке, если значение отсутствует.
-Uимя Делает имя неопределенным.
Макровызовы имеют следующий вид:
имя(арг1,арг2, ...аргn)
Левая скобка должна следовать непосредственно за именем макроса. Если за именем определенного макроса не следует (, то полагается, что макрос вызван без аргументов. Имя макроса может состоять из букв, цифр и символов подчеркивания, причем первым символом не может быть цифра.
В процессе сбора аргументов m4 игнорирует не заключенные в кавычки начальные пробелы, табуляции и символы перевода строки. Для того, чтобы запретить интерпретацию цепочки символов, их заключают между правой и левой одинарными кавычками:
`эта цепочка не интерпретируется'
Значение цепочки символов, заключенной в кавычки, равно самой этой цепочке без внешних кавычек.
Когда имя макроса распознано, его аргументы собираются путем поиска парной правой скобки. Если аргументов оказалось меньше, чем используется в определении макроса, то последним аргументам будут даны пустые значения. В процессе сбора аргументов продолжается макрообработка и все не взятые в кавычки запятые и правые скобки, которые образовались в результате вложенных макровызовов, действуют так же, как будто они встретились в исходном тексте. После сбора аргументов значение макроса сканируется повторно, так как если бы оно было в исходном тексте.
M4 предоставляет следующие встроенные макросы, которые могут быть переопределены, но в этом случае их первоначальный смысл теряется. Значения встроенных макросов, если не оговорено противное, равны пустой цепочке.