Прежде чем модуль Erlang будет скомпилирован, он автоматически обрабатывается препроцессором Erlang. Препроцессор расширяет любые макросы, которые могут быть в исходном файле, и вставляет любые необходимые файлы include.

Обычно вам не нужно смотреть на выход препроцессора, но в исключительных обстоятельствах (например, при отладке неисправного макроса) вы можете сохранить вывод препроцессора. Чтобы увидеть результат предварительной обработки модуля some_module.erl, вы получите команду оболочки ОС.

erlc -P some_module.erl
-module(helloworld). 
-export([start/0]). 
-include("user.hrl"). 

start() -> 
   io:fwrite("~w",[?macro1(1,2)]).

И если мы выполнили следующую команду из командной строки -

erlc –P helloworld.erl

Будет создан файл helloworld.P . Если вы откроете этот файл, вы найдете следующее содержимое, которое будет компилировать препроцессор.

-file("helloworld.erl", 1). -module(helloworld).

-export([start/0]).
-file("user.hrl", 1).
-file("helloworld.erl", 3).

start() ->
   io:fwrite("~w", [{1 + 2}]).