0

Xがその数。

printf が改行で終わらないので行き詰まりました...

例えば

printf("hello "
       "world %d\n", 1);

戻るべき

printf1("hello "
       "world %d\n", 1);
4

2 に答える 2

1

Cコードを解析するには、 LL(1)パーサーが必要であるため、これに対する単純な(=スクリプトのような)ソリューションはありません。

ただし、スクリプトがさまざまなケースを処理できるように、すべてのコードを同じ方法でフォーマットできます。したがって、最初に行う必要があるのは、 :を含むprintfが含まないすべての行を見つけることです。);

grep "printf" ...files... | grep -v ");"

次に、出力が得られなくなるまでこれらのファイルを修正します。

于 2012-08-09T15:23:08.473 に答える
0

出発点として、コンマまたは閉じ括弧の前の二重引用符で囲まれた % 文字の数を計算する単純な Perl スクリプト。

perl -0777pe 's/printf\s*\(\s*\"((?:[^"]*\"\s*\")*[^"]*)\"\s*([,)]\s*)/
  my ($f, $c, $t) = ($1, $1, $2);
  sprintf("printf%i(\"%s\"%s", ($c =~ tr-%--), $f, $t) /ges'  files ...

これにより、引用符付き文字列、コメントなどの内部が置き換えられます。それはプレーンと同様にfprintfandをキャッチします。sprintfmyownsacredprintfprintf

于 2012-08-09T16:18:15.397 に答える