How to get the preprocessed C / C++ source files?

12 06 2008


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.


Actions

Information

4 responses to “How to get the preprocessed C / C++ source files?”

16 06 2008
Nishad S (04:50:55) :

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… :)

17 06 2008
Jijo.Raj (04:33:39) :

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. ;)

25 06 2008
s (06:58:41) :

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.

25 06 2008
s (06:59:06) :

So this flag is used only for checking the preprocessed output of an input file.

Leave a comment

You can use these tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>