আমি নিম্নলিখিত কোডটি বুঝতে চাই:
//...
#define _C 0x20
extern const char *_ctype_;
//...
__only_inline int iscntrl(int _c)
{
return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _C));
}
এটি obtybsd অপারেটিং সিস্টেম উত্স কোড থেকে ctype.h ফাইল থেকে উদ্ভূত । এই ফাংশনটি পরীক্ষা করে যদি কোনও চর কোনও নিয়ন্ত্রণ অক্ষর হয় বা এএসসিআই রেঞ্জের ভিতরে একটি মুদ্রণযোগ্য অক্ষর হয়। এটি আমার বর্তমান চিন্তার শৃঙ্খল:
- iscntrl ('a') বলা হয় এবং 'a' এর পূর্ণসংখ্যার মানতে রূপান্তরিত হয়
- প্রথমে _c -1 হয় কিনা তা পরীক্ষা করে দেখুন 0 টি আবার ...
- অ্যাড্রেসটি পূর্বনির্ধারিত পয়েন্টারটিকে 1 দ্বারা বাড়িয়ে দিন
- এই ঠিকানাটিকে দৈর্ঘ্যের অ্যারে (স্বাক্ষরবিহীন চর) ((অন্তর্নিহিত) 'এ') এর পয়েন্টার হিসাবে ঘোষণা করুন
- বিটওয়াইজ এবং অপারেটরটিকে _ সি (0x20) এবং অ্যারে (???) এ প্রয়োগ করুন
একরকম, আশ্চর্যের সাথে, এটি কাজ করে এবং প্রতিবার 0 প্রদান করা গৃহস্থালি _c প্রিন্টযোগ্য অক্ষর নয়। অন্যথায় এটি মুদ্রণযোগ্য যখন ফাংশন কেবল একটি পূর্ণসংখ্যা মান প্রদান করে যা কোনও বিশেষ আগ্রহের নয়। আমার বোঝার সমস্যাটি পদক্ষেপ 3, 4 (কিছুটা) এবং 5 তে রয়েছে।
কোন সাহায্যের জন্য আপনাকে ধন্যবাদ।
(unsigned char)
হ'ল চরিত্রগুলি স্বাক্ষরিত এবং নেতিবাচক হওয়ার সম্ভাবনাটির যত্ন নেওয়া।
_ctype_
মূলত বিটমাস্কের একটি অ্যারে। এটি আগ্রহের চরিত্র দ্বারা সূচিত করা হচ্ছে। সুতরাং_ctype_['A']
"আলফা" এবং "বড় হাতের অক্ষরে"_ctype_['a']
অনুরূপ বিট থাকতে পারে , "আলফা" এবং "ছোট হাতের"_ctype_['1']
সাথে সামঞ্জস্যপূর্ণ বিট থাকতে পারে , "অঙ্ক" এর সাথে সামঞ্জস্যপূর্ণ কিছু ছিল, ইত্যাদি দেখে মনে0x20
হয় কিছুটা "নিয়ন্ত্রণ" এর সাথে সম্পর্কিত । তবে কোনও কারণে_ctype_
অ্যারেটি অফসেট হয় 1, তাই বিটগুলি'a'
সত্যই ভিতরে রয়েছে_ctype_['a'+1]
। (এটি সম্ভবতEOF
অতিরিক্ত পরীক্ষা ছাড়াই এটির জন্য কাজ করা হতে পারে))