Understanding Macro Heavy Code

Why read this?
It’s tough to make sense of code full of MACROs. Here is a solution to see your code with the MACROs replaced.

I have recently worked with many open-source projects, which made it evident that developers love using macros. How did I deal with it?

MACROS can make it difficult to read code. For example, here is an extract of LwIP:

We are going to create some “magic” to easily lets you see any code where MACROS’ definitions are replaced by their content, something like this:

How to?

1st, Most Important: Make sure you have the “Save Macro Expansion Set” checked in the project setup.
It’s under Project >> Configure Project >> C++ >> Options.

2nd, create a file named RemoveMacro.pl with the following PERL code:

use Understand;
die “Must be run from within Understand” if !Understand::Gui::active();
die “Must be run with a db open” if !Understand::Gui::db();
my $db = Understand::Gui::db();
my $filename = Understand::Gui::filename();
my $fileent = $db->lookup($filename,”File”);
if ($fileent) {
my $lexer = $fileent->lexer(1,8,1,1);
foreach my $lexeme ($lexer->lexemes()) {
my $lexeme_text = $lexeme->text();
printf($lexeme_text);
}}

3rd, Once you have created the script, Follow this 2-minute video’s instructions to set it up in your Understand Environment as a “User Tool”.

Note: (from Ken)

Another way to see macro definitions in Understand is to hover over a macro name anywhere you see it. Understand will show you its definition at that point in the code.

This is just one at a time, so it’s not as readable in total as the expand in source approach described in this article. I’m just adding it for completeness.