私はいつも、ループの中に変数を定義するべきではないという印象を受けました。なぜこのバッファはループの内部で定義されていますか?
while (totalBytesRecvd < echoStrLen)
{
char buffer[BUFSIZE];
numBytes = recv(sock, buffer, BUFSIZE - 1, 0);
...
totalBytesRecvd += numBytes;
buffer[numBytes] = '\0';
fputs(buffer, stdout);
}
のrecvのドキュメントを()、それはバッファポインタをどのように使用するかについては何も言及していない:これは、次のrecv()関数は、ループの反復ごとに新鮮な緩衝液を必要とする場合、私は思ってしまいます。理解を深めるために、私はループの直前でバッファを定義しようとしましたが、recv()はバッファを上書きするように見えます。これは、recv()がバッファの先頭にポインタを渡してから意味があります。
ループ内でバッファを何度も何度も定義する特別な理由はありますか?それとも私の基本的な理解は正しいのでしょうか?
+1、私の答えよりもはるかに良い。 – Martin
非常に参考になりました。誰も私のソースに私を指摘できますか?あるいは、コンパイラのドキュメントでこれをすべて見つけることができますか?コンパイラの最適化は、私が読んだCプログラミングの本で光りました。 – Nocturno
私のソースは、コンパイラによって生成されたアセンブラを見過ぎるのに時間がかかります:)。一般に、この種の最適化については心配しないでください。適切なアルゴリズムに適切なものを使用して、コード*ニーズ*の最適化を実証することができれば、これらの種類の調整だけを検討してください。 – Martin