在头文件中抑制Erlang“未使用的函数”警告

时间:2015-07-26 15:20:05

标签: erlang

我有一个头文件,里面有一些功能。 它意味着可扩展性;)

在这个头文件中,我使用-spec作为我的函数。 因为我的头文件包含在多个erl文件中并且具有一些未被所有erl文件使用的功能,所以我得到了没有使用的函数的警告(正在使用但在另一个erl文件中)。

例如:

我在这个例子中得到一个模块a的警告:函数headerExecute没有被使用,而模块c没有使用函数headerCount。

%% Shell %%
BPid = b:create(),
APid = a:create(BPid),
CPid = c:create(BPid).

-module(a).
-export([create/1, count/2, stop/1]).
-export([loop/1]).
-include("header.hrl").

create(Id) ->
  spawn(?MODULE, loop, [Id]).

count(Pid, Counter) ->
  Pid!{count, Ref = make_ref(), self(), Counter},
  receive
    {Ref, Result} -> Result
  end.

stop(Pid) ->
  Pid!{stop}.

loop(Id) ->
  receive
    {count, Ref, From, Counter}
      Result = headerCount(Id, Counter),
      From!{Ref, Result},
      ?MODULE:loop(Id);
    {stop} ->
      ok;
    _ ->
      ?MODULE:loop(Id)
  end.

-define(header, header).
-spec headerCount(pid(), integer()) -> integer().
-spec headerExecute(pid(), atom()) -> no_return().

headerCount(Pid, Counter) ->
  Pid!{count, Ref = make_ref(), self(), Counter},
  receive
    {Ref, Result} -> Result
  end.

headerExecute(Pid, Cmd) ->
  Pid!{execute, Cmd}.

-module(b).
-export([create/0, stop/1]).
-export([loop/0]).

create() ->
  spawn(?MODULE, loop, []).

stop(Pid) ->
  Pid!{stop}.

loop() ->
  receive
    {count, Ref, From, Counter} ->
      From!{Ref, Counter + 1},
      ?MODULE:loop();
    {execute, Cmd} ->
      %% Execute something with the command Cmd %%
      ?MODULE:loop();
    {stop} ->
      ok;
    _ ->
      ?MODULE:loop()
  end.

-module(c).
-export([create/1, execution/2, stop/1]).
-export([loop/1]).
-include(header).

create(Id) ->
  spawn(?MODULE, loop, [Id]).

execution(Pid, Cmd) ->
  Pid!{execution, Cmd}.

stop(Pid) ->
  Pid!{stop}.

loop(Id) ->
  receive
    {execution, Cmd} ->
      headerExecute(Id, Cmd),
      ?MODULE:loop(Id);
    {stop} ->
      ok;
    _ ->
      ?MODULE:loop(Id)
  end.

对于可伸缩性,它不是在erl文件中导出这些函数的选项,并且在头文件中导出这些函数会导致错误。

如何丢弃或删除这些警告?

编辑:我将此功能放在标题中,以便可以轻松地将新的erl模块添加到代码中并调整现有的erl模块,而无需触及其他erl模块。

提前致谢。

1 个答案:

答案 0 :(得分:1)

在头文件中使用nowarn_unused_function编译器参数。

-compile({nowarn_unused_function, [headerCount/2, headerExecute/2]})

但它没有任何可扩展性。你错了这个词。