मैं युक्त जानकारी(), डीबग() और त्रुटि() फ़ंक्शंस के साथ log.c फ़ाइल बनाना चाहता हूं। ये फ़ंक्शन प्रिंटिंग फ़ाइल नाम, लाइन नंबर, आदि के बिना काम कर रहे हैं। तो जब मैं इस फ़ंक्शन में से किसी एक को कॉल करता हूं तो मैं फ़ाइल नाम, लाइन नंबर और कॉलर का फ़ंक्शन नाम डंप करना चाहता हूं। तो हम वास्तव में वापस कैसे पता लगा सकते हैं? क्या सी पर वापस पता लगाने का कोई तरीका है या यदि हम मैक्रोज़ का उपयोग करते हैं, तो यह कैसे किया जा सकता है?फ़ाइल नाम, लाइन नंबर और कॉलिंग फ़ंक्शन का फ़ंक्शन नाम प्रिंट करें - सी प्रोग
उत्तर
मैं मानकों के माध्यम से कार्य करने के लिए डेटा दे देते हैं (शायद एक मैक्रो की मदद मिल)
int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int debug(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int error(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
और उन्हें फोन करने के लिए
info(__FILE__, __LINE__, __func__, ...);
debug(__FILE__, __LINE__, __func__, ...);
error(__FILE__, __LINE__, __func__, ...);
नोट: __func__
C99 है; जीसीसी, मोड में C89 है __FUNCTION__
क्या इस तरह के कार्यों को बनाने के लिए कोई तरीका है, बिना __FILE __, .. आदि पैरामीटर पास किए बिना? – sura2k
हाँ, एक मैक्रो के साथ। उदाहरण के लिए, सी 99 के लिए (जिसमें वैरैडिक मैक्रोज़ हैं): '# परिभाषित जानकारी (...) जानकारी (__ FILE__, __LINE__, __func__, __VA_ARGS __)' – pmg
धन्यवाद! मुझे यही चाहिए। – sura2k
यदि आप मैक्रोज़ का उपयोग करते हैं, तो मेरा मानना है कि आप __FILE__
,और __FUNCTION__
का उपयोग करके यह काम कर सकते हैं। उदाहरण के लिए,
#define INFO(msg) \
fprintf(stderr, "info: %s:%d: ", __FILE__, __LINE__); \
fprintf(stderr, "%s", msg);
तुम भी कार्यों इस्तेमाल कर सकते हैं, लेकिन आप यकीन है कि वे सही मूल्य था बनाने के लिए __FILE__
में पारित करने के लिए, आदि की आवश्यकता होगी।
'gcc -std = gnu99' कहता है '__LINE__' एक पूर्णांक है और इसे' char * 'पर कास्टिंग करने के बारे में चेतावनी देता है। दूसरी पंक्ति 'fprintf (stderr, "जानकारी नहीं होनी चाहिए:% s:% d:", __FILE__, __LINE__); \ '('% s' '% d' द्वारा प्रतिस्थापित किया गया है)? – matec
फिक्स्ड! वहां कुछ पुराने स्कूल पायथन लेना। – Michael
- 1. पायथन लॉगिंग (फ़ंक्शन का नाम, फ़ाइल का नाम, लाइन नंबर) एक फ़ाइल का उपयोग करके
- 2. node.js में कॉलिंग फ़ंक्शन का नाम और रेखा प्राप्त करें
- 3. println() में फ़ंक्शन का नाम प्रिंट करना?
- 4. सीपीपी पूर्वप्रक्रमक और फ़ाइल नाम के basename, लाइन नंबर स्ट्रिंग
- 5. सी प्रोग में किसी फ़ंक्शन का अंतिम पता कैसे खोजें?
- 6. कमांड लाइन प्रिंट फ़ाइल नाम आउटपुट फ़ाइल
- 7. वर्तमान फ़ंक्शन का नाम कैसे प्राप्त करें?
- 8. सी ++ वर्तमान फ़ंक्शन नाम स्ट्रिंग
- 9. सी # में फ़ंक्शन पॉइंटर से फ़ंक्शन नाम कैसे प्राप्त करें?
- 10. बैकट्रैक()/backtrace_symbols() फ़ंक्शन नाम प्रिंट करने के लिए कैसे करें?
- 11. फ़ंक्शन कॉल से फ़ंक्शन कॉल नाम निकालने
- 12. GDB फ़ंक्शन नाम
- 13. Grep सूची फ़ाइल नाम और लाइन संख्या
- 14. कॉलिंग विधि और कक्षा का नाम कैसे निर्धारित करें?
- 15. फ़ंक्शन का नाम कैसे प्राप्त करें?
- 16. एक्शनस्क्रिप्ट - वर्तमान फ़ंक्शन का नाम प्राप्त करें
- 17. फ़ंक्शन नाम को स्ट्रिंग
- 18. DLL फ़ंक्शन नाम
- 19. वर्तमान फ़ंक्शन नाम लॉगिंग
- 20. जीसीसी फ़ंक्शन नाम संघर्ष
- 21. PHP: संदिग्ध फ़ंक्शन नाम
- 22. जावास्क्रिप्ट: किसी अन्य फ़ाइल से कॉलिंग फ़ंक्शन
- 23. जावास्क्रिप्ट: गतिशील फ़ंक्शन नाम
- 24. पायथन नाम मैंगलिंग फ़ंक्शन
- 25. जावास्क्रिप्ट फ़ंक्शन नाम टक्कर
- 26. फ़ंक्शन पॉइंटर और कॉलिंग कन्वेंशन
- 27. सी ++ टेम्पलेट नाम सुंदर प्रिंट
- 28. लॉगबैक AyncAppender फ़ाइल और लाइन नंबर
- 29. कक्षा का नाम और फ़ाइल का नाम
- 30. कॉलिंग विधि का नाम कैसे प्राप्त करें?
http://stackoverflow.com/questions/2651850/can-func-get-the-lineno-who-call-itself-cc की – kennytm
संभव डुप्लिकेट [C/C++ लाइन नंबर] (http://stackoverflow.com/questions/2849832/cc-line- संख्या) – user7116
@ केनीटीएम: धन्यवाद! जवाब वहाँ है। – sura2k