c - সি মধ্যে বুলিয়ান মান ব্যবহার করে




boolean (10)

সি কোন অন্তর্নির্মিত বুলিয়ান ধরনের নেই। সি তাদের ব্যবহার করার সেরা উপায় কি?


@ থোমাস ম্যাথিউস: শর্তহীন এক্সপ্রেশনগুলি যদি অ-শূন্য থাকে তবে সত্য হিসাবে বিবেচিত হয় তবে সি মানদণ্ডের প্রয়োজন হয় যে লজিক্যাল অপারেটররা তাদের 0 বা 1 ফিরে দেয়।

@ টম: # সত্য নির্ধারণ করুন! মিথ্যা খারাপ এবং সম্পূর্ণ অর্থহীন। শিরোনাম ফাইল কম্পাইল সি ++ কোডে তার পথ তৈরি করে, তাহলে এটি সমস্যার কারণ হতে পারে:

void foo(bool flag);

...

int flag = TRUE;
foo(flag);

কিছু কম্পাইলার int => bool রূপান্তর সম্পর্কে একটি সতর্কতা উত্পন্ন করবে। কখনও কখনও মানুষ এই কাজ এড়াতে:

foo(flag == TRUE);

একটি সি ++ বুল হতে অভিব্যক্তি জোর। কিন্তু যদি আপনি # সত্য নির্ধারণ করেন! ফলস্বরূপ, আপনি শেষ করেছেন:

foo(flag == !0);

যা একটি int-to-bool তুলনা শেষ করে যা যেকোনভাবে সতর্কতা ট্রিগার করতে পারে।



আপনি C99 ব্যবহার করার অনুমতি দেওয়া হয়, যদি শুধু অন্যান্য উত্তর এবং কিছু স্পষ্টতা একটি পরিপূরক।

+-------+----------------+-------------------------+--------------------+
|  Name | Characteristic | Dependence in stdbool.h |        Value       |
+-------+----------------+-------------------------+--------------------+
| _Bool |   Native type  |    Don't need header    |                    |
+-------+----------------+-------------------------+--------------------+
|  bool |      Macro     |           Yes           | Translate to _Bool |
+-------+----------------+-------------------------+--------------------+
|  true |      Macro     |           Yes           |   Translate to 1   |
+-------+----------------+-------------------------+--------------------+
| false |      Macro     |           Yes           |   Translate to 0   |
+-------+----------------+-------------------------+--------------------+

আমার কিছু পছন্দ:

  • _Bool বা _Bool ? উভয় সূক্ষ্ম, কিন্তু মূল _Bool শব্দ তুলনায় ভাল দেখায়।
  • _Bool এবং _Bool জন্য গ্রহণযোগ্য মান: false বা truefalse বা true পরিবর্তে 0 বা 1 করা বৈধ, তবে যুক্তি প্রবাহটি পড়তে এবং বুঝতে কঠিন।

স্ট্যান্ডার্ড থেকে কিছু তথ্য:

  • _Bool unsigned int নয়, তবে গ্রুপের স্বাক্ষরিত পূর্ণসংখ্যা প্রকারের অংশ । এটি মান 0 বা 1 মান রাখা যথেষ্ট বড়।
  • না, কিন্তু হ্যাঁ, আপনি bool true এবং false redefine করতে পারবেন কিন্তু নিশ্চিত একটি ভাল ধারণা না। এই ক্ষমতা obsolescent বলে মনে করা হয় এবং ভবিষ্যতে মুছে ফেলা হবে।
  • _Bool বা bool _Bool একটি স্কলার টাইপ (গাণিতিক ধরন এবং পয়েন্টার প্রকার) নির্ধারণ করা, যদি স্কেলার মানটি 0 সমান হয় বা 0 সাথে তুলনা করে 0 তবে অন্যথায় ফলাফল 1 : _Bool x = 9; x নির্ধারিত হয় 1 9 রূপান্তর করা হয়।
  • _Bool 1 বাইট (8 বিট), সাধারণত প্রোগ্রামার অন্যান্য বিট ব্যবহার করার চেষ্টা করার জন্য প্রলুব্ধ হয়, তবে সুপারিশ করা হয় না, কারণ এটি দেওয়া একমাত্র নিশ্চিত যে তথ্য সঞ্চয় করার জন্য কেবলমাত্র একটি বিট ব্যবহার করা হয়, char টাইপের মতো নয় 8 বিট উপলব্ধ আছে।

আপনি এটি জন্য একটি গৃহস্থালি, বা অন্য ছোট সংখ্যা ধারক ব্যবহার করতে পারেন।

ছদ্ম-কোড

#define TRUE  1
#define FALSE 0

char bValue = TRUE;

আপনি যদি একটি C99 কম্পাইলার ব্যবহার করেন তবে এটি বুল ধরনের জন্য বিল্ট-ইন সমর্থিত:

#include <stdbool.h>
int main()
{
  bool b = false;
  b = true;
}

http://en.wikipedia.org/wiki/Boolean_data_type


এখানে ব্যবহৃত সংস্করণটি আমি এখানে ব্যবহার করেছি:

typedef enum { false = 0, true = !false } bool;

কারণ মিথ্যা শুধুমাত্র একটি মান আছে, কিন্তু একটি যৌক্তিক সত্যের অনেকগুলি মান থাকতে পারে, তবে কৌশলটি মিথ্যা সংকলনের জন্য কীভাবে কম্পাইলার ব্যবহার করবে তা সত্য করে।

এটি এমন কিছু কোডিংয়ের সমস্যাটির যত্ন নেয় যা নিম্নে আসে:

if (true == !false)

আমি মনে করি আমরা সবাই একমত হব যে এটি একটি ভাল অভ্যাস নয়, কিন্তু "সত্য =! মিথ্যা" করার এক সময় ব্যয় করার জন্য আমরা সেই সমস্যাটি দূর করব।

[সম্পাদনা] শেষ পর্যন্ত আমি ব্যবহার করতাম:

typedef enum { myfalse = 0, mytrue = !myfalse } mybool;

true এবং false সংজ্ঞায়িত করা হয় যে অন্যান্য স্কিমের সঙ্গে নাম সংঘর্ষ এড়ানোর জন্য। কিন্তু ধারণা একই রয়ে যায়।

[সম্পাদনা] বুলিয়ান পূর্ণসংখ্যা রূপান্তর প্রদর্শন:

mybool somebool;
int someint = 5;
somebool = !!someint;

প্রথম (ডান সবচেয়ে)! অ-শূন্য পূর্ণসংখ্যা 0 তে রূপান্তর করে, তারপর দ্বিতীয়টি (সর্বাধিক বামে)! 0 একটি myfalse মান রূপান্তর। আমি শূন্য পূর্ণসংখ্যা রূপান্তর পাঠক জন্য একটি ব্যায়াম হিসাবে এটি ছেড়ে চলে যেতে হবে।


নুজারো কিছু বাউলিয়ান অপারেশন সত্য মূল্যায়ন করা হয়, তাই আপনি শুধু পারে

#define TRUE 1
#define FALSE 0

এবং ধ্রুবক ব্যবহার করুন।


সি একটি বুলিয়ান টাইপ: বুল (অন্তত শেষ 10 (!) বছর)

Stdbool.h অন্তর্ভুক্ত এবং সত্য / মিথ্যা প্রত্যাশিত হিসাবে কাজ করবে।


বিকল্প 1

typedef int bool;
#define true 1
#define false 0

বিকল্প 2

typedef int bool;
enum { false, true };

বিকল্প 3

typedef enum { false, true } bool;

অপশন 4 (C99)

#include <stdbool.h>

ব্যাখ্যা

  • বিকল্প 1, 2 এবং 3 অনুশীলন একই অভিন্ন আচরণ থাকবে। # 2 এবং # 3 # ডিফলাইন ব্যবহার করবেন না, যা আমার মতে ভাল।
  • অপশন 4 শুধুমাত্র কাজ করবে যদি আপনি C99 ব্যবহার করেন এবং এটি করার জন্য এটি "মানক পদ্ধতি"। সম্ভব হলে এই নির্বাচন করুন।

যদি আপনি অনিশ্চিত হন, # 3 দিয়ে যান!


typedef enum {
    false = 0,
    true
} t_bool;




boolean