GCC compile time string comparison

Pintu Agarwal pintu.agarwal@gmail.com
Thu Aug 18 12:11:00 GMT 2011


Hi,

Thanks for yoru reply.

I got some reference from http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
          #define Scale_Value(X)      \
            (__builtin_constant_p (X) \
            ? ((X) * SCALE + OFFSET) : Scale (X))
Here it says that builtin function can be used inside macro.

But the folowing sample code does not work for me.
--------------------------------------------------------------------------------
#define CONFIG_DUAL_MODE        1
#define CHECK(X)        (__builtin_constant_p (X) \
                        ? (1) : (0))

int main()
{

        #if CHECK(CONFIG_DUAL_MODE)
                printf("Equal...\n");
        #else
                printf("Not Equal...\n");
        #endif


        return 0;
}
#gcc -o testmacro.out testmacro.c
ERROR :  error: missing binary operator before token "("
--------------------------------------------------------------------------------------
Please help me to fix this.



Thanks,
Pintu



On Thu, Aug 18, 2011 at 4:29 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>
> On 18 August 2011 11:52, Pintu Agarwal wrote:
> > Hi,
> >
> > I wanted to do compile time string const comparison in a macro call
> > but I could not find anything in GCC.
> >
> > I tried using __builtin_ extended option but it is not working inside a macro.
> > Here is the sample code:
> >
> > #define STRCMP(s1,s2)       __builtin_strcmp(s1,s2)
> >
> > int main()
> > {
> >        #if STRCMP("pintu1","pintu2")
> >                printf("Equal...\n");
> >        #else
> >                printf("Not Equal...\n");
> >        #endif
> >
> >        return 0;
> > }
> >
> > But I am getting this error : error: missing binary operator before token "("
> >
> > I tried other option such as __builtin_expect, __builtin_constant_p
> > etc but same problem when used inside macro call
>
> The preprocessor can only expand macros and perform simple arithmetic
> on constant expressions, it can't call functions. That includes
> builtin functions.
>
> Compile-time string comparison is just about possible by abusing C++
> templates, but you probably don't want to go there.



More information about the Gcc-help mailing list