0

それを学んだことで、

printf("%*s", 10, "");

と同じです

printf("%10s", "");

これらのうち、より高速で効率的で、よりコンパイラーフレンドリーなのはどれですか?

4

3 に答える 3

6
printf("%*s", 10, "");

それは10個のスペースを印刷します。

printf("%10s", 10, "");

それは正しくありません。確かにあなたは意味しました:

printf("%10s", "");

これも10個のスペースを出力します。

printf正直なところ、どちらが高速かはわかりません。特定の実装に依存する可能性があります。最初のバージョンでは、追加の引数を処理する必要があります。2 番目には、文字シーケンス,から解析する必要のない値printfが与えられます。int'1''0'

しかし、ターミナル ウィンドウ (選択したフォントのスペース文字表現の各ピクセルをレンダリングする) であるかどうかにかかわらず、これらの 10 バイトのデータを出力デバイスに書き込むコストと比較して、パフォーマンスの違いは取るに足らないものである可能性が高いと確信しています。ディスプレイに)、ディスク上のファイルに (読み取り/書き込みヘッドが所定の位置に移動し、プラッターが書き込みたいポイントに回転するのを待ちますが、その多くは並行して行われる可能性があります)、またはネットワーク接続 (お分かりでしょう)。

パフォーマンスの違いが重要な場合があります。strlen()ループを 1 回呼び出して結果を保存できる場合は、ループの反復ごとに呼び出さないでください。Quicksort を使用できる場合は、Bubblesort を大きな配列に使用しないでくださいqsort()

これはそれらのケースの 1 つではありません。

代わりに、あなたの意図を最も明確に表すものを何でも書いてください。正確に 10 個のスペースが必要であることがわかっている場合は、おそらく次のように記述しprintf("%10s", "");ます。スペースの数が実行時に決定される場合は、 と書くかもしれませんprintf("%*s", n, "");

また、より単純なコードを作成すれば、最初から正しく理解できる可能性が高くなります。プログラムの修正と再コンパイルにどれだけの CPU サイクルを使用するか想像してみてください。

どちらがより「コンパイラに優しい」かについては、それが何を意味するのかわかりません。コンパイラに仕事をさせても、コンパイラは気分を害することはありません。

于 2013-10-22T06:30:36.310 に答える