Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Erlang Programming/Macros

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Macros Macros are a tool to perform text transformation in the source code before it is compiled. In Erlang, a macro is defined as this: -define(LIKERT_SCALE, lists:seq(1, 5)). Usually macros are written in all caps, to differentiate them from ordinary variables. In order to use the macro, it is necessary to prepend a question mark to its name: A = ?LIKERT_SCALE. The code makes A = [1,2,3,4,5]. Some handy predefined macros include: ?MODULE (module name) ?LINE (line number) ?FILE (filename as a string) % =========================================== % Example code % =========================================== -module(test_macros). -define(LIKERT_SCALE, lists:seq(1, 5)). -compile(export_all). start() -> io:format("likert scale: ~w \n", [?LIKERT_SCALE]), io:format("module name: ~w \n", [?MODULE]), io:format("line number: ~w \n", [?LINE]), io:format("filename: ~s \n", [?FILE]), ok. % =========================================== % Example output % =========================================== % % 6> c(test_macros). % {ok,test_macros} % 7> test_macros:start(). % likert scale: [1,2,3,4,5] % module name: test_macros % line number: 10 % filename: ./test_macros.erl % ok Besides defining macros with -define, it is possible to conditionally compile code, depending on macro values. For this, one uses -idfdef, -ifndef, -else, -endif. -define(IMPORTANT_MACRO). -ifdef(?IMPORTANT_MACRO). f() -> "It is defined!" -else. f() -> "I do not see it defined anywhere!" -endif. In this example, the first version of f() will be compiled.