# আইফ এবং # ডেফাইন এমওয়াই_ম্যাক্রো (0)
# আইফ ব্যবহারের অর্থ হ'ল আপনি একটি "সংজ্ঞায়িত" ম্যাক্রো তৈরি করেছেন, অর্থাত্ "(0)" দ্বারা প্রতিস্থাপিত করার জন্য কোডে অনুসন্ধান করা হবে। এটি "ম্যাক্রো হেল" আমি সি ++ এ দেখতে ঘৃণা করি কারণ এটি সম্ভাব্য কোড সংশোধন সহ কোডটিকে দূষিত করে।
উদাহরণ স্বরূপ:
#define MY_MACRO (0)
int doSomething(int p_iValue)
{
return p_iValue + 1 ;
}
int main(int argc, char **argv)
{
int MY_MACRO = 25 ;
doSomething(MY_MACRO) ;
return 0;
}
g ++ এ নিম্নলিখিত ত্রুটি দেয়:
main.cpp|408|error: lvalue required as left operand of assignment|
||=== Build finished: 1 errors, 0 warnings ===|
কেবল একটি ত্রুটি।
যার অর্থ হল যে আপনার ম্যাক্রো আপনার সি ++ কোডের সাথে সফলভাবে ইন্টারঅ্যাক্ট করেছে: ফাংশনে কলটি সফল হয়েছিল। এই সাধারণ ক্ষেত্রে, এটি মজাদার। তবে আমার কোডের সাথে নিঃশব্দে ম্যাক্রো খেলে আমার নিজের অভিজ্ঞতা আনন্দ এবং ফুলফিলামিতে পূর্ণ নয়, তাই ...
# আইফডিফ এবং # ডেফাইন এমওয়াই_ম্যাক্রো
#Ifdef ব্যবহারের অর্থ আপনি কোনও কিছু "সংজ্ঞায়িত" করেন। আপনি এটি একটি মূল্য দিতে না যে। এটি এখনও দূষণকারী, তবে কমপক্ষে, এটি "কিছুই দ্বারা প্রতিস্থাপিত হবে", এবং সি ++ কোডটি লেজিটিমিট কোড বিবৃতি হিসাবে দেখা যায় না। উপরের একই কোডটি, একটি সাধারণ সংজ্ঞা সহ এটি:
#define MY_MACRO
int doSomething(int p_iValue)
{
return p_iValue + 1 ;
}
int main(int argc, char **argv)
{
int MY_MACRO = 25 ;
doSomething(MY_MACRO) ;
return 0;
}
নিম্নলিখিত সতর্কতা দেয়:
main.cpp||In function ‘int main(int, char**)’:|
main.cpp|406|error: expected unqualified-id before ‘=’ token|
main.cpp|399|error: too few arguments to function ‘int doSomething(int)’|
main.cpp|407|error: at this point in file|
||=== Build finished: 3 errors, 0 warnings ===|
তাই ...
উপসংহার
আমি বরং আমার কোডে ম্যাক্রোগুলি ছাড়া বাঁচতে পারি, তবে একাধিক কারণে (শিরোনাম রক্ষীদের সংজ্ঞা দেওয়া, বা ম্যাক্রো ডিবাগ করা), আমি পারি না।
তবে কমপক্ষে, আমি আমার বৈধ সি ++ কোড দিয়ে তাদের সর্বনিম্ন ইন্টারেক্টিভ তৈরি করতে চাই। যার অর্থ হল মান ব্যতীত # ডেফাইন ব্যবহার করা, # আইফডিএফ এবং # আইফেন্ডাফ ব্যবহার করা (বা এমনকি # জিম বাকের পরামর্শ অনুসারে সংজ্ঞায়িত) এবং সর্বোপরি তাদের নাম দেওয়া এত দীর্ঘ এবং তার সঠিক মনের কেউই ব্যবহার করবেন না এটি "সুযোগে", এবং এটি কোনওভাবেই বৈধ সি ++ কোডকে প্রভাবিত করবে না।
পোস্ট স্ক্রিপ্টাম
এখন, আমি যখন আমার পোস্টটি পুনরায় পড়ছি, আমি অবাক হয়েছি যে আমার সংজ্ঞায় যুক্ত করার জন্য এমন কোনও মান খুঁজে বের করার চেষ্টা করা উচিত যা কখনও কখনও সি ++ হতে পারে না। কিছুটা এইরকম
#define MY_MACRO @@@@@@@@@@@@@@@@@@
এটি # আইডিডিডিএফ এবং # আইডিফাইফের সাথে ব্যবহার করা যেতে পারে তবে কোনও ফাংশনের অভ্যন্তরে কোডটি সংকলন করতে দেওয়া হবে না ... আমি জি ++ এ এটি সফলভাবে চেষ্টা করেছি এবং এটি ত্রুটি দিয়েছে:
main.cpp|410|error: stray ‘@’ in program|
মজাদার. :-)
#if
আপনি#elif
এরপরেও সামঞ্জস্যপূর্ণ পদ্ধতিতে ব্যবহার করতে পারেন#ifdef
। সুতরাং, পরিবর্তে শুধু ব্যবহারের#define BLAH
, ব্যবহার#define BLAH 1
সঙ্গে#if BLAH
, ইত্যাদি ...