>>>Run this example:
>>>
>>>#define INP
>>>#define REF
>>>#define OUT
>>>
>>>? INP REF OUT
>>>? INP REF
>>>? INP
>>>
>>>? INP OUT REF
>>>? INP OUT
>>>
>>>
>>>
>>>Why preprocesor ignoring each second constant at compiling?
>>
>>Better question: why didn't it catch that your #define statements are bad? The expressions are missing. Yet it compiles without a hitch.
>>
>An empty is not a bad #define.
>A string preprocessor has to allow to define empty strings.
The syntax is "#define pseudovariable expression" - so the expression is not an optional clause. The expression may evaluate to an empty string:
#define out ""
would be proper syntax, and the pseudovariable "out" would evaluate to empty string. In Martin's case, I think the preprocessor should report something like "missing expression" instead of compiling OK and having mysterious output later.