Conditional Macros

Richard Carlsson <>
Fri Aug 11 12:31:42 CEST 2006


theeepan wrote:
> Isn’t the following treatment of conditional macros applicable? I get 
> ‘syntax error’ on compilation
> 
> init(State) ->
>             {ok,{{one_for_one, 100, 3600},
>                  [
> -ifdef(WITH_SPEC1).
>                  Child_spec1,
> -endif.
>                  Child_spec2,
>                  Child_spec3,
>>                  ]
>             }}.

No. Each section that ends with '.' (and is followed by at least
one character of whitespace, or end of file, or a comment) is
treated separately. So the section that starts with 'init' does
not end at the '}}.', but at the 'WITH_SPEC1).', and the next
section is 'Child_spec1, -endif.', and so on. Even the
preprocessor follows this rule, so your example does not work.

You can rewrite your example to something like this:

   init(State) ->
       {ok,{{one_for_one, 100, 3600}, specs()}}.

   specs() ->
     optional_specs()
     ++ [Child_spec2,
         Child_spec3,
         …
        ].

   -ifdef(WITH_SPEC1).
   optional_specs() ->
     [Child_spec1,...].
   -else.
   optional_specs() -> [].
   -endif.


	/Richard




More information about the erlang-questions mailing list