printf(msg);
はよく行われる。そして、C++ だと以下の様な例も見られる。
printf(obj.toString());
なぜこれが危険度大なのかと言うと、msg や toString() が% を含まないという保証が無いからだ。
例えば、SQL クエリ等、文法にて % の利用がある場合は、自殺行為以外の何物でもない。この様な、コードを書く者。この様なコードをコード査読の時に見付けない人々。そして、このコードでも動いていたと抜かすプロジェクトマネジャー等と関わった後は、これらの人々の評価を数段下げておいた方がいい。このような問題は、今後も散見されるのが世の常だから。
もちろん正しいコードはこの様になる。
printf("%s", msg);
そして、C++ でも同様だ。
printf("%s", obj.toString());
そうすると、遅くなると戯言を抜かす者も多いが、動いかないコードを作っておかれては、最適化以前の問題だ。
セコメントをする