যদি-অন্য ব্লকে কোনও 'if (0)' ব্লকের উদ্দেশ্য কী?


141

আমার প্রশ্নটি আমি সাবজেক্টে উল্লিখিত রেখাটি সম্পর্কে এবং যা আমি প্রোডাকশন কোডের ভিতরে অনেক জায়গায় দেখতে পাচ্ছি।

সামগ্রিক কোডটি এর মতো দেখাচ্ছে:

if (0) {
    // Empty braces
} else if (some_fn_call()) {
    // actual code
} else if (some_other_fn_call()) {
    // another actual code
    ...
} else {
    // default case
}

অন্যান্য শাখাগুলি আমার প্রশ্নের সাথে সম্পর্কিত নয়। আমি ভাবছি if (0)এখানে রাখার অর্থ কী। ধনুর্বন্ধনী খালি, তাই আমি মনে করি না যে এটি কোডের কিছু ব্লক মন্তব্য করার কথা। এটি কি সংযোজকটিকে কিছু অপ্টিমাইজেশন করতে বাধ্য করে বা এর উদ্দেশ্যগুলি ভিন্ন?

আমি এই সুস্পষ্ট কেসটি এখানে এসও এবং ইন্টারনেটে অনুসন্ধান করার চেষ্টা করেছি, তবে কোনও সাফল্য পাইনি। জাভাস্ক্রিপ্ট সম্পর্কে একই রকম প্রশ্ন রয়েছে, তবে সি নয়, অন্য একটি প্রশ্ন রয়েছে, যখন শূন্যকে একটি `if` শর্তে নির্ধারিত করা হয় তখন কী হয়? , তবে এটি ভেরিয়েবলের শূন্য নিয়োগের বিষয়ে আলোচনা করে, 'যদি (0)' ব্যবহার নিজেই না করে।


2
উক্তিটি অপ্রাসঙ্গিক বলে মনে হচ্ছে। এই বিবৃতি সহ এবং ছাড়াই অ্যাসেম্বলি কোড উত্পন্ন করুন এবং আপনি দেখতে পাবেন যে হুডের নীচে কী চলছে।
হ্যাক

2
এটি একটি স্বয়ংক্রিয়ভাবে উত্পন্ন কোড এটি সম্ভব।
freakish

উত্তর:


91

আমি কখনও কখনও এটি প্রতিসাম্যের জন্য ব্যবহার করি যাতে আমি else if{প্রথমে কিছু মনে না করে অন্যকে আমার সম্পাদকের সাথে অবাধে সরিয়ে নিতে পারি if

শব্দার্থকভাবে

if (0) {
    // Empty braces
} else 

অংশটি কিছু করে না এবং এটি মুছতে আপনি অপ্টিমাইজারের উপর নির্ভর করতে পারেন।


239
ব্যক্তিগত মতামত: যদিও এটি কারণ হিসাবে এটি এটি যেমন লেখা হয়, তবুও আমি মনে করি এটি একটি খারাপ সমর্থনযোগ্য। কোডটি লেখা হওয়ার চেয়ে প্রায়শই পঠিত হয় এবং এই অপ্রয়োজনীয় কোডটি কেবল পাঠকের জন্য ওভারহেডকে পার্সিং করে বৃদ্ধি করে।
ব্যবহারকারী 694733

13
@ ইউজার 69৯4৩৩৩: আপনি যুক্তি দিতে পারেন যে if elseসমস্ত গুরুত্বপূর্ণ কোড পাথের সাধারণ উপসর্গটি শর্তগুলি সুন্দরভাবে সাজিয়ে তোলে এবং তাদের স্ক্যান করা সহজ করে তোলে। (যদিও এটি সাবজেক্টিভ, যদিও এটি শর্ত এবং কোড ব্লকের মধ্যে আসলে কী রয়েছে তা অনেকটাই নির্ভর করে))
এম ওহম

