Xがその数。
printf が改行で終わらないので行き詰まりました...
例えば
printf("hello "
"world %d\n", 1);
戻るべき
printf1("hello "
"world %d\n", 1);
Cコードを解析するには、 LL(1)パーサーが必要であるため、これに対する単純な(=スクリプトのような)ソリューションはありません。
ただし、スクリプトがさまざまなケースを処理できるように、すべてのコードを同じ方法でフォーマットできます。したがって、最初に行う必要があるのは、 :を含むprintf
が含まないすべての行を見つけることです。);
grep "printf" ...files... | grep -v ");"
次に、出力が得られなくなるまでこれらのファイルを修正します。
出発点として、コンマまたは閉じ括弧の前の二重引用符で囲まれた % 文字の数を計算する単純な 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 ...
これにより、引用符付き文字列、コメントなどの内部が置き換えられます。それはプレーンと同様にfprintf
andをキャッチします。sprintf
myownsacredprintf
printf