我试图了解有关编译的设置宏的更多信息。
Erlang compile documentation显示可以定义宏:
{d,Macro} {d,Macro,Value}
Defines a macro Macro to have the value Value. Macro is of type atom, and Value can be any term. The default Value is true.
我尝试使用指令设置宏:
-module(my_mod).
-compile([debug_info, {d, debug_level, 1}]).
...
我如何在代码中使用此宏?例如,我试过这个:
my_func() ->
if
debug_level == 1 -> io:format("Warning ...");
true -> io:format("Error ...")
end.
但是'错误......'总是输出。
我哪里错了?
答案 0 :(得分:1)
您可以使用-define
:
-define(debug_level, 1).
如果您希望能够从编译命令行覆盖它,可以使用-ifndef
包装它:
-ifndef(debug_level).
-define(debug_level, 1).
-endif.
这样,如果用
编译erlc -Ddebug_level=2 file.erl
例如,然后宏将具有值2而不是默认值1。
要访问宏的值,请在其前面添加?
:
my_func() ->
if
?debug_level == 1 -> io:format("Warning ...");
true -> io:format("Error ...")
end.
请注意,由于?debug_level
是一个常量,因此您将从if
表达式中获取有关从不匹配的子句的编译器警告。