के रूप में उपयोग किया जा सकता है हमारे पास int foo(const char* bar);
के साथ एक फ़ंक्शन मैक्रो #define FOO(arg) foo(arg)
है। जब एनडीईबीयूजी परिभाषित किया जाता है तो खाद्य को #define FOO(arg) 0
के रूप में परिभाषित किया जाता है, हालांकि इससे कई कंपाइलर चेतावनियां होती हैं क्योंकि कई मामलों में फू का रिटर्न मूल्य उपयोग नहीं किया जाता है। समाधान एएनएसआई सी कंपाइलर्स के साथ काम करना चाहिए और कोई चेतावनी नहीं है। मैं कोशिश की है:फ़ंक्शन मैक्रो जो शून्य का मूल्यांकन करता है और
(void)0
: चर
static int foo(const char* bar) { return 0; }
को assigend नहीं किया जा सकता: कुछ मॉड्यूल
static inline int foo(const char* bar) { return 0; }
में अप्रयुक्त स्थिर समारोह चेतावनी का कारण बनता है: केवल C99 compilers के साथ काम करता
के लिए धन्यवाद अपने मदद!
संपादित 1: यह कुछ हद तक एक ट्रेस मैक्रो की तरह है और पूरे प्रोजेक्ट में उपयोग किया जाता है। अधिकांशतः इसे FOO("function x called");
जैसे बयान के रूप में उपयोग किया जाता है, लेकिन कुछ मामलों में मैंने if (FOO("condition a")) { /* some more debug output */ }
देखा। एनडीईबीयूजी परिभाषित और अनुकूलन सक्षम करने के साथ कुछ भी खाद्य पदार्थों से नहीं छोड़ा जाना चाहिए। मैं इसके साथ नहीं आया, लेकिन मुझे इस गड़बड़ी को साफ करना है :)।
EDIT2: मैं जोड़ने चाहिए बनाता है कि जीसीसी रिहाई के इन चिह्नों उपयोग किया जाता है: -O3 -Wall -ansi
edit3: अब मैं __inline int dummy() { return 0; }
साथ जा रहा हूँ के लिए। __inline उत्तर मोड में विजुअलसी और जीसीसी दोनों के साथ काम करता है।
आप कैसे 'FOO()' अपने कोड में प्रयोग किया जाता है की अधिक उदाहरण दिखा सकते हैं? – unwind
क्या आप हमेशा रिटर्न वैल्यू का उपयोग करते हैं, उदाहरण के लिए, 'printf() '? – pmg
यदि आपको foo() को कॉल करने में कोई फर्क नहीं पड़ता है और बस यह सुनिश्चित करना चाहते हैं कि उपयोग किए गए रिटर्न वैल्यू 0 है तो आप अल्पविराम ऑपरेटर का उपयोग कर सकते हैं और '# परिभाषित खाद्य (तर्क) (foo (arg), 0) ' – Eregrith