আমি জানি যে এটি মূল ক্যোয়ারির পরে দীর্ঘ সময়, তবে এটি এখনও কার্যকর হতে পারে।
এটি স্ট্রিংফাই অপারেটর "#" ব্যবহার করে জিসিসিতে করা যেতে পারে তবে এর জন্য দুটি পর্যায়ে প্রয়োজন।
#define XSTR(x) STR(x)
#define STR(x) #x
এরপরে ম্যাক্রোর মানটি প্রদর্শিত হবে:
#pragma message "The value of ABC: " XSTR(ABC)
দেখুন: জিসিসি অনলাইন ডকুমেন্টেশনে স্ট্রিংফিকেশন।
কিভাবে এটা কাজ করে:
প্রিপ্রোসেসর উদ্ধৃত স্ট্রিংগুলি বোঝে এবং এগুলি সাধারণ পাঠ্য থেকে পৃথকভাবে পরিচালনা করে। স্ট্রিং কনটেনটেশন এই বিশেষ চিকিত্সার একটি উদাহরণ। বার্তা প্রাগমাতে একটি যুক্তি প্রয়োজন যা উদ্ধৃত স্ট্রিং। যখন আর্গুমেন্টে একের অধিক উপাদান থাকে তখন সেগুলি অবশ্যই স্ট্রিং হওয়া উচিত যাতে স্ট্রিং কনক্যাটেনশন প্রয়োগ করা যায়। প্রিপ্রোসেসর কখনই ধরে নিতে পারে না যে একটি অব্যক্ত স্ট্রিংটি যেমন উদ্ধৃত হয়েছে তেমন আচরণ করা উচিত। যদি এটি তখন করে:
#define ABC 123
int n = ABC;
সংকলন না।
এখন বিবেচনা করুন:
#define ABC abc
#pragma message "The value of ABC is: " ABC
যা সমান
#pragma message "The value of ABC is: " abc
এটি প্রিপ্রোসেসর সতর্কতা সৃষ্টি করে কারণ পূর্ববর্তী স্ট্রিং সহ আব্যাক (অব্যক্ত) সংমিশ্রণ করা যায় না।
এখন প্রিপ্রোসেসর স্ট্রাইনেজ বিবেচনা করুন (যা একসময় স্ট্রিংফিকেশন নামে পরিচিত ছিল, সংশোধিত পরিভাষা প্রতিবিম্বিত করার জন্য ডকুমেন্টেশনের লিঙ্কগুলিকে পরিবর্তন করা হয়েছে। আপনার লিঙ্কগুলি।)) অপারেটর। এটি কেবল ম্যাক্রোর আর্গুমেন্টগুলিতে কাজ করে এবং দ্বিগুণ উদ্ধৃতিতে আবদ্ধ যুক্তির সাথে অপরিবর্তিত যুক্তিকে প্রতিস্থাপন করে। এভাবে:
#define STR(x) #x
char *s1 = "abc";
char *s2 = STR(abc);
s1 এবং s2 এ অভিন্ন মান নির্ধারণ করবে। আপনি যদি জিসিসি-ই চালান তবে আপনি এটি আউটপুটে দেখতে পাবেন। সম্ভবত এসআরটি এনকোটির মতো আরও কিছু নাম দেওয়া হবে।
এটি একটি অব্যক্ত আইটেমের চারপাশে উদ্ধৃতি দেওয়ার সমস্যাটি সমাধান করে, এখন সমস্যাটি হ'ল, যদি তর্কটি ম্যাক্রো হয় তবে ম্যাক্রো প্রসারিত হবে না। এজন্য দ্বিতীয় ম্যাক্রোর প্রয়োজন। এক্সআরএসটি তার যুক্তি প্রসারিত করে, তারপর প্রসারিত মানকে উদ্ধৃতিগুলিতে রাখার জন্য এসআরটি কল করে।