मैं हमेशा इस धारणा के तहत रहा हूं कि मुझे लूप के अंदर एक चर परिभाषित नहीं करना चाहिए क्योंकि यह अनावश्यक या अपमानजनक है। recv के लिए दस्तावेज़()यह बफर एक लूप के अंदर क्यों परिभाषित किया गया है?
while (totalBytesRecvd < echoStrLen)
{
char buffer[BUFSIZE];
numBytes = recv(sock, buffer, BUFSIZE - 1, 0);
...
totalBytesRecvd += numBytes;
buffer[numBytes] = '\0';
fputs(buffer, stdout);
}
यह कैसे बफर सूचक का उपयोग करता है के बारे में कुछ भी उल्लेख नहीं है: यह मैं आश्चर्य निम्नलिखित recv() फ़ंक्शन लूप के प्रत्येक यात्रा के लिए एक ताजा बफर की जरूरत है बनाता है। बेहतर समझने के लिए, मैंने लूप से ठीक पहले बफर को परिभाषित करने का प्रयास किया, और recv() को फिर से परिभाषित करने के बजाय बफर को ओवरराइट करना प्रतीत होता है। जो समझ में आता है क्योंकि recv() बफर की शुरुआत में एक सूचक पारित किया जाता है।
क्या लूप के अंदर बार-बार एक बफर को परिभाषित करने का एक विशिष्ट कारण है? या यह मेरी सही समझ है?
+1, मेरे उत्तर से काफी बेहतर रखा गया है। – Martin
सभी बहुत उपयोगी (और समान) उत्तर अब तक है। क्या कोई मुझे अपने स्रोत पर इंगित कर सकता है? या क्या मैं इसे अपने कंपाइलर दस्तावेज़ में ढूंढ सकता हूं? संकलक अनुकूलन को सी प्रोग्रामिंग पुस्तक में पढ़ा गया था जिसे मैंने पढ़ा था। – Nocturno
मेरा स्रोत संकलक द्वारा उत्पन्न असेंबलर को देखने में बहुत अधिक समय बिताया गया है :)। सामान्य रूप से, इस तरह के अनुकूलन के बारे में चिंता मत करो। सही नौकरी के लिए सही एल्गोरिदम का उपयोग करें, और केवल इन प्रकार के tweaks पर विचार करें यदि आप कोड * जरूरत * अनुकूलन का एक टुकड़ा प्रदर्शित कर सकते हैं। – Martin