On Apr 5, 3:40 pm, Azhar Hussain <azhar...@gmail.com> wrote:
> Few Important things about macros, before I explain the output
> 1. Macros are replaced in passes.
>  2. Macros are not recursive.
>
> regarding the output remember the rule for expansion
> "A parameter in the replacement list, *UNLESS* preceded by a # or ##
> preprocessing token or followed by a ## preprocessing token, is replaced by
> the  corresponding argument after all macros contained therein have been
> expanded".
> In other words, macros are replaced "inside out" unless # or ## exists
>
> printf("%s",g(f(1,2)));  is replaced as #f(1,2) ---> "f(1,2)" according to
> the replacement rule.
> printf("\t%s",h(f(1,2)));  As this does not replace with # or ## directly,
> "inside out" expansion leads to h("1,2") --> g('1,2") --> "1,2"
>
> for the first pass
> printf("%s", "f(1,2)");  ---> g(a) #a
> printf("\t%s", h("1,2"));
>
> second pass
> printf("%s", "f(1,2)");  ---->> not processed(exhausted)
> printf("\t%s", g("1,2")); --> h(a) g(a)
>
> Third pass
> printf("%s", "f(1,2)");  ---->> not processed(exhausted)
> printf("\t%s", "1,2");  --> g(a) #a
>
> Hope this answers your question.
>
> -
> Azhar.
>
> On Tue, Apr 5, 2011 at 3:22 PM, Vandana Bachani <vandana....@gmail.com>wrote:
>
>
>
>
>
>
>
> > Hi Arvind,
> > These are preprocessor specific operators. Check out
> >http://msdn.microsoft.com/en-us/library/wy090hkc(v=vs.80).aspx
>
> > -Vandana
>
> > On Tue, Apr 5, 2011 at 12:45 PM, Arvind <akk5...@gmail.com> wrote:
>
> >> #include<stdio.h>
>
> >> #define f(a,b) a##b
> >> #define g(a) #a
> >> #define h(a) g(a)
>
> >> int main()
> >> {
> >> printf("%s",g(f(1,2)));
> >> printf("\t%s",h(f(1,2)));
> >> return 0;
> >> }
>
> >> i have run this program in gcc compiler and getting : f(1,2) 12 as
> >> output.
> >> can anyone explain the reason for getting this output?
>
> >> --
> >> You received this message because you are subscribed to the Google Groups
> >> "Algorithm Geeks" group.
> >> To post to this group, send email to algogeeks@googlegroups.com.
> >> To unsubscribe from this group, send email to
> >> algogeeks+unsubscr...@googlegroups.com.
> >> For more options, visit this group at
> >>http://groups.google.com/group/algogeeks?hl=en.
>
> >  --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.
> > To post to this group, send email to algogeeks@googlegroups.com.
> > To unsubscribe from this group, send email to
> > algogeeks+unsubscr...@googlegroups.com.
> > For more options, visit this group at
> >http://groups.google.com/group/algogeeks?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to