मैंने हाल ही में सी में एक छोटी निजी परियोजना (बीजीआर मूल्य रूपांतरण कार्यक्रम के लिए आरजीबी मूल्य) शुरू किया, और मुझे एहसास हुआ कि आरजीबी से बीजीआर में परिवर्तित होने वाला एक फ़ंक्शन न केवल रूपांतरण कर सकता है बल्कि इनवर्जन भी कर सकता है। जाहिर है इसका मतलब है कि मुझे वास्तव में दो कार्यों की आवश्यकता नहीं है rgb2bgr
और bgr2rgb
। हालांकि, क्या इससे कोई फर्क पड़ता है कि मै मैक्रो के बजाय फ़ंक्शन पॉइंटर का उपयोग करता हूं? उदाहरण के लिए:प्रीप्रोसेसर "मैक्रो फ़ंक्शन" बनाम फ़ंक्शन पॉइंटर - सर्वोत्तम अभ्यास?
int rgb2bgr (const int rgb);
/*
* Should I do this because it allows the compiler to issue
* appropriate error messages using the proper function name,
* not to mention possible debugging benefits?
*/
int (*bgr2rgb) (const int bgr) = rgb2bgr;
/*
* Or should I do this since it is merely a convenience
* and they're really the same function anyway?
*/
#define bgr2rgb(bgr) (rgb2bgr (bgr))
मैं जरूरी निष्पादन क्षमता में बदलाव के लिए नहीं देख रहा हूँ के रूप में यह जिज्ञासा से बाहर एक व्यक्तिपरक सवाल का अधिक है। मैं इस तथ्य से अच्छी तरह से अवगत हूं कि सुरक्षा प्रकार न तो खो गया है और न ही किसी विधि का उपयोग करके प्राप्त किया गया है। क्या फ़ंक्शन पॉइंटर केवल एक सुविधा होगी या क्या अधिक व्यावहारिक लाभ प्राप्त किए जाएंगे जिनसे मुझे अनजान है?
व्यक्तिगत रूप से मैं सिर्फ ऐसे नाम के साथ आउंगा जो 'int swap_rb() '; – caf
@caf: दोनों अन्य उपयोगों का वर्णन करता है: निश्चित रूप से एक और शानदार विचार। यह पूरी तरह से इस मुद्दे से परहेज करता है, लेकिन यह एक तर्कसंगत ध्वनि विकल्प है। +1 – Dustin