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@xxxxxxxxx> 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.