मैं कुछ कोड देख रहा था जिसे एक दोस्त ने मुझे भेजा था, और उसने कहा: "यह संकलित करता है, लेकिन काम नहीं करता"। मैंने देखा कि वह कोष्ठकों कार्यों के लिए इस्तेमाल किया, कुछ इस तरह:जब मैं ब्रांड्स के बिना फ़ंक्शंस का उपयोग करता हूं तो C++ संकलक शिकायत क्यों नहीं करता है?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
पहले मैं था "उपयोग कोष्ठक, आप के लिए है" कहा। और फिर मैंने उस कोड का परीक्षण किया - यह संकलित करता है, लेकिन जब निष्पादित किया जाता है तो काम नहीं करता है (नहीं "हैलो वर्ल्ड" दिखाया गया है)।
तो, यह संकलन क्यों करता है (कंपाइलर जीसीसी 4.7 से बिल्कुल कोई चेतावनी नहीं), लेकिन काम नहीं करता है?
यह वास्तव में काम करता है। 'foo' को एक फ़ंक्शन पॉइंटर के रूप में माना जाता है। रेखा 'foo;' प्रभाव के बिना सिर्फ एक रेखा है। यदि आप अपनी चेतावनियों को अधिकतम में बदल देते हैं तो आपको बिना किसी बयान के बारे में चेतावनी मिलनी चाहिए। – RedX
मैं देखता हूं * "चेतावनी: कथन एक संदर्भ है, कॉल नहीं, 'foo'" * और * "चेतावनी: कथन का कोई प्रभाव नहीं है" *। आप शायद -Wall -Wextra – Flexo
के साथ संकलित करना चाहते हैं (भविष्य के प्रश्नों के लिए अपने नमूने को पूरा करने के लिए '# शामिल' और किसी भी नेमस्पेस सामान को डालने के लायक है) –
Flexo