conditional compilation - Why should #ifdef be avoided in .c files? -


मैं एक प्रोग्रामर का सम्मान करता हूं जो कि सी कोड, #if और #ifdef < / कोड> सभी लागतों से बचा जाना चाहिए, संभवतः हेडर फाइल में छोड़कर #ifdef को .c फ़ाइल में उपयोग करने के लिए खराब प्रोग्रामिंग अभ्यास क्यों माना जाएगा?

बनाए रखने के लिए मुश्किल #ifdef s को अपने क्रियान्वयन से अधिक सख्ती से सशर्त संकलन का दुरुपयोग करने के लिए इंटरफ़ेस का बेहतर उपयोग करें।

उदाहरण

  void foo ) {#ifdef WIN32 // do Windows सामान # एल्स // do पॉसिक्स सामान #एंडिफ // सामान्य सामान}  

अच्छा नहीं है इसके बजाय फाइल foo_w32.c और foo_psx.c के साथ

foo_w32.c:

  void foo () {// windows कार्यान्वयन}  

foo_psx.c:

  शून्य foo () {// posix कार्यान्वयन}  
< P> foo.h:

  शून्य foo (); // सामान्य इंटरफ़ेस  

उसके बाद 2 मेकेफ़ाइल 1 है: Makefile.win , Makefile.psx ,

यदि foo ()

का कार्यान्वयन कुछ प्लेटफ़ॉर्म पर दिखाई देने वाले कुछ कोड पर निर्भर करता है, उदा common_stuff () 2 , अपने foo () कार्यान्वयन में कॉल करें।

उदाहरण

> Common.h:

<पूर्व> शून्य आम_स्टफ (); // को आम सी में कार्यान्वित किया जा सकता है, या हो सकता है कि // के लिए आम_ {ए, बी, ...} में कई // लागूकरण हैं, // {ए, बी, ...}। अप्रासंगिक।

foo_ {w32, psx}। C:

  void foo () {// Win32 / Posix कार्यान्वयन // सामग्री ... अगर (बार ) {Common_stuff (); }}  

जब आप common_stuff () पर फ़ंक्शन कॉल दोहरा सकते हैं, तो आप foo () प्रति प्लेटफार्म जब तक कि यह एक बहुत विशिष्ट पैटर्न का पालन नहीं करता है आम तौर पर, प्लेटफ़ॉर्म अंतरों को पूरी तरह से अलग-अलग कार्यान्वयन की आवश्यकता होती है और इस तरह के पैटर्न का पालन नहीं करते।


  1. मेकफाइलों का उदाहरण यहां प्रयोग किया जाता है आपका बिल्ड सिस्टम बना बिल्कुल भी नहीं उपयोग कर सकता है, जैसे कि आप विज़ुअल स्टूडियो, सीमके, स्कॉन्स आदि का उपयोग करते हैं।
  2. भले ही common_stuff () वास्तव में कई कार्यान्वयन हैं, प्रति प्लेटफॉर्म बदलते हैं।

Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

php - Multiple Select with Explode: only returns the word "Array" -

php - jQuery AJAX Post not working -