72
আমি মনে করি না if (0) {..}কোনও পার্সিবিলিটি / পঠনযোগ্যতা সমস্যার পরিচয় করিয়ে দিই। এটি কিছুটা সি সম্পর্কে জানেন এমন ব্যক্তির কাছে স্পষ্ট হওয়া উচিত এটি কোনও সমস্যা নয়। সমস্যাটি হ'ল এটি পড়ার পরে ফলো-আপ প্রশ্ন: "ততক্ষণে এটি কী?" যদি না এটি ডিবাগিং / অস্থায়ী উদ্দেশ্যে হয় (যেমন, উদ্দেশ্য ifপরে সেই ব্লকটি "সক্ষম" করা হয় ), আমি সম্পূর্ণরূপে অপসারণের পক্ষে চাই । মূলত এই জাতীয় কোড "পড়া" সম্ভবত কোনও অকারণে পাঠকের জন্য অযথা "বিরতি" সৃষ্টি করবে। এবং এটি মুছে ফেলার যথেষ্ট কারণ এটি।
পিপি

77
দেখে মনে হচ্ছে এটি পঠনযোগ্যতা থেকে স্পষ্টভাবে আলাদা হয়। এটি এত খারাপ ছিল যে প্রোগ্রামারটি এটির জন্য জিজ্ঞাসা করতে এসওকে প্রেরণ করেছিল। ভাল লক্ষণ নয়।
ভেক্টরজহান

26
এমনকি এই প্যাটার্নটি ব্যবহার করেও, আমি জানি না আপনি " else ifউদ্বেগ ছাড়াই সম্পাদককে ঘিরে " করতে পারেন কিনা কারণ শর্তগুলি পরস্পর একচেটিয়া নাও হতে পারে, যার ক্ষেত্রে অর্ডারটি গুরুত্বপূর্ণ। ব্যক্তিগতভাবে আমি কেবল ব্যবহার করব if, এবং প্রারম্ভিক রিটার্ন সম্পাদন করব , যদি প্রয়োজন হয় তবে লজিক চেইনটিকে একটি পৃথক ফাংশনে সরিয়ে নেওয়া।
জন উউ

105

এটি কার্যকর হতে পারে যদি #ifবিবৃতি আছে, আলা

   if (0)
   {
       // Empty block
   }
#if TEST1_ENABLED
   else if (test1())
   {
      action1();
   }
#endif
#if TEST2_ENABLED
   else if (test2())
   {
      action2();
   }
#endif

প্রভৃতি

এই ক্ষেত্রে, পরীক্ষার যে কোনও (এবং সমস্ত) #if'সম্পাদিত' হতে পারে , এবং কোডটি সঠিকভাবে সংকলন করবে। প্রায় সমস্ত সংকলক if (0) {}অংশটি সরিয়ে ফেলবে । একটি সাধারণ অটোর জেনারেটর কোডটি তৈরি করা কিছুটা সহজ বলে এ জাতীয় কোড তৈরি করতে পারে - এটি প্রথম সক্ষম ব্লককে আলাদাভাবে বিবেচনা করতে হবে না।


5
অনেক ক্ষেত্রে, একটি if/ else ifশৃঙ্খলা সিদ্ধান্ত গাছের মতো এত বেশি ব্যবহৃত হয় না, বরং এটি "প্রথম মিলনের শর্ত হিসাবে কাজ" হিসাবে নির্মাণ করা হয়, যেখানে সর্বোচ্চ-অগ্রাধিকার পাওয়ার শর্তটি "বিশেষ" নয় isn't যদিও আমি if(0)সমস্ত প্রকৃত শাখাকে সামঞ্জস্যপূর্ণ বাক্য গঠন করার অনুমতি দেওয়ার উপায় হিসাবে দেখিনি , তবে আমি এটির সুসংগত সিনট্যাক্স পছন্দ করি।
সুপারক্যাট

1
এটি else ifএক্ষেত্রে কার্যকরও নয় কারণ আপনিও একই প্রভাবটি অর্জন করতে পারেন: কেবলমাত্র লাইনটি দুটি ভাগে ভাগ করে প্রিপ্রোসেসর গার্ডকে রেখে দিন।
কনরাড রুডল্ফ

1
পুনঃটুইট আপনি কিভাবে এটি লিখতে হবে?
জিআইকে

