![]()
Everybody knows that before the real compilation, the source file will undergo the stage called preprocessing. All the compiler preprocessors such as #include, #define etc will be processed in this stage and that intermediate preprocessed file, which is the real source - will be fed to compiler for compiling. Its a bit difficult to troubleshoot problems with preprocessor( especially macro expansions ) because, the processed intermediate file is not available. But is to possible to get it?
![]()
Ofcourse. You can use the compiler option /P. Take the project settings, In the C/C++ tab add the /P to compiler options. See the screenshot below.

Now if you take your source folder, you can see files with extension *.i
So if you’ve some trouble in macro expansion, just generate the intermediate file and check.
![]()
Open the generated intermediate file and see the contents. I’m sure you can’t believe your eyes.
![]()
Targeted Audience - Beginners.

Really nice and useful tip.
But got link error when I used that. I created a dlg based app. And given the /P option and built the source. Then I got a link error LINK : fatal error LNK1104: cannot open file “.\Debug\PreProcExp.obj”
If I remove the /P option then I will get the build successfully.
Anyway I could see the intermediate macro expanded files…
Nishad, You are right. Me too had the same link error. But the intermediate files are generated. Happy to know that the /P serve your need.
During this process actual object file generation is not done. Thats why the link error. This /P flag can be used evenif some compilation errors are present in the source file
So this flag is only checking the preprocessed output of an input file.
So this flag is used only for checking the preprocessed output of an input file.