আপনি এটি করতে পারবেন না যদি ব্যবহারকারীকে উদ্ধৃত স্ট্রিং হিসাবে সংজ্ঞায়িত করা হয়।
তবে আপনি এটি করতে পারেন যদি ব্যবহারকারী কেবল জ্যাক বা কুইন বা জোকার বা যা কিছু হয়।
ব্যবহারের জন্য দুটি কৌশল রয়েছে:
- টোকেন-স্প্লিকিং, যেখানে আপনি অন্য পরিচয়দাতার সাথে কেবল তাদের চরিত্রগুলিকে সংক্ষেপণ করে একত্রিত করেন। এটি আপনাকে কোনও
#define JACK
কিছু না করে জ্যাকের বিপরীতে তুলনা করতে দেয়
- ভ্যারিয়েডিক ম্যাক্রো এক্সপেনশন, যা আপনাকে আর্গুমেন্টের পরিবর্তনশীল সংখ্যার সাথে ম্যাক্রো পরিচালনা করতে দেয়। এটি আপনাকে নির্দিষ্ট শনাক্তকারীদের বিভিন্ন সংখ্যক কমাতে বিস্তৃত করতে দেয় যা আপনার স্ট্রিং তুলনা হয়ে উঠবে।
সুতরাং এর সাথে শুরু করা যাক:
#define JACK_QUEEN_OTHER(u) EXPANSION1(ReSeRvEd_, u, 1, 2, 3)
এখন, আমি যদি লিখি JACK_QUEEN_OTHER(USER)
এবং ব্যবহারকারী জ্যাক, প্রিপ্রোসেসর এটিকে রূপান্তরিত করেEXPANSION1(ReSeRvEd_, JACK, 1, 2, 3)
দ্বিতীয় ধাপটি হ'ল:
#define EXPANSION1(a, b, c, d, e) EXPANSION2(a##b, c, d, e)
এখন JACK_QUEEN_OTHER(USER)
হয়ে যায়EXPANSION2(ReSeRvEd_JACK, 1, 2, 3)
এটি স্ট্রিংয়ের সাথে মেলে কিনা তা অনুসারে বেশ কয়েকটি কমা যুক্ত করার সুযোগ দেয়:
#define ReSeRvEd_JACK x,x,x
#define ReSeRvEd_QUEEN x,x
যদি ব্যবহারকারী জ্যাক হয়, JACK_QUEEN_OTHER(USER)
হয়ে যায়EXPANSION2(x,x,x, 1, 2, 3)
যদি ব্যবহারকারী কোয়েন হয়, JACK_QUEEN_OTHER(USER)
হয়ে যায়EXPANSION2(x,x, 1, 2, 3)
যদি ব্যবহারকারী অন্য হয়, JACK_QUEEN_OTHER(USER)
হয়ে যায়EXPANSION2(ReSeRvEd_other, 1, 2, 3)
এই মুহুর্তে, সমালোচনামূলক কিছু ঘটেছে: এক্সপ্যান্সন 2 ম্যাক্রোর চতুর্থ যুক্তিটি 1, 2, বা 3 হয়, মূল তর্কটি জ্যাক, রানী বা অন্য কিছু ছিল কিনা তার উপর নির্ভর করে। সুতরাং আমাদের যা করতে হবে তা হল এটি বাছাই। দীর্ঘ-বায়ুযুক্ত কারণে, আমাদের শেষ ধাপের জন্য দুটি ম্যাক্রোর প্রয়োজন হবে; যদিও এটি অপ্রয়োজনীয় বলে মনে হচ্ছে তবুও তারা এক্সপশন 2 এবং এক্সপেনশন 3 হবে।
সব কিছু একসাথে রেখে আমাদের কাছে এই 6 টি ম্যাক্রো রয়েছে:
#define JACK_QUEEN_OTHER(u) EXPANSION1(ReSeRvEd_, u, 1, 2, 3)
#define EXPANSION1(a, b, c, d, e) EXPANSION2(a##b, c, d, e)
#define EXPANSION2(a, b, c, d, ...) EXPANSION3(a, b, c, d)
#define EXPANSION3(a, b, c, d, ...) d
#define ReSeRvEd_JACK x,x,x
#define ReSeRvEd_QUEEN x,x
এবং আপনি তাদের এটি ব্যবহার করতে পারেন:
int main() {
#if JACK_QUEEN_OTHER(USER) == 1
printf("Hello, Jack!\n");
#endif
#if JACK_QUEEN_OTHER(USER) == 2
printf("Hello, Queen!\n");
#endif
#if JACK_QUEEN_OTHER(USER) == 3
printf("Hello, who are you?\n");
#endif
}
বাধ্যতামূলক গডবোল্ট লিঙ্ক: https://godbolt.org/z/8WGa19