# আইফডিফ এবং # আইডিফের ভূমিকা


101
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");

এই সালে কি ভূমিকা #ifdefএবং #ifndef, এবং আউটপুট কি?

উত্তর:


131

শর্তের উপর নির্ভর করে প্রি-প্রসেসর দ্বারা একটি ifdef/endifবা ifndef/endif জোড়ার ভিতরে থাকা পাঠ্যটি প্রি-প্রসেসরের দ্বারা রেখে দেওয়া বা সরিয়ে দেওয়া হবে। ifdef"" যদি নিম্নলিখিতটি সংজ্ঞায়িত করা হয় "এর ifndefঅর্থ" যখন নিম্নলিখিতটি সংজ্ঞায়িত না হয় "।

সুতরাং:

#define one 0
#ifdef one
    printf("one is defined ");
#endif
#ifndef one
    printf("one is not defined ");
#endif

সমান:

printf("one is defined ");

যেহেতু oneসংজ্ঞায়িত করা হয়েছে তাই ifdefসত্য এবং ifndefমিথ্যা। এটি কী হিসাবে সংজ্ঞায়িত হয়েছে তা বিবেচ্য নয় । এর মতো একটি অনুরূপ (আমার মতে আরও ভাল) কোডের টুকরোটি হ'ল:

#define one 0
#ifdef one
    printf("one is defined ");
#else
    printf("one is not defined ");
#endif

যেহেতু এই নির্দিষ্ট পরিস্থিতিতে অভিপ্রায়টি আরও স্পষ্টভাবে নির্দিষ্ট করে।

আপনার নির্দিষ্ট ক্ষেত্রে, সংজ্ঞায়িত ifdefহওয়ার পরে পাঠ্যটি মুছে ফেলা হবে না one। পরে টেক্সট ifndef হয় একই কারণে সরানো হয়েছে। endifকোনও পর্যায়ে দুটি সমাপ্তি রেখা থাকা প্রয়োজন এবং প্রথমটির ফলে নীচে পুনরায় অন্তর্ভুক্ত করা শুরু হবে:

     #define one 0
+--- #ifdef one
|    printf("one is defined ");     // Everything in here is included.
| +- #ifndef one
| |  printf("one is not defined "); // Everything in here is excluded.
| |  :
| +- #endif
|    :                              // Everything in here is included again.
+--- #endif

68

কারও উল্লেখ করা উচিত যে প্রশ্নে একটু ফাঁদ রয়েছে is #ifdefকেবলমাত্র নীচের চিহ্নটি #defineকমান্ড লাইনের মাধ্যমে বা সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করে দেখাবে তবে এর মান (বাস্তবে এর বিকল্প) অপ্রাসঙ্গিক। আপনি এমনকি লিখতে পারে

#define one

পূর্বপরিচয়কারীরা এটি গ্রহণ করে। তবে আপনি যদি #ifএটি ব্যবহার করেন তবে এটি অন্য জিনিস।

#define one 0
#if one
    printf("one evaluates to a truth ");
#endif
#if !one
    printf("one does not evaluate to truth ");
#endif

দেব one does not evaluate to truth। কীওয়ার্ডটি definedপছন্দসই আচরণ পেতে দেয়।

#if defined(one) 

সুতরাং সমতুল্য #ifdef

#ifকনস্ট্রাক্টের সুবিধাটি হ'ল কোড পাথগুলিকে আরও ভালভাবে পরিচালনা করার অনুমতি দেওয়া হয়েছে, পুরানো #ifdef/ #ifndefজুটির সাথে এরকম কিছু করার চেষ্টা করুন ।

#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300

0

"# # এক" এর অর্থ হ'ল "# নির্দিষ্ট সময়" লেখা থাকলে "#if one" কার্যকর করা হয় অন্যথায় "#Findef one" কার্যকর করা হয়।

এটি কেবল সি প্রাক-প্রসেসর (সিপিপি) এর দিকনির্দেশক সমতুল্য, যদি, অন্যথায়, সি ভাষায় শাখা বিবৃতি দেয়।

উদাহরণস্বরূপ, যদি {# একটি নির্দিষ্ট করে} তবে প্রিন্টফ ("একজন সত্যের কাছে মূল্যায়ন করে"); অন্য প্রিন্টফ ("একটি সংজ্ঞায়িত নয়"); সুতরাং যদি একটি বিবৃতি # নির্ধারিত না থাকে তবে বিবৃতিটির অন্য শাখাটি কার্যকর করা হবে।


4
আমি নিশ্চিত নই যে এটি কী যুক্ত করে যে অন্যান্য উত্তরগুলি ইতিমধ্যে কভার করে না, এবং আপনার উদাহরণটি সি বা সি ++ নয়।
স্যারগ্যু

-2

কোডটি অদ্ভুত দেখাচ্ছে কারণ প্রিন্টফ কোনও ফাংশন ব্লকে নেই।


4
পুরো ব্লকটি কোনও ফাংশনের ভিতরেই থাকতে পারে। এবং স্ট্যাকওভারফ্লোতে স্বাগতম। দয়া করে স্ট্যাকওভারফ্লো . com/help/how-to-answer পড়ুন
রাজশেখর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.