1
@ জাইক আমি if (0)শাখাটি সরিয়ে ফেলব এবং elseএর নিজস্ব লাইনে থাকা বাকীগুলিকে পুনরায় ফর্ম্যাট করব , যার চারপাশে রক্ষী দ্বারা বেষ্টিত ছিল #if TEST1_ENABLED && TEST2_ENABLED
কনরাড রুডল্ফ

5
আমি মনে করি আপনি যদি প্রহরীদের সংখ্যা দ্বিগুণ করতে এবং গার্ডের শর্তাবলীর উল্লেখের সংখ্যা দ্বিগুণ করতে চান তবে কনরাড রুডল্ফ এটি ঠিক আছে I
hobbs

44

আমি উত্পন্ন কোডে ব্যবহৃত একই ধরণটি দেখেছি seen উদাহরণস্বরূপ, এসকিউএল-এ, আমি গ্রন্থাগারগুলি নীচের whereধারাটি নির্গত করতে দেখেছি ।

where 1 = 1

এটি সম্ভবত অন্যান্য মানদণ্ডগুলিতে যুক্ত করা সহজ করে তোলে কারণ andএটি প্রথম মানদণ্ড কিনা তা দেখার জন্য অতিরিক্ত অতিরিক্ত মানদণ্ডের পরিবর্তে সমস্ত অতিরিক্ত মানদণ্ড প্রেন্টেন্ট করা যেতে পারে ।


4
1=1কারণ আপনি সবসময় যুক্ত করতে পারেন এছাড়াও "দরকারী" হয় whereসামনে নিঃশর্তভাবে। অন্যথায় আপনাকে খালি কিনা তা পরীক্ষা করে দেখতে হবে, এবং যদি তাই হয় তবে whereধারাটি তৈরি করা এড়াতে হবে ।
বাকুরিউ

2
উপরন্তু, সবচেয়ে ডাটাবেস স্বয়ংক্রিয়ভাবে "অপসারণ" হবে 1=1থেকে WHERE, তাই এটি কর্মক্ষমতার উপর একটা প্রভাব নেই।
মনিকা এর মামলা মামলা

7
এটি এমন একটি লাইব্রেরিতে গ্রহণযোগ্য যা স্বয়ংক্রিয়ভাবে এসকিউএল কোয়েরি উত্পন্ন করে যা সম্ভবত সম্ভবত ডিওঅপস টিম দ্বারা দেখা যায় না। এটি উচ্চ-স্তরের কোডে "গ্রহণযোগ্য" নয় যা একাধিকবার লিখতে হবে এবং পড়তে হবে।
ফাগিও

চূড়ান্ত শর্তগুলির অজানা সংখ্যার সাথে এক ধরণের গতিশীল এসকিউএল তৈরি করার সময় এটি সত্যিই সহজ উপায় approach
অধিনায়ক 12

1
@ ফ্রেয়াকিশ সত্যই আমি এর বিপরীতে লিখেছি: জেনারেটড কোডে খারাপ পাঠযোগ্য পাঠ্য সিনট্যাক্স গ্রহণযোগ্য কারণ এটি সম্ভবত কখনও পড়তে হবে না, বিকাশকারীরা দ্বারা বজায় রাখা উচ্চ-স্তরের ফাংশনাল কোডে নয়।
ফাগিও

44

যেমন লেখা আছে, if (0) {}ধারাটি কিছুই রচনা করে না।

আমি সন্দেহ এই মই উপরের দফা ফাংশন পরিবর্তন করে (ডিবাগ বা তুলনা উদ্দেশ্যে জন্য) একবার অস্থায়ীভাবে নিষ্ক্রিয় সব অন্যান্য কার্যকারিতা একটি সহজ জায়গা প্রদান করা হয় 0একটি থেকে 1বা true


2
এটা পেরেক। আমি ডিবাগিংয়ের পাশাপাশি অন্য কোনও কারণ দেখতে পাইনি।
tfont

16

আমি কোনও অপ্টিমাইজেশান সম্পর্কে নিশ্চিত নই, তবে আমার দুটি সেন্ট:

কিছু কোড পরিবর্তন করার কারণে এটি ঘটেছে, যেখানে একটি প্রাথমিক শর্ত মুছে ফেলা হয়েছিল, (প্রাথমিক ifব্লকে ফাংশন কল , আসুন বলি), তবে বিকাশকারী / রক্ষণাবেক্ষণকারীরা

