کنٹرول سسٹمز اور خودکار نظام
کوڈ رُوِش اور غیرمعمولی طور پر استعمال کرنے کے لئے سی میں میکروس کو مؤثر طریقے سے استعمال کرنا
Table of Contents
سی میں میکروس ایک طاقتور خصوصیت ہے جس میں پروگرامرز کو مستقل، لائن کوڈ snipts اور ان کی تنصیب کے لیے مؤثر طریقے سے استعمال کیا جاتا ہے، جب مؤثر طریقے سے استعمال کیے جاتے ہیں تو وہ بہتر طور پر کوڈ دوبارہ شروع کرنے اور برقرار رکھنے کے قابل ہوتے ہیں، مگر ان کی طاقت خطرے کے ساتھ ساتھ آتی ہے ؛ غیر موزوں استعمال کا استعمال اور کوڈ بھی مشکل بنا سکتا ہے، یہ بہتر طور پر استعمال کرنے کے لیے آسان استعمال ہوتا ہے اور اس سے بہتر کارکردگی کے ساتھ ساتھ ساتھ ساتھ ساتھ ساتھ ساتھ ساتھ ساتھ معیاری صنعت اور Crest سے بھی بہتر کارکردگی کے لیے بہتر کارکردگی بھی شامل کیا جا سکتا ہے۔
میکروس کیا ہیں ؟
مکیکوس کو استعمال کرتے ہوئے [focription] اور اس سے پہلے Cypretor سے بنایا گیا ہے. پرو فاعل (struction) سادہ متن متن متن جاری کرتا ہے: مکیڈ میں موجود ہر چیز موجود ہوتی ہے اسمِس کی وضاحت کو مُکُرُول سے تبدیل کیا جاتا ہے اور اس کی نوعیت درست ہوتی ہے. [LT) مُلکُرُول(L1)کے لیے موزوں طور پر استعمال کی جاسکتی ہے[TTTTTTTT)
#define PI 3.14159 // object-like macro
#define SQUARE(x) ((x)*(x)) // function-like macro
یہ بات سمجھنے کے لئے کہ یہ کام کرنے یا تبدیلی لانے کے سلسلے میں ایک ہی طرح کے قوانین نہیں چلتے ۔
کوڈ رُوِش اور تِسِبِسِیس کے لیے مَکَس کے فوائد
جب اطلاقی خیال کیا جاتا ہے تو مکرر بڑے یا نثری کوڈ میں کئی مستند فوائد فراہم کرتا ہے:
- کووڈ ریزایشن: ڈی ایف ٹی ایک عام حساب یا صنفی پٹی ایک بار استعمال کرکے پروگرام کے اندر استعمال کیا جاتا ہے۔مکرو کی تجدید خودبخود کرتا ہے۔
- جادو گنتی کی Elliation: تقسیم کرنے کی بجائے لفظیات کو آپس میں تقسیم کرنا یا ، ان کو معنی نام دینا. یہ بہتر پڑھنے کی کیفیت اور ٹوئنٹی/T کو چھوٹے حروف بناتا ہے۔
- Games: Function-like macros کسی تقریبل کی ادائیگی سے گریز کریں. چھوٹے کے لیے اکثر استعمال ہونے والے آپریشن (مثلاً منٹ/مکس، مربع)، مکروس کچھ یقینی طور پر ایسے کام کرنے والوں میں بھی تیزی سے ہو سکتا ہے جہاں کلائنٹ میں موجود نہ ہو۔
- Conditional Compilation: Macros work hand-in-hand with ، ، اور کوائلر پر مبنی صورت حال پر شامل کرنے کے لیے پلیٹ فارم، کوڈ یا اس میں شامل کرنا ضروری ہے۔
- [Siflation soundation: ایک ہی سرے میں مختلف اقدار کے ساتھ ساتھ آپ پورے کوڈبیس کے برتاؤ کو درست کر سکتے ہیں
رُوت میکروس لکھتے ہیں: بہترین مشقیں
ایک غریب تحریری مکرو غیر متوقع طرزِعمل کا سبب بن سکتا ہے جو آپ کے مکرر کو محفوظ اور قابلِ برداشت رکھنے کے لئے ان بہترین کاموں پر عمل پیرا رہتا ہے ۔
والدین ہمیشہ اپنے بچوں کو ماںباپ اور والدین کے ساتھ جمع کرتے ہیں
کیونکہ مکرر متن کی جمع ہے، آپرئیر ان کو توڑ سکتے ہیں. تک توسیع [(جس کے برابر 11 کے برابر ہے). اصلاح یہ ہے کہ ہر پیرامیٹر میں اور پورے اظہار کو لپیٹ میں رکھ کر
#define SQUARE(x) ((x) * (x)) // now SQUARE(3+2) works correctly
حد سے زیادہ کھانے پینے سے گریز کریں
مکرر دلائل کو بطور-ایس کا متبادل قرار دیا جاتا ہے اگر کسی دلیل کے پاس ضمنی اثرات (مثلاً، ، تو اسے ایک سے زیادہ مرتبہ اخذ کیا جا سکتا ہے۔
#define MAX(a,b) ((a) > (b) ? (a) : (b))
int x = 5;
int max = MAX(x++, 10); // expands to ((x++) > (10) ? (x++) : (10)) // x incremented twice!
اگر آپ کو کسی مکرو ، ایسی دستاویز استعمال کرنی چاہئے جو اس میں درج باتوں پر مبنی نہیں تو آپ کو اُن کے لئے نقصاندہ ہونے کی اجازت نہیں دے سکتے ۔
م دستو ناموں کے لیے بالائی پتے استعمال کریں
کنونشن تک ، مکرر کو بالائی خطوں (مثلاً میں لکھا جاتا ہے ، ، یہ انہیں متغیرات اور عملیاتی عمل کے امکان کو کم کرنے کے ساتھ ساتھ غیر معمولی طور پر استعمال کرنے والے حروف میں بھی شامل کرتا ہے۔
ملتان-ستام بلاکس کے لیے دواپنے ساتھ میکروس ختم کرتا ہے۔
جب ایک مکرو جس میں کئی بیانات ہیں، انہیں ایک میں لپیٹ دیا جاتا ہے. یہ تمام حوالوں میں درستی کو یقینی بناتا ہے (مثلاً کسی کے بعد
#define LOG_ERROR(msg) do { \
fprintf(stderr, "Error: %s\n", msg); \
exit(1); \
} while (0)
دستاویز مکاؤس نے بڑی احتیاط سے
مکرر کام کی نفسیاتی کیفیت کی کمی۔ ہمیشہ تبصرے میں دلائل، متوقع برتاؤ اور کسی بھی حد تک محدود ہونے پر تبصرہ شامل کرنا۔ ڈیکسیجن-ستیل تبصرے استعمال کریں۔
ترقییافتہ میکرو تکنیک
سی پریکٹر طاقتور آپریٹرز کو پیش کرتا ہے جو معمولی سی کارکردگی سے آگے بڑھ کر. ان ماسٹرنگ سے آپ کی میکرس کو مزید ہموار بنا سکتے ہیں۔
کے ساتھ struction
آپریٹر ایک مکرر حجت کو ایک تار میں تبدیل کر دیتا ہے یہ struting یا servation کے لیے مفید ہے:
#define PRINT_VAR(x) printf(#x " = %d\n", x)
int value = 42;
PRINT_VAR(value); // prints: value = 42
[FLT:G] کے ساتھ سفر
آپریٹر کوان کے دو نشانات ایک نشانی میں تبدیل کر سکتے ہیں. اس سے آپ شناختی وقت میں فعال طور پر شناخت کنندہ پیدا کر سکتے ہیں:
#define CREATE_VAR(prefix, index) prefix ## index
int CREATE_VAR(arr, 0) = 10; // becomes int arr0 = 10;
اسکوٹر کے ماضی کو ایکس میکروس میں وسیع پیمانے پر استعمال کیا جاتا ہے اور پھر دوبارہ سے متعلقہ کوڈ کے نمونے کو ترتیب دینے کے لیے استعمال کیا جاتا ہے۔
وریکی میکروس (C99)۔
C99 میں اندراج شدہ، stroduditic Macros . یہ ایک متبادل عددی بحث کو قابل بناتا ہے جس میں ایک دوسرے سے متعلقہ اور sixing Macros کے ذریعے استعمال کیا جاتا ہے:
#define DEBUG_PRINT(fmt, ...) \
fprintf(stderr, "DEBUG: " fmt, __VA_ARGS__)
DEBUG_PRINT("x = %d, y = %d", x, y);
C11 اور بعد میں آپ میں خالی بحثوں میں کوشاں، بندرگاہی بہتری لانے کے لئے استعمال کر سکتے ہیں۔
عام خطرات اور ان سے بچنے کا طریقہ
یہاں تک کہ تجربہ کار سیکٹر بھی میکرو سے متعلقہ بگس کا سامنا کرتے ہیں۔ان خطرات کو جلد از جلد تسلیم کرنے سے سر درد کو روکا جاتا ہے۔
- مسسنگ نیمکون یا پرافل : ایسا مکرر جو کسی بلاک تک پھیلے بغیر کسی پیرول کے کسی بلاک تک پہنچا سکے Scrossss district بنا سکتا ہے. نمونہ یہ حل کرتا ہے۔
- [حوالہ درکار] حیرت انگیز باتیں[1]: ہمیشہ والدین کے ساتھ برتاؤ— جیسا کہ اوپر بیان کیا گیا ہے۔
- ] کردگی کے ساتھ شڈوڈنگ مکرر اگر آپ ایک ہی نام کے ساتھ ایک ہی نام سے ایک میکرو کو معیاری لائبریری کام کے طور پر بیان کریں تو یہ اسے غیر منفرد طور پر ناقابل استعمال بنا سکتی ہے۔
- نون-کلئیر : مقصدی طور پر مکرر کو مستقل استعمال کیا جاتا ہے لیکن یہ نہیں ہیں. یہ مسلسل اصطلاحات میں استعمال ہو سکتے ہیں اگر خود فضاء ایک مستقل اظہار ہے۔
- [Debution مشکل : میکروس کو ان کو دیکھنے سے پہلے وسیع کیا جاتا ہے، تو غلطی پیغامات وسیع کوڈ کا حوالہ دیتے ہیں، نہیں، بلکہ مکرر نام استعمال کرتے ہیں۔ کا جھنڈ GC یا کلانگ (مثلاً) کے ساتھ ساتھ slang کے جھنڈ کو ظاہر کرتا ہے۔
مَکُسْسُولُّسُولُّة : کنسّت، اِنیم اور اِنین فیونَّل (inline Factions)
جدید C ایسے محفوظ متبادل فراہم کرتا ہے جو اکثر مکراس کی ضرورت کو ختم کر دیتا ہے:
- متغیرات : [FLT] کے لیے درکار تفصیلات ہیں . . [FLT]. [FLT]. [FLT].].
- : متعلقہ انٹریجر مستقلات کا مجموعہ، انکم اقسام کی غیر محفوظ اور خود مختار اقدار کے لیے استعمال کیا جاتا ہے. یہ غلطی کوڈ اور جھنڈ کے لیے وسیع پیمانے پر استعمال ہوتے ہیں۔
- [intinline actress: C99 میں اندراج، کام کرنے والے ایک مکرو کو مکمل طور پر امن، حمایت اور پہلوی مسائل کے ساتھ بھرپور انداز میں پیش کرنے کے لیے فراہم کرتے ہیں۔
static inline int square(int x) {
return x * x;
}
میں فعال کام جب بھی آپ کو ایک ایسا عمل کرنے کی ضرورت ہوتی ہے جس میں بحثات کا بالکل ایک بار جائزہ لیا جاتا ہے. عمل جیسے میکروس کے لیے صرف باقی رہ جانے والیس کا استعمال اس وقت ہوتا ہے جب آپ کو انواع (مثلاً، جی این سی) پر کام کرنے کی ضرورت ہوتی ہے یا پھر نئے دائرہ کو کھولنے کی صلاحیت (کوڈ مصدر سے ) کی ضرورت ہوتی ہے۔
حقیقی-world مثالیں: دیومالائی اور غیر منظم ہیں۔
مکروس برتری کو غیر معمولی طور پر افضل۔ یہاں دو عملی اطلاقات ہیں:
ڈی بگ پلگ انس کو کومپیل-وقت کنٹرول کے ساتھ
#ifdef DEBUG
#define LOG(fmt, ...) fprintf(stderr, "[DEBUG] " fmt, ##__VA_ARGS__)
#else
#define LOG(fmt, ...) /* no-op */
#endif
یہ مکرر لاگس صرف جب کے ساتھ جمع کیا جاتا ہے اور خالی مکرر کی وجہ سے اخراج میں صفر کی کمی ہوتی ہے سے پہلے ایک ایسا وسیع توسیع ہے جو کسی بھی صورت میں جاری ہونے والی بحثوں کو دور کر دیتی ہے (سی ایل ایل ٹی:41]۔
پلیٹ فارم-سپپیکی کوڈ
#if defined(_WIN32) || defined(_WIN64)
#define PLATFORM "Windows"
#elif defined(__linux__)
#define PLATFORM "Linux"
#else
#define PLATFORM "Unknown"
#endif
[ فٹنوٹ :4 ]
کُنَّا
میکروس C میں ایک غیر ضروری ذریعہ رہ جاتا ہے جو کوڈ کی بحالی اور دیکھ بھال کے لیے، خاص طور پر عملداری یا پھر اس کی دیکھ بھال کے لیے استعمال ہوتا ہے جب ہر چکر کو صحیح طریقے سے استعمال کیا جاتا ہے— جب درست طور پر بنیادی طور پر استعمال ہوتا تھا، محدود پہلوی اثرات اور مرکزی وضع کے ساتھ—
روایتی مکرر طاقت کو ان محفوظ متبادلات سے مطابقت دیتے ہوئے آپ C کوڈ لکھ سکتے ہیں جو دونوں مؤثر اور قابل استعمال ہیں ۔