C প্রোগামিং এ সামান্য জ্ঞানও যাদের আছে তারা সবাই জানেন যে Main() ফাংশন ছাড়া C প্রোগাম compile বা execute হয় না।কিন্তু আমি আজকে আপনাদের একটি কোড দেখাবো যেটা main() ফাংশন ছাড়াই compile এবং execute করবে ।তাহলে দেখুন কোডটি-
#include<stdio.h>
#define start(a,b,c,d,e,f,g,h,i) d##e##c##i
#define billgates start(a,n,i,m,a,t,i,o,n)
void billgates()
{
printf("I love BANGLADESH\n");
//function body
}
দেখা যাচ্ছে এতে কোন main() function নেই।আসলেই কি তাই সম্ভব ?অবশ্যই না।
এখানে আসলে main() ফাংশনটি বাদ দেয়া হয়নি বরং কৌশলে যোগ করে দেয়া হয়েছে preprocessor directive এর মাধ্যমে ।“#define” preprocessor directive এর কাজ হলো প্রোগামে ব্যবহার করা নির্দিষ্ট একটি টেক্সটকে আরেকটি দিয়ে প্রতিস্থাপন করা
আর “##” preprocessor directive এর কাজ হলো দুটি identifier কে একত্রে যুক্ত করা।
সুতরাং #define billgates start(a,n,i,m,a,t,i,o,n) এর কাজ হলো কোডের যেখানেই billgates শব্দটি আসবে সেটাকে start(a,n,i,m,a,t,i,o,n) ফাংশনের আউটপুট দ্বারা প্রতিস্থাপন করা।
এবং #define start(a,b,c,d,e,f,g,h,i) d##e##c##i এর কাজ হলো এর a,b,c,d,e,f,g,h,I এ ৯ টি প্যরামিটার গুলোর মধ্যে কেবল ৪,৫,৩ ও ৯ নং যুক্ত করে যে শব্দ পাওয়া যাবে সেটা দিয়ে start() ফাংশন্ রিপ্লেস করা।
আমরা যখন billgates() ফাংশন দ্বারা প্রোগামটি শুরু করি তখন আসলে #define billgates start(a,n,i,m,a,t,i,o,n) ম্যাক্রো ফাংশন execute হয় এবং সেটা start() ফাংশনে a,n,i,m,a,t,i,o,n এই ৯ টি প্যারামিটার সেন্ড করে কিন্তু start() ফাংশন যথাক্রমে ৪,৫,৩ ও ৯ নং প্যারামিটার ৪ টি একত্রে যোগ করে যে identifier পাওয়া যায় সেটা রিটার্ন করে।
এর মানে হলো preprocessor directive কাজ করে billgates() কে main() দ্বারা প্রতিস্থাপণ করে দিবে।
এবং কম্পাইলার billgates() কে main() হিসাবে ধরেই compile করবে।
আমি ashik734। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর 7 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 10 টি টিউন ও 70 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
ভাই এই জিনিস টা যে কি এটাই বুজলাম না, ধন্যবাদ আপনাকে।