m4-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ifdef usage


From: Eric Blake
Subject: Re: ifdef usage
Date: Tue, 21 Apr 2009 21:08:21 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Mehul Sanghvi <mehul.sanghvi <at> gmail.com> writes:

>    In case this is the wrong place for sending this question, please
> point me in the correct direction.

This is the correct place.

>    testing.m4
>    ========
>    define('VNC')

Incorrect quotes.  By default, m4 uses "`" and "'", not "'" and "'".  
Therefore, you ended up defining a macro literally named "'VNC'", rather than 
the intended "VNC".

>    ifdef('VNC', 'vnc is DEFINED', 'vnc is NOT DEFINED')

M4 performs macro expansion during argument collection.  Since you aren't using 
proper quote characters, this means that you effectively called:

ifdef(<expansion of 'VNC'>, ..., ...)

and since the expansion of "'VNC'" was defined as the empty string, you are 
testing whether the empty string is currently defined as a macro name.  It 
isn't, hence your surprise.

> 
> If I comment out the define(), and then do the following:
> 
>    bash% m4 -DVNC testing.m4
>    #define('VNC')
>    'vnc is NOT DEFINED'

Your command-line usage defined the macro "VNC", as you wanted.  Now 
that "'VNC'" is not a macro, your ifdef usage is checking whether "'VNC'" is 
defined, which it is not, still explaining your surprise.

> 
> Am I missing something or have I misunderstood what the manual says
> about how to use ifdef and -D ?

You misunderstood the portion about quoting characters.  Let us know if there 
is any way to improve the manual to make it more obvious that they are 
intentionally distinct strings.

-- 
Eric Blake







reply via email to

[Prev in Thread] Current Thread [Next in Thread]