সুতরাং সম্পর্কিত ifব্লকটি সরানোর পরিবর্তে , তারা কেবল শর্তটি পরিবর্তিত করে if(0)এগিয়ে চলেছে ।


3
if(0)শাখা কভারেজও কি কমছে না?
ডেভিড জাজালাই

1
@ ডেভিডসজালাই সম্পূর্ণরূপে নয় - সর্বাধিক এটি 1 দ্বারা হ্রাস পাবে (পূর্ববর্তী 2 থেকে) - তবে আমার জ্ঞানের সেরা হিসাবে কভারেজের জন্য একটি হিট এখনও লাগবে।
সৌরভ ঘোষ

15

এটি কোড পচা।

এক পর্যায়ে "যদি" দরকারী কিছু করেছিল, পরিস্থিতি পরিবর্তিত হয়েছে, সম্ভবত মূল্যায়ন করা ভেরিয়েবলটি সরানো হয়েছে।

যে ব্যক্তি সিস্টেম ফিক্সিং / পরিবর্তন করছে সে সিস্টেমের লজিককে প্রভাবিত করার জন্য যথাসম্ভব কম চেষ্টা করেছিল তাই তিনি কেবল কোডটি পুনরায় সংকলন করবে কিনা তা নিশ্চিত করেছিলেন। সুতরাং তিনি একটি "যদি (0)" রেখে যান কারণ এটি দ্রুত এবং সহজ এবং তিনি যা করতে চান তা তিনি পুরোপুরি নিশ্চিত নন। তিনি সিস্টেমে কাজ করছেন এবং এটি পুরোপুরি ঠিক করতে তিনি ফিরে যান না।

তারপরে পরবর্তী বিকাশকারী উপস্থিত হন এবং মনে করেন যে এটি ইচ্ছাকৃতভাবে করা হয়েছিল এবং কোডের সেই অংশটি সম্পর্কে কেবল মন্তব্য করে (যেহেতু এটি কোনওভাবেই মূল্যায়ন করা হচ্ছে না), তারপরে পরবর্তী সময় কোডটি স্পর্শ করা হলে সেই মন্তব্যগুলি সরানো হবে।


2
হা. প্রাচীন কোডের জন্য, একবারে একটি করে ডেড-কোড-রিমুভাল পরিবর্তন করুন। আমি "মৃত" কোডের বিপরীতে স্ল্যাশ-ও-বার্ন রাস্তায় যতবার গিয়েছি কেবল তা আবিষ্কার করতে পেরেছি যে সেখানে কিছু উদ্ভট পার্শ্ব-প্রতিক্রিয়া রয়েছে যা স্ল্যাশিং-এন্ড বার্নিং মিস হয়েছিল।
জুলি অস্টিনে

15

একটি সম্ভাবনা এখনও উল্লেখ করা হয়নি: if (0) {লাইনটি একটি ব্রেকপয়েন্টের জন্য একটি সুবিধাজনক স্থান সরবরাহ করতে পারে।

ডিবাগিং প্রায়শই অপ-অপ্টিমাইজড কোডে করা হয় যাতে সর্বদা-মিথ্যা পরীক্ষা উপস্থিত থাকে এবং এতে ব্রেকপয়েন্ট সেট রাখতে সক্ষম হয়। উত্পাদনের জন্য সংকলিত হয়ে গেলে কোডের লাইনটি অপ্টিমাইজ হবে। আপাতদৃষ্টিতে অকেজো লাইনটি মুক্তির বিল্ডগুলিকে প্রভাবিত না করেই বিকাশ ও পরীক্ষার জন্য কার্যকারিতা দেয়।

উপরে আরও ভাল পরামর্শ রয়েছে; উদ্দেশ্য কী তা সত্যিই জানার একমাত্র উপায় হ'ল লেখককে খুঁজে বের করা এবং জিজ্ঞাসা করা। আপনার উত্স কোড নিয়ন্ত্রণ সিস্টেম এটিতে সহায়তা করতে পারে। ( blameটাইপ কার্যকারিতা সন্ধান করুন।)


9

আমি প্রাক-প্রসারিত জাভাস্ক্রিপ্টে অ-অ্যাক্সেসযোগ্য কোড ব্লক দেখেছি যা একটি টেম্প্লেটিং ভাষা ব্যবহার করে তৈরি করা হয়েছে।

উদাহরণস্বরূপ, আপনি যে কোডটি পড়ছেন তা কোনও সার্ভার থেকে আটকানো যেতে পারে যা প্রথম শর্তটি পূর্ব-মূল্যায়ণ করেছিল যা সেই সময়ে কেবলমাত্র সার্ভারের পক্ষে উপলব্ধ একটি ভেরিয়েবলের উপর নির্ভর করে।

if ( ${requestIsNotHttps} ){ ... }else if( ...

যা একবার প্রাক-সংকলিত হেনেস:

if ( 0 ){ ... }else if ( ...

আশা করি এটি আপনাকে প্রো-রিসাইক্লিং কোডার যুগের সম্ভাব্য লো কীবোর্ড ক্রিয়াকলাপটিকে পুনরায় সংযুক্ত করতে সহায়তা করবে যার জন্য আমি উত্সাহ প্রকাশ করছি!


1
আমি সম্মত, সর্বব্যাপী অটোমেশনের যুগে আমাদের আরও বেশি স্বয়ংক্রিয় জেনারেটেড কোডের উপর নির্ভর করা উচিত, কারণ এটি আমাদের সত্যিক বিষয়ের উপর আরও বেশি সময় ব্যয় করতে দেয়। তবে আপাতত আমার আগ্রহের বিষয়টি হ'ল কীভাবে এই সবকিছু হুডের নীচে আর্কিটেকচার করা হয়।
Zzaponka

8

সেই কনস্ট্রাক্টটি জেনেরিক প্রোগ্রামিংটি প্রকার সুরক্ষা সহ বাস্তবায়নের জন্য সি-তেও ব্যবহার করা যেতে পারে, অপ্রাপ্যযোগ্য কোডটি এখনও কম্পাইলার দ্বারা চেক করা হয়েছে তার উপর নির্ভর করে:

// this is a generic unsafe function, that will call fun(arg) at a later time
void defer(void *fun, void *arg);

// this is a macro that makes it safer, by checking the argument
// matches the function signature
#define DEFER(f, arg) \
   if(0) f(arg); \              // never actually called, but compile-time checked
   else defer(f, (void *)arg);  // do the unsafe call after safety check

void myfunction(int *p);

DEFER(myfunction, 42);     // compile error
int *b;
DEFER(myfunction, b);      // compiles OK

6

আমি মনে করি এটি কেবল খারাপ কোড। সংকলক এক্সপ্লোরারটিতে একটি দ্রুত উদাহরণ লেখার জন্য, আমরা দেখতে পাই যে জিসিসি এবং ঝনঝন উভয় ক্ষেত্রেই if (0)ব্লকটির জন্য কোনও কোড তৈরি করা হয়নি , এমনকি অপ্টিমাইজেশান সম্পূর্ণ অক্ষম করেও:

https://godbolt.org/z/PETIks

if (0)কারণগুলি সরিয়ে নিয়ে খেলে জেনারেট কোডটিতে কোনও পরিবর্তন হয় না, তাই আমি এই সিদ্ধান্তে পৌঁছেছি যে এটি কোনও অনুকূলিতকরণ নয়।

এটি সম্ভবত সম্ভব যে শীর্ষ ifব্লকে কিছু থাকত যা পরে সরিয়ে ফেলা হয়েছিল। সংক্ষেপে, দেখে মনে হচ্ছে এটি অপসারণ হ'ল ঠিক একই কোডটি উত্পন্ন হতে পারে, তাই নির্দ্বিধায় এটি করুন।


6

যেমনটি বলা হয়েছে, শূন্যটিকে মিথ্যা হিসাবে মূল্যায়ন করা হয় এবং সংকলকটি সম্ভবত শাখাটি অনুকূলিত করে তুলবে।

আমি কোডে এটি আগেও দেখেছি যেখানে একটি নতুন বৈশিষ্ট্য যুক্ত করা হয়েছিল এবং একটি কিল-সুইচ দরকার ছিল (যদি বৈশিষ্ট্যটিতে কোনও সমস্যা হয়ে থাকে তবে আপনি কেবল এটি বন্ধ করতে পারেন), এবং কিছুক্ষণ পরে যখন কিল-সুইচটি সরানো হয়েছিল প্রোগ্রামারও শাখাটি মুছে ফেলেনি, যেমন

if (feature_a_active()) {
    use_feature_a();
} else if (some_fn()) {
   ...

হয়ে ওঠে

if (0) {
   // empty
} else if (some_fn()) {
   ...

1

এটি এই ব্লকটি কেবল 1 ব্লক রাখলে ডিবাগ করতে সহায়তা করে else এবং এছাড়াও আমরা অন্য ব্লক প্রসারিত করতে পারেন।


1
    Actually according to my opinion, if we put any variable for checking inside
    e.g:-
public static void main(string args[])
{
        var status;
        var empList=_unitofWork.EmpRepository.Get(con=>con.isRetired==true);
        //some code logic 
        if(empList.count>0)
        {
          status=true;
        }
        if(status)
        {
         //do something
        }
        else
        {
        //do something else
        }
}
     if then its dynamically get the value in run time and invoke the logic inside it, else its simply extra line of code i guess.

    Anybody have any depth knowledge why this thing is used....or agree with me.
    kindly respond. 

1

@ পিএসকোকিকের উত্তর ঠিক আছে তবে আমি আমার দুটি সেন্ট যুক্ত করছি। আমি মন্তব্য হিসাবে বা উত্তর হিসাবে এটি করা উচিত কিনা তা নিশ্চিত না; পরেরটি বেছে নিন, কারণ আইএমএইচও অন্যরা দেখতে মূল্যবান, যদিও মন্তব্যগুলি প্রায়শই অদৃশ্য থাকে।

আমি মাঝে মধ্যেই ব্যবহার করি না

if(0) {
   //deliberately left empty
} else if( cond1 ) {
   //deliberately left empty
} else if( cond2 ) {
   //deliberately left empty
...
} else {
   // no conditions matched
}

তবে আমি মাঝে মাঝে করি

if( 1 
    && cond1 
    && cond2
    ...
    && condN
) {

অথবা

if( 0 
    || cond1 
    || cond2
    ...
    || condN
) {

জটিল পরিস্থিতিতে। একই কারণে - সম্পাদনা করা সহজ, # আইফডিফ ইত্যাদি

এই জন্য, পার্ল আমি করব

@array = (  
    elem1,
    elem2,
    ...
    elem1,
) {
  • তালিকার শেষে কমাটি নোট করুন। আমি ভুলে গেছি যদি কমাগুলি সি এবং সি ++ তালিকায় বিভাজক বা ডিলিমেটার হয়। আইএমএইচও এটিই আমরা এক জিনিস শিখেছি: [ পার্লে কমা চালিয়ে যাওয়া কি খারাপ অভ্যাস? কমা] একটি ভাল জিনিস। যে কোনও নতুন স্বরলিখনের মতো, অভ্যস্ত হতে কিছুটা সময় লাগে।

আমি if(0)কোডটি লিস্পের সাথে তুলনা করি

(cond   (test1    action1)
   (test2    action2)
   ...
   (testn   actionn))

যা, আপনি এটি অনুমান করেছিলেন, আমি ইন্ডেন্ট করতে পারি

(cond   
   (test1    action1)
   (test2    action2)
   ...
   (testn   actionn)
)

আমি মাঝে মাঝে কল্পনা করার চেষ্টা করেছি যে এর চেয়ে আরও বেশি বেশি মানবীয় পাঠযোগ্য সিনট্যাক্স দেখতে কেমন look

সম্ভবত

IF
:: cond1 THEN code1
:: cond2 THEN code2
...
:: condN THEN codeN
FI

ডিকস্ট্রার [ https://en.wikedia.org/wiki/Guarded_Command_Language#Se लेक्शन :_if [গেরেল্ড কমান্ড ল্যাঙ্গুয়েজ] দ্বারা অনুপ্রাণিত ।

তবে এই বাক্য গঠনটি বোঝায় যে শর্তগুলি সমান্তরালভাবে মূল্যায়ন করা হয়, যেখানে if...else-ifশর্তগুলির ক্রমিক এবং অগ্রাধিকারযুক্ত মূল্যায়ন বোঝায়।

আমি অন্যান্য প্রোগ্রাম তৈরি করে এমন প্রোগ্রাম লেখার সময় এই ধরণের কাজটি শুরু করি যেখানে এটি বিশেষত সুবিধাজনক।

যখন আমরা এটিতে থাকি তখন ইন্টেলের পুরানো আইএইচডিএল ব্যবহার করে আরটিএল লেখার সময় আমার কাছে স্টাফের মতো কোডড থাকে

   IF 0 THEN /*nothing*/
   **FORC i FROM 1 TO 10 DOC** 
   ELSE IF signal%i% THEN    
      // stuff to do if signal%i% is active
   **ENDC** 
   ELSE   
      // nothing matched 
   ENDIF

যেখানে FORC..DOC..ENDCম্যাক্রো প্রিপ্রেসেসর লুপটি নির্মিত হয়, এটি প্রসারিত হয়

   IF 0 THEN /*nothing*/
   ELSE IF signal1 THEN    
      // stuff to do if signal1 is active
   ELSE IF signal2 THEN    
      // stuff to do if signal2 is active
   ...
   ELSE IF signal100 THEN    
      // stuff to do if signal100 is active
   ELSE   
      // nothing matched 
   ENDIF

এটি একক অ্যাসাইনমেন্ট, অ-বাধ্যতামূলক, কোড ছিল, সুতরাং আপনার যদি প্রথম সেট বিট সন্ধানের মতো কাজ করার প্রয়োজন হয় তবে রাষ্ট্রীয় ভেরিয়েবল সেট করার অনুমতি ছিল না।

   IF 0 THEN /*nothing*/
   ELSE IF signal1 THEN    
      found := 1
   ELSE IF signal2 THEN    
      found := 2
   ...
   ELSE IF signal100 THEN    
      found := 100
   ELSE   
      // nothing matched 
   ENDIF

এটি ভাবতে আসুন, এটিই প্রথম স্থান হতে পারে যে আমি এই জাতীয় নির্মাণের মুখোমুখি হয়েছি।

বিটিডাব্লু, কারও কারও যদি (0) শৈলীর প্রতি আপত্তি ছিল - অন্যথায়-যদি-শর্তগুলি ধারাবাহিকভাবে নির্ভরশীল হয় এবং নির্বিচারে পুনরায় সাজানো যায় না - আরটিএল এ ওআর এবং এক্সওর যুক্তির জন্য প্রযোজ্য না - তবে সংক্ষিপ্ত- সার্কিট && এবং ||


-1

উদাহরণস্বরূপ, আমি এটি ব্যবহার করে ত্রুটিগুলি পরিচালনা করতে দেখেছি

if(0){
lable1:
   //do something
}
if(0){
lable2:
   //do something
}
.
.
and so on.

if(condition_fails)
   goto lable1;

গোটো ত্রুটিগুলি পরিচালনা করতে ব্যবহৃত হয় যখন এটি তাত্পর্যপূর্ণ হতে পারে, বিবৃতি কেবল তখনই কার্যকর করা হয় যখন কোনও ত্রুটি দেখা দেয়। আমি এটি খুব পুরানো সি-কোডে দেখেছি (যেখানে '()' এর বাইরে ফাংশন আর্গুমেন্ট লেখা হয়), এখনই কেউ এটিকে অনুসরণ করে বলে মনে করবেন না।


-2

আমি এটি কয়েকবার দেখেছি, আমার মনে হয় সর্বাধিক সম্ভবত কারণটি হ'ল কোডটির কোনও পুরানো / ভিন্ন সংস্করণ / শাখায় কিছু মূল্যায়ন করা হয়েছিল বা সম্ভবত ডিবাগ করার জন্য এবং এটিকে পরিবর্তন করা if(0)ছিল যা কিছু ছিল তা মুছে ফেলার কিছুটা অলস উপায় is ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.