যদিও এএনএসআই সি স্ট্যান্ডার্ড বিটফিল্ডগুলি কীভাবে কোনও "বিটফিল্ড প্যাক করার অনুমতি দেয় তবে তারা উপযুক্ত দেখায়" বিটফিল্ডগুলি কীভাবে প্যাক করা যায় তা সম্পর্কে খুব কম সুনির্দিষ্টভাবে উল্লেখ করে, তবে এটি বেশিরভাগ ক্ষেত্রেই সবচেয়ে দক্ষ ফ্যাশনে জিনিসগুলি প্যাকিং থেকে কম্পাইলারদের নিষেধ করে।
বিশেষত, যদি কোনও কাঠামোতে বিটফিল্ড থাকে, তবে একটি সংকলকটিকে এটি কাঠামো হিসাবে সংরক্ষণ করতে হবে যাতে কিছু "সাধারণ" স্টোরেজ টাইপের এক বা একাধিক বেনাম ক্ষেত্র থাকে এবং তারপরে যৌক্তিকভাবে প্রতিটি ক্ষেত্রকে তার উপাদান বিটফিল্ড অংশে বিভক্ত করে। সুতরাং, দেওয়া:
unsigned char foo1: 3;
unsigned char foo2: 3;
unsigned char foo3: 3;
unsigned char foo4: 3;
unsigned char foo5: 3;
unsigned char foo6: 3;
unsigned char foo7: 3;
যদি unsigned char
8 বিট হয়, সংকলকটির জন্য এই ধরণের চারটি ক্ষেত্র বরাদ্দ করা প্রয়োজন, এবং একটি ব্যতীত সকলকে দুটি বিটফিল্ড বরাদ্দ করতে হবে (যা char
তার নিজস্ব ক্ষেত্রে হবে )। যদি সমস্ত char
ঘোষণাপত্রের সাথে প্রতিস্থাপন করা হয় short
, তবে দুটি ধরণের ক্ষেত্র short
থাকবে, যার একটিতে পাঁচটি বিটফিল্ড থাকবে এবং অন্যটি বাকি দুটি ধারণ করবে।
প্রান্তিককরণ বিধিনিষেধ ছাড়াই একটি প্রসেসরে, unsigned short
প্রথম পাঁচটি ক্ষেত্র এবং unsigned char
শেষ দুটি জন্য তিনটি বাইটে সাত তিন বিট ক্ষেত্র সংরক্ষণ করে ডেটা আরও দক্ষতার সাথে নির্ধারণ করা যেতে পারে । তিনটি বাইটে আটটি তিন-বিট ক্ষেত্র সংরক্ষণ করা সম্ভব হওয়া সত্ত্বেও, একটি সংকলক কেবল তখনই অনুমতি দিতে পারত যদি সেখানে তিন-বাইট সংখ্যার টাইপ থাকে যা "বাইরের ক্ষেত্র" প্রকার হিসাবে ব্যবহার করা যেতে পারে।
ব্যক্তিগতভাবে, আমি বিটফিল্ডগুলিকে মূলত অকেজো হিসাবে সংজ্ঞায়িত হিসাবে বিবেচনা করি। যদি কোডটিকে বাইনারি-প্যাকড ডেটা নিয়ে কাজ করা দরকার হয় তবে এটি প্রকৃত ধরণের স্টোরেজ অবস্থানগুলি স্পষ্টভাবে সংজ্ঞায়িত করা উচিত এবং তার বিটগুলি অ্যাক্সেস করার জন্য ম্যাক্রো বা এই জাতীয় কিছু ব্যবহার করা উচিত। সি যদি একটি সিনট্যাক্সকে সমর্থন করে তবে এটি সহায়ক হবে:
unsigned short f1;
unsigned char f2;
union foo1 = f1:0.3;
union foo2 = f1:3.3;
union foo3 = f1:6.3;
union foo4 = f1:9.3;
union foo5 = f1:12.3;
union foo6 = f2:0.3;
union foo7 = f2:3.3;
এই জাতীয় বাক্য গঠন, যদি অনুমতি দেওয়া হয় তবে কোডের জন্য পোর্টেবল ফ্যাশনে বিটফিল্ড ব্যবহার করা সম্ভব হবে, শব্দের মাপ বা বাইট অর্ডারগুলি বিবেচনা না করে (foo0 এফ 1 এর তিনটি সর্বনিম্ন-তাত্পর্যপূর্ণ বিটগুলিতে থাকবে তবে সেগুলি এখানে সংরক্ষণ করা যেতে পারে নিম্ন বা উচ্চতর ঠিকানা)। এই জাতীয় বৈশিষ্ট্য অনুপস্থিত, তবে ম্যাক্রো সম্ভবত এই জাতীয় জিনিসগুলি পরিচালনা করার একমাত্র পোর্টেবল উপায়।