فرض کنید شما برنامه نویس میکروکنترلر دستگاهی هستید که قرار است پس از گرفتن اطلاعات از یکسری سنسور، محاسباتی انجام دهد و نهایتاً نتیجه را بر روی نمایشگر به نمایش بگذارد. اوضاع خوش و خرم پیش میرود تا روزیکه مدیرعامل از شما درخواست یک نسخه نمایشی -Demo- برای نمایشگاه میکند. این نسخه به جای اینکه اطلاعات لازم را از سنسورها بگیرد، از مقادیر ضبط شده درون حافظه استفاده میکند. در ادامه خواهیم دید که دستور پیش پردازنده #define چگونه به ما کمک میکند تا همزمان هر دو نسخه را در یک پروژه توسعه دهیم.
ماجرای بالا خلاصه ای بود از ماجرایی که برای خود من اتفاق افتاده. در ابتدا ممکن است این راه به ذهنتان بیاید که از پروژه اصلی یک کپی ذخیره میکنیم و بعد تغییرات لازم برای تبدیل به نسخه دمو شدن را بر رویش اعمال میکنیم. کاری که من در ابتدا انجام میدادم. اما …
مشکلش از آنجا آغاز میشود که شما باگی را در برنامه اصلی میبینید یا حتی قرار است این برنامه را توسعه دهید و ویژگیهای جدیدی به آن اضافه کنید. از قضا از آنجا که برنامه اصلی با برنامه دمو مشترکات بسیاری دارند شما باید این تغییرات را هر بار که به نسخه دمو نیاز دارید در این نسخه نیز اعمال کنید یا اینکه از ابتدا شروع به ایجاد نسخه دمو از برنامه اصلی بروز شدهتان کنید.
با این اوصاف نزدیک شدن به زمان نمایشگاه میشود زمان عزای شما و مصیبتهایی که در این راه باید بکشید. به نظرتان چارهای برای این کار داریم؟ میشود این دردسرها را نداشته باشیم و با کمترین تغییر ممکن سریعاً به نسخه دمو سویچ کنیم؟
راستش را بخواهید من راه حل این مشکل را بارها در جاهای مختلف دیده بودم اما متاسفانه به استفاده از آن فکر نکرده بودم. در بسیاری از کتابخانههای درست و درمون قسمتی وجود دارد که به شما امکان کانفیگ کتابخانه را میدهد. این کانفیگ اغلب توسط دستور پیش پردازنده #define صورت میگیرد. بگذارید با همان مثال ابتدای بحث توضیح دهم:
کاری که من انجام دادم این بود که در فایل main.h برنامه عبارت DEMO را تعریف کردم:
#define DEMO
بعد در برنامه هرجا که لازم بود از دستورِ پیش پردازندهی شرطیِ زیر، استفاده کردم:
#ifdef DEMO /*کدهایی که برای نسخه دمو لازم است*/ #else /*کدهایی که برای نسخه اصلی لازم است*/ #endif
در این صورت من تنها یک پروژه داشتم که با تعریف DEMO در main.h به نسخه دمو و با کامنت کردن آن، به نسخه اصلی برنامه میرسیدم.
مشابه این سناریو را میتوان در خیلی جاهای دیگر هم دید. دقت کردن و تحلیل کتابخانههایی که خوب نوشته شدهاند میتواند به ما در دیدن چنین جاهایی کمک کند تا در صورت مواجه شدن با وضعیت مشابه ما هم از این ویژگیها بهره ببریم. اگر تجربهای در این خصوص دارید، خوشحال میشوم در زیر همین پست به اشتراک بگذارید.
محشر بود