यह कोड क्यों संकलित करता है?
_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 दावे स्पष्ट रूप से सही हैं, लेकिन मैंने अंतिम पंक्ति के विफल होने की उम्मीद की होगी, क्योंकि मेरी समझ यह है कि sizeof()
एक पूर्णांक शाब्दिक का मूल्यांकन करना चाहिए, जिसे एक सरणी के रूप में नहीं माना जा सकता है। दूसरे शब्दों में, यह उसी तरह से विफल होगा जैसे कि निम्न पंक्ति विफल होती है:
_Static_assert(4[0] == 4, "");
दिलचस्प है, निम्नलिखित वास्तव में संकलन करने में विफल रहता है (जो एक ही काम करना चाहिए, नहीं?)
_Static_assert(*sizeof(my_arr) == 4, "");
त्रुटि: अमान्य प्रकार का तर्क '' '' ('लंबे समय से अटूट int') _Static_assert (* sizeof (my_arr) == 4, "");
अगर यह मायने रखता है, मैं 5.3.0 gcc का उपयोग कर रहा हूँ
( sizeof( my_arr ) )[ 0 ]
विफल रहता है।