এই কোডটি সংকলন করে কেন?
_Static uint32_t my_arr[2];
_Static_assert(sizeof(my_arr) == 8, "");
_Static_assert(sizeof(my_arr[0]) == 4, "");
_Static_assert(sizeof(my_arr)[0] == 4, "");
প্রথম 2 টি দৃts়ভাবে স্পষ্টতই সঠিক, তবে আমি শেষ পংক্তিটি ব্যর্থ হওয়ার প্রত্যাশা করতাম, কারণ আমার বোঝাপড়াটি হ'ল sizeof()
একটি পূর্ণসংখ্যা শাব্দিককে মূল্যায়ন করা উচিত, যা অ্যারে হিসাবে বিবেচনা করা যায় না। অন্য কথায়, এটি একইভাবে ব্যর্থ হবে যেভাবে নিম্নলিখিত লাইনটি ব্যর্থ হয়:
_Static_assert(4[0] == 4, "");
মজার বিষয় হচ্ছে, নিম্নলিখিতগুলি সংকলন করতে ব্যর্থ হয়েছে (যা একই জিনিসটি করা উচিত, না?):
_Static_assert(*sizeof(my_arr) == 4, "");
ত্রুটি: আনরি'র অবৈধ প্রকারের আর্গুমেন্ট '*' ('দীর্ঘ স্বাক্ষরিত ইন্ট' রয়েছে )__ট্যাটিক_সেসার্ট (* আকারের (আমার_আর) == 4, "");
যদি এটি গুরুত্বপূর্ণ হয় তবে আমি জিসিসি 5.3.0 ব্যবহার করছি
( sizeof( my_arr ) )[ 0 ]
ব্যর্থ।