मैं कोड के इस टुकड़े है में शुरू नहीं किए गए चर का निर्धारण,कुलपति ++
#include <iostream>
void foo(int *a)
{
std::cout<<*a<<std::endl;
}
int main()
{
int i;
foo(&i);
}
जो स्पष्ट है कि एक गैर-आरंभिकृत चर का इस्तेमाल किया जा रहा है।
मैंने /RTCu की कोशिश की है और साथ ही error C4700 पर भरोसा किया है, लेकिन उपरोक्त कोड के लिए, कंपाइलर इसे एक त्रुटि के रूप में फ़्लैग नहीं कर रहा है।
मैंने कोड विश्लेषण चलाने की भी कोशिश की, बिट कोड कोड के रूप में रिपोर्ट की गई कोई समस्या नहीं है।
तो हमारे स्रोत कोड में अनियमित चर निर्धारित करने का विश्वसनीय तरीका क्या है?
मुझे पता है valgrind
यहां एक अद्भुत जॉब करता है लेकिन यह मेरे लिए एक विकल्प नहीं है क्योंकि मेरे पास विंडोज एपीआई और एमएफसी के लिए बहुत सी कॉल हैं।
यह आपके लिए "स्पष्ट" है लेकिन संकलक के लिए नहीं: आप एक सूचक संकेत के माध्यम से चर (एक इनलाइन) फ़ंक्शन को पास करते हैं (ध्यान दें कि फ़ंक्शन इनलाइन बनाना और इनलाइनिंग सक्षम करना जीसीसी के साथ चेतावनी को ट्रिगर करता है)। अब, कोई जवाब नहीं, लेकिन पहली जगह में अनियमित चर को परिभाषित क्यों करें? समस्याओं से बचने का एक आसान तरीका यह है कि इसे परिभाषित करते समय हमेशा एक वैरिएबल प्रारंभ करना है (जिसका अर्थ यह है कि इसे तब तक परिभाषित नहीं किया जाता जब तक आप इसे प्रारंभ नहीं कर सकते)। –
@gx_: मैं अनियमित चर को परिभाषित नहीं कर रहा हूं लेकिन संभावित मुद्दों के लिए कोड बेस को स्वच्छ कर रहा हूं। इसके अलावा मैं असहमत हूं कि यह आपके लिए स्पष्ट है लेकिन संकलक के लिए नहीं। मेरे बिंदु को साबित करने के लिए मुझे उपरोक्त कोड आधार पर वालग्रिंड चलाने और इसकी प्रतिक्रिया निर्धारित करना है। – Abhijit
उत्तर के लिए धन्यवाद (मुझे "मेरा कोड नहीं" पर संदेह था, लेकिन इसे सटीक करने के लिए कुछ भी लागत नहीं है)। लेकिन मैं बनाए रखता हूं, यह स्पष्ट रूप से संकलक के लिए _not_ स्पष्ट नहीं है; अगर यह था तो यह चेतावनी देगा ('foo' इनलाइन बनाएं और _then_ यह कंपाइलर के लिए स्पष्ट हो जाता है)। इसके अलावा valgrind एक कंपाइलर नहीं है और न ही एक स्थिर विश्लेषण उपकरण है लेकिन एक _dynamic_ चेकर है। –