ইন সি / সি ++
একটি #if 0
/ #endif
ব্লকের মধ্যে স্থাপন কোড কি হবে ?
#if 0
//Code goes here
#endif
কোডটি কি কেবল এড়িয়ে যায় এবং তাই কার্যকর হয় না?
ইন সি / সি ++
একটি #if 0
/ #endif
ব্লকের মধ্যে স্থাপন কোড কি হবে ?
#if 0
//Code goes here
#endif
কোডটি কি কেবল এড়িয়ে যায় এবং তাই কার্যকর হয় না?
উত্তর:
এটি কেবল কার্যকর হয় না, এটি সংকলিতও হয় না।
#if
হ'ল একটি প্রিপ্রোসেসর কমান্ড, যা প্রকৃত সংকলনের পদক্ষেপের আগে মূল্যায়ন করে। সেই ব্লকের অভ্যন্তরীণ কোডটি সংকলিত বাইনারিটিতে উপস্থিত হয় না।
এটি প্রায়শই সাময়িকভাবে কোডগুলির সেগমেন্টগুলি পরে আবার চালু করার অভিপ্রায়গুলির সাথে সরাতে ব্যবহৃত হয়।
একটি গুরুত্বপূর্ণ পার্থক্য ছাড়া ব্লকটি মন্তব্য করার জন্য এটি অভিন্ন: নেস্টিং কোনও সমস্যা নয়। এই কোডটি বিবেচনা করুন:
foo();
bar(x, y); /* x must not be NULL */
baz();
আমি যদি এটির মন্তব্য করতে চাই তবে আমি চেষ্টা করতে পারি:
/*
foo();
bar(x, y); /* x must not be NULL */
baz();
*/
Bzzt। বাক্যগঠন ত্রুটি! কেন? কারণ ব্লক মন্তব্যগুলি বাসা বাঁধে না এবং তাই (যেমন আপনি এসও এর সিনট্যাক্স হাইলাইট করে দেখতে পাচ্ছেন) */
"NULL" শব্দটি মন্তব্যটি সমাপ্ত করে, baz
কলটি কমেন্ট না করে এবং সিনট্যাক্স ত্রুটির */
পরে তৈরি করে baz
। অন্য দিকে:
#if 0
foo();
bar(x, y); /* x must not be NULL */
baz();
#endif
পুরো জিনিস মন্তব্য করার জন্য কাজ করে। এবং #if 0
এস একে অপরের সাথে বাসা বাঁধবে, এর মতো:
#if 0
pre_foo();
#if 0
foo();
bar(x, y); /* x must not be NULL */
baz();
#endif
quux();
#endif
যদিও অবশ্যই এটি কিছুটা বিভ্রান্তি পেতে পারে এবং সঠিকভাবে মন্তব্য না করা হলে রক্ষণাবেক্ষণের মাথা ব্যাথা হয়ে যায়।
foo.c:3: unterminated string or character constant
থেকে পেয়েছি, আপনি কী ব্যবহার করছেন?
#If 0… #endif ব্লকটি ঠিক কী করে?
এটি আপনাকে বলে যে লেখক স্পষ্টতই কোনও সংস্করণ নিয়ন্ত্রণ ব্যবস্থা সম্পর্কে শুনেনি। যার ফলে, আপনাকে যতদূর সম্ভব দৌড়ে যেতে বলে ...
আমি #else
মামলার জন্য যুক্ত করতে চাই :
#if 0
/* Code here will NOT be complied. */
#else
/* Code will be compiled. */
#endif
#if 1
/* Code will be complied. */
#else
/* Code will NOT be compiled. */
#endif
প্রিপ্রোসেসর # যদি দেখেন তবে পরের টোকেনটির একটি শূন্য-মান আছে কিনা তা পরীক্ষা করে। এটি যদি করে তবে এটি সংকলকের জন্য কোডটি প্রায় রাখে। যদি এটি না হয় তবে এটি সেই কোড থেকে মুক্তি পেয়ে যায় তাই সংকলকটি কখনই এটি দেখে না।
যদি কেউ #if 0 বলেন তবে তারা কার্যকরভাবে কোডটি মন্তব্য করছেন যাতে এটি কখনই সংকলিত হবে না। আপনি এটিকে একইভাবে ভাবতে পারেন যেমন তারা / * ... * / এটি চারপাশে রেখেছিল। এটি একেবারে এক নয়, তবে এটির একই প্রভাব রয়েছে।
বিস্তারিত কী ঘটেছিল তা যদি আপনি বুঝতে চান তবে আপনি প্রায়শই দেখতে পারেন। অনেক সংকলক প্রিপ্রসেসর চালুর পরে আপনাকে ফাইলগুলি দেখতে দেয়। উদাহরণস্বরূপ, ভিজ্যুয়াল সি ++ এ স্যুইচ / পি কমান্ড প্রিপ্রসেসরটি কার্যকর করবে এবং ফলাফলগুলি একটি .i ফাইলে রাখবে।
#if WIN32 || __CYGWIN__
তবে এটি প্রত্যাশার মতো কাজ করে।
একটি দিয়ে শুরু লাইনস #
হয় প্রাক প্রসেসর নির্দেশনা । #if 0 [...] #endif
ব্লকগুলি এটি সংকলক করে না এবং কোনও মেশিন কোড উত্পন্ন করবে না।
উত্স ফাইলের মাধ্যমে প্রিপ্রোসেসর দিয়ে যা ঘটে তা আপনি প্রদর্শিত করতে পারেন ifdef.cxx
:
#if 0
This code will not be compiled
#else
int i = 0;
#endif
চলমান gcc -E ifdef.cxx
আপনাকে কী সংকলিত হবে তা দেখাবে।
উন্নয়ন চক্র চলাকালীন কোডের কোনও ব্লক সংকলিত হওয়া রোধ করতে আপনি এই প্রক্রিয়াটি ব্যবহার করতে পারেন তবে আপনি সম্ভবত এটি আপনার উত্স নিয়ন্ত্রণে পরীক্ষা করতে চান না কারণ এটি কেবল আপনার কোডটিতে ক্রাফ্ট যুক্ত করে এবং পাঠযোগ্যতা হ্রাস করে। যদি এটি কোডের একটি historicalতিহাসিক টুকরো যা মন্তব্য করা হয়েছে, তবে এটি অপসারণ করা উচিত: উত্স নিয়ন্ত্রণে ইতিহাস রয়েছে, তাই না?
এছাড়াও, উত্তর সি এবং সি ++ উভয়ের ক্ষেত্রে একই হতে পারে তবে সি / সি ++ নামে কোনও ভাষা নেই এবং এ জাতীয় ভাষার উল্লেখ করা ভাল অভ্যাস নয়।
বেশ না
int main(void)
{
#if 0
the apostrophe ' causes a warning
#endif
return 0;
}
এটি "tc: 4: 19: সতর্কতা: জিসিসি ৪.২.৪ সহ 'অক্ষর অনুপস্থিত' দেখায়
এটি মন্তব্য করার একটি সস্তা উপায়, তবে আমি সন্দেহ করি যে এটির ডিবাগিং সম্ভাবনা থাকতে পারে। উদাহরণস্বরূপ, ধরুন আপনার কাছে কোনও বিল্ড রয়েছে যা কোনও ফাইলে আউটপুট মান দেয়। আপনি এটি চূড়ান্ত সংস্করণে নাও চান যাতে আপনি #if 0 ... #endif ব্যবহার করতে পারেন।
এছাড়াও, আমি সন্দেহ করি যে ডিবাগ উদ্দেশ্যে এটি করার আরও ভাল উপায় হ'ল:
#ifdef DEBUG
// output to file
#endif
আপনি এটির মতো কিছু করতে পারেন এবং এটি আরও বোধগম্য হতে পারে এবং ফলাফলগুলি দেখতে আপনাকে কেবল ডিবাগকে সংজ্ঞায়িত করতে হবে।
//
বা বিভাগটি দিয়ে শুরু করতে হবে/*
এবং এর সাথে বিভাগটি শেষ করতে হবে*/
। পরবর্তী কৌশলগুলির সাথে সমস্যাটি হ'ল মন্তব্যটি বাসা বাঁধে না তাই বিকাশকারীকে অবশ্যই*/
শুরু এবং শেষের মধ্যে কোনওটি চেক এবং পরিচালনা করতে হবে ।