http://qs321.pair.com?node_id=951711


in reply to C code pre-processor

dgsmith_50:

The following definitely doesn't do everything you want, as it's a quick knockup. It'll need some tuning, but I think you can tweak it into something useful for you:

$ cat C_preprocessor_light.pl #!/usr/bin/perl # # see perlmonks 951682 # use strict; use warnings; my %DEF; my @fl_print = (1); while (<DATA>) { if (/^\s*#\s*define\s+(\w+)/) { $DEF{$1}=1; } elsif (/^\s*#\s*undef\s+(\w+)/) { delete $DEF{$1}; } elsif (/^\s*#\s*ifdef\s+(\w+)/) { push @fl_print, (exists($DEF{$1}) and $fl_print[-1]); } elsif (/^\s*#\s*ifndef\s+(\w+)/){ push @fl_print, (!exists($DEF{$1}) and $fl_print[-1]); } elsif (/^\s*#\s*endif/){ pop @fl_print if @fl_print > 1; } print if ($fl_print[-1]); } __DATA__ /* Foo */ #ifndef BLARG2 BAR #define BLARG #define GRAK zippy #ifdef BLARG happy #ifndef GRAK lucky #endif puppy #endif #foo #endif bloink

It doesn't hide exactly the lines I would want to hide, but it's close...

...roboticus

When your only tool is a hammer, all problems look like your thumb.