2011-12-29 2 views
0

Ну, я спросил, как проверить каждый файл #include в файле. Может ли кто-нибудь дать мне пример, чтобы проверить, сколько #define s находится от начала файла до конца?Подсчет числа '# define's в файле

Я пытался, но безуспешно.

+0

Вы хотите проверить количество #defines в том же процессе или хотите прочитать исходный код из другого процесса - это не должно быть трудной задачей ..? –

+0

Я имел в виду: например, у меня есть .pro-файл (файл проекта), в файле есть # define & # include. Я хочу прочитать этот файл и проверить, сколько там # include и # define. – Kazuma

+0

Возможно, вы захотите опубликовать фрагмент файла .pro, чтобы ваша проблема была лучше понята. В противном случае это простое совпадение строк в Perl, например, на '/^\ s * #/&& (/ \ s * define/||/\ s * include)' where '\ s *' равно 0 или более пробелам. Выражение может быть неточным, но вы получаете идею. – Karlson

ответ

0

На Linux/UNIX:

egrep -c "\#include|\#define" <filename> 

Это даст вам количество вхождений обеих моделей в файле. Если вы хотите, отделенный:

grep -c \#include <filename> 

дает кол #include s

grep -c \#define <filename> 

дает кол #define s

grep \#include <filename> 

дает все строки для #include s

grep \#define <filename> 

дает все строки для #defines s

Если вы хотите быть фантазии и изощренными в Perl:

$include_count = 0; 
$define_count = 0; 
open SOURCE, $filename || die $!; 
while(<SOURCE>) 
{ 
    next if(!~ /include/ && !~ /define/); 
    $line = $_; 
    $orig_line = $line; 
    $line =~ s/^\s+//g; 
    next if($line !~ /^#); 
    if($line =~ /include/) 
    { 
     $include_count++; 
     print "$orig_line"; 
    } 
    if($line =~ /define/) 
    { 
     $define_count++; 
     print "$orig_line"; 
    } 
} 
print "Define count $define_count . Include Count: $include_count\n"; 

Это быстрый и грязный сценарий, так что вы можете основывать свое решение на этом или записать его в Python/C/C++ или любой другой язык, который вам подходит.

Смежные вопросы