Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: C code pre-processor

by roboticus (Chancellor)
on Feb 03, 2012 at 20:46 UTC ( #951711=note: print w/replies, xml ) Need Help??

in reply to C code pre-processor


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 #!/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...


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

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://951711]
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2023-12-08 06:57 GMT
Find Nodes?
    Voting Booth?
    What's your preferred 'use VERSION' for new CPAN modules in 2023?

    Results (35 votes). Check out past polls.