#defineで始まり、\で終わる文字列を探します。

#defineで始まり、\で終わる文字列を探します。

Cコードでマクロ定義を最適化しようとしています。同様に、Cファイル内のすべてのマクロを抽出し、この特定のマクロ定義の発生回数を見つける必要があります。

私のマクロ定義の形式は次のとおりです。

#MACRO_NAME定義DEFN_LINE1 \
DEFN_LINE2\
DEFN_LINE3

だから私の論理は

  1. 正規表現を使用して上記の出力をMacroLineExtract.txtファイルにリダイレクトして、「#define」で始まり、「\」で終わる行のリストを見つけます。
  2. MacroLineExtract.txtからすべての「#define」を削除==> MACRO_NAME DEFN_LINE1 \
  3. MACRO_NAMEの後のスペース===>末尾の文字列を削除してください。
  4. 上記の出力を、マイコードのMACROSリストのみを含むMacros.txtファイルに保存します。
  5. Macros.txt から 1 行ずつインポートし、コードで MACRO_NAME が何回表示されるかを調べる bash スクリプトを作成します。

私のCファイルで「#define」で始まり、「\」で終わるすべてのマクロを見つける正規表現/ awkを書くのに役立ちますか?より良い論理があれば提案してください。

ベストアンサー1

使用活気に満ちたctags:

$ ectags --c-kinds=d *.[ch]

ectagsVi / VimやEmacsなどのエディタがソースコードを簡単にナビゲートするために使用できる「タグファイル」を生成するために使用される「タグファイル」の拡張ctagsバージョン。etagsCの構文規則を理解しているので、Cコードを解析できます(したがって正規表現について心配する必要はありません)。

私たちはCコードラインにのみ興味があると--c-kinds=d聞きました。ectags#define

これで、現在のディレクトリにtags次の内容を含むファイル名ができました。

DEVELOPER       bayes.h 225;"   d
DIFFERENT       bayes.h 227;"   d
DIR_MIN bayes.h 338;"   d
DNA     bayes.h 242;"   d
DOLLAR  bayes.h 309;"   d
DOLLO   bayes.h 276;"   d
DOWN    bayes.h 215;"   d

つまり、各行(複数のヘッダー行を除く)は、マクロ名、マクロを含むソースファイル、および行番号を識別します。マクロが複数のファイルで定義されている場合は、発生ごとに1回ずつ一覧表示されます。最後はdタグタイプインジケータ(#defines)です。

各マクロが定義された回数のみを計算したい場合:

$ cut -f 1 tags | uniq -c

おすすめ記事