Click here to Skip to main content
16,016,669 members
Articles / Programming Languages / C++
Tip/Trick

Macro expansion in VC++

Rate me:
Please Sign up or sign in to vote.
4.97/5 (19 votes)
4 Feb 2012CPOL 80.9K   9   29
Expanding a macro in VC++
Let us assume for some unknown reason, we have to write a macro [yes, yes, I know Macros are evil and can be substituted by in-line and template function friendlies - but just in case] or say if we are trying to understand an existing macro in some legacy code.

In these situations, it would be nice if we can see how exactly this macro is expanded by the compiler. This tip suggests a way to do so.

Look at this:

C++
//C:\Test\main.cpp

#define SQUARE(A) (A * A) 

void main(int argc, char* argv[])
{
    int y = 2;
    int s = SQUARE(++y); // Due to this the macro expands in a 
                         // different way and we will get abnormal results
                         // To debug, we have to see how this macro is expanded
                         // by the compiler 
}


We all know that the value of s will be 16 (rather than 4). To see how the macro expands,

Go to VS command prompt and enter:

C++
cl /EP C:\Test\main.cpp > C:\Test\macro.txt


This command will expand the macro and dump it in macro.txt. The dump looks like
C++
void main(int argc, char* argv[])
{
    int y = 2;
    int s = (++y * ++y);

}

See our macro is expanded.

And DO NOT down vote me:
  1. If you do not like macros (I too hate them, but ....)
  2. If this is old trick / re-post (I just want to share)


Yes, there could be many alternatives and this is one.

Thanks (:-

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead
India India
_____________________________________________________________

Did my masters from IIT-M in Advanced Manufacturing Technology and working mainly on C++ in CAD domain from 2004 onwards.
Working on web technologies using Angular 7.0 and above, HTML5, CSS3 from 2015.

Comments and Discussions

 
Generalgcc command Pin
Member 1413539130-Jan-19 15:55
Member 1413539130-Jan-19 15:55 
Questionone better way to check macro Expand Pin
ShenXiaoLong22-Oct-18 20:10
ShenXiaoLong22-Oct-18 20:10 
GeneralMy vote of 3 Pin
rahman_tanzilur0113-Jan-13 11:00
rahman_tanzilur0113-Jan-13 11:00 
nice
QuestionVS addin Pin
sokolov765-Aug-12 23:04
sokolov765-Aug-12 23:04 
AnswerRe: VS addin Pin
Lakamraju Raghuram6-Aug-12 1:51
Lakamraju Raghuram6-Aug-12 1:51 
GeneralRe: VS addin Pin
Carlos Bohaa Jaa29-Aug-14 1:12
Carlos Bohaa Jaa29-Aug-14 1:12 
GeneralRe: VS addin Pin
sokolov7614-Apr-15 3:20
sokolov7614-Apr-15 3:20 
GeneralMy vote of 5 Pin
Volynsky Alex19-May-12 1:33
professionalVolynsky Alex19-May-12 1:33 
GeneralRe: This way of analysis is cool .... how many will scroll thoug... Pin
Lakamraju Raghuram31-Jan-12 7:03
Lakamraju Raghuram31-Jan-12 7:03 
GeneralRe: Technically you should wrap the usage of macro arguments wit... Pin
Chuck O'Toole4-Feb-12 16:22
Chuck O'Toole4-Feb-12 16:22 
GeneralReason for my vote of 5 Good tip Pin
Manish K. Agarwal20-Feb-12 0:12
Manish K. Agarwal20-Feb-12 0:12 
GeneralReason for my vote of 5 Very well explained Pin
Joxemi7-Feb-12 4:42
Joxemi7-Feb-12 4:42 
GeneralReason for my vote of 5 Helped resolve 3rd party library API... Pin
mriddle6-Feb-12 13:06
mriddle6-Feb-12 13:06 
GeneralIt would add to the article to describe why the result is 16... Pin
nv33-Feb-12 2:41
nv33-Feb-12 2:41 
General(:- Pin
Lakamraju Raghuram31-Jan-12 7:02
Lakamraju Raghuram31-Jan-12 7:02 
GeneralReason for my vote of 5 A nice tip for "What to care of..." Pin
Jose David Pujo31-Jan-12 4:59
Jose David Pujo31-Jan-12 4:59 
GeneralHa! got you buddy.... It is copy-paste problem, I just chec... Pin
Lakamraju Raghuram30-Jan-12 8:26
Lakamraju Raghuram30-Jan-12 8:26 
GeneralRe: +5 Pin
Albert Holguin30-Jan-12 9:33
professionalAlbert Holguin30-Jan-12 9:33 
GeneralRe: At first glance, I was sure that the result of "s" should be... Pin
Jose David Pujo31-Jan-12 4:57
Jose David Pujo31-Jan-12 4:57 
GeneralI know what I am doing. I intended to show an example where ... Pin
Lakamraju Raghuram29-Jan-12 19:07
Lakamraju Raghuram29-Jan-12 19:07 
GeneralRe: The reason you got a downvote was for not doing this: <code>... Pin
Albert Holguin30-Jan-12 4:53
professionalAlbert Holguin30-Jan-12 4:53 
GeneralRe: The reason you got a downvote was for not doing this:... Pin
PIEBALDconsult27-Jul-12 10:36
mvePIEBALDconsult27-Jul-12 10:36 
GeneralRe: The reason you got a downvote was for not doing this:... Pin
Albert Holguin27-Jul-12 11:19
professionalAlbert Holguin27-Jul-12 11:19 
GeneralRe: The reason you got a downvote was for not doing this:... Pin
PIEBALDconsult27-Jul-12 14:12
mvePIEBALDconsult27-Jul-12 14:12 
GeneralRe: The reason you got a downvote was for not doing this:... Pin
Albert Holguin27-Jul-12 16:07
professionalAlbert Holguin27-Jul-12 16:07 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.