উদাহরণস্বরূপ, আমি সম্প্রতি লিনাক্স কার্নেল এ জুড়ে এসেছি:
/ * শর্তটি সত্য হলে সংকলনের ত্রুটি জোর করুন * / # নির্ধারিত বিল্ড_বিউজিউথিউট (শর্ত) ((শূন্য) আকারের (চর [1 - 2 * !! (শর্ত)]))
সুতরাং, আপনার কোডে আপনার যদি এমন কিছু কাঠামো থাকতে হবে যা অবশ্যই আট বাইটের আকারের একাধিক বলুন, সম্ভবত কিছু হার্ডওয়্যার সীমাবদ্ধতার কারণে আপনি এটি করতে পারেন:
BUILD_BUGटका ((মাপের (স্ট্রাক মাইস্ট্রাক)% 8)! = 0);
এবং স্ট্রাক্ট মাইস্ট্রাকটের আকারটি 8 এর একাধিক না হওয়া পর্যন্ত এটি সংকলন করবে না এবং এটি 8 এর একাধিক হলে কোনও রানটাইম কোড তৈরি করা হবে না।
আমি জানি যে অন্য কৌশলটি "গ্রাফিক্স রত্ন" বইটি থেকে পাওয়া যায় যা একটি একক শিরোলেখ ফাইলকে উভয়কে একটি মডিউলে ভেরিয়েবল ডিক্লেয়ার এবং আরম্ভ করতে দেয় যখন সেই মডিউলটি ব্যবহার করে অন্যান্য মডিউলগুলিকে কেবল তাদের বাহ্যিক হিসাবে ঘোষণা করে।
#ifdef DEFINE_MYHEADER_GLOBALS বিশ্বব্যাপী # নির্ধারণ INIT (x, y) (x) = (y) #else বিশ্বব্যাপী বাহ্যিক নির্ধারণ করুন # নির্ধারিত আইএনআইটি (x, y) #যদি শেষ গ্লোবাল ইন আইএনআইটি (এক্স, 0); গ্লোবাল ইন সামফুঙ্ক (ইন এ, ইনট বি);
এটির সাথে, কোডটি যা এক্স এবং কিছু সংখ্যককে সংজ্ঞায়িত করে:
# ডেফাইন DEFINE_MYHEADER_GLOBALS # অন্তর্ভুক্ত করুন
কোডটি যখন কেবল x এবং সামুফঙ্ক () ব্যবহার করে:
# অন্তর্ভুক্ত করুন
সুতরাং আপনি একটি শিরোনাম ফাইল পান যা গ্লোবাল এবং ফাংশন প্রোটোটাইপগুলির যেখানে তাদের প্রয়োজন সেখানে এবং সম্পর্কিত বহিরাগত ঘোষণাগুলির উভয় দৃষ্টান্ত ঘোষণা করে।
সুতরাং, সেই লাইনের সাথে আপনার প্রিয় সি প্রোগ্রামিং কৌশলগুলি কী কী?
BUILD_BUG_ON
ম্যাক্রো সম্পর্কে , #error
ভিতরে ব্যবহার করে এবং এর সাথে কী ভুল #if
?