آرایه با کلاس حافظۀ خارجی (در زمانی که آرایه با extern اعلان شود.)، در استاندارد MISRA C الزاماتی دارد. متن الزام استاندارد MISRA C در این مورد بصورت زیر است:
When an array is declared with external linkage, its size shall be stated explicitly or defined implicitly by initialisation.
این یک قانون الزامی به شمارۀ 8.12 از استاندارد MISRA C بود که ترجمۀ آن بصورت زیر است:
در زمانی که یک آرایه با کلاس حافظۀ extern اعلان میشود، تعداد اعضای آن باید به صورت صریح (قرار دادن عدد در براکت) یا به صورت ضمنی (مقداردهی اولیۀ اعضای آن) مشخص شود.
اگرچه میتوان آرایهها را با کلاس ذخیره سازی extern، بدون مشخص کردن اندازۀ آنها اعلان کرد، اما در زمانی که امکان تعیین اندازۀ آرایهها وجود دارد، انجام این کار ایمنتر است. موارد زیر به عنوان مثال ارائه شده اند. که مورد اول و سوم پذیرفتنی ولی مورد دوم مطابق این قانون، پذیرفتنی نیست:
int array1[ 10 ]; /* Compliant */
extern int array2[ ]; /* Not compliant */
int array2[ ] = { 0, 10, 15 }; /* Compliant */
بسیاری از ما به این موضوع توجه نمی کنیم. حتی کدهای نوشته شده در بسیاری از شرکتها را هم مشاهده کنید، می بینید که چنین مواردی رعایت نشده است. عدم رعایت یک مجموعۀ قانون که همگی مهم هستند و عدم رعایت آنها باعث ایجاد رفتارهای تعریف نشده می شود، باعث ایجاد محصولی ناایمن و غیر قابل اعتماد می شود. دانش نسبت به استاندارد MISRA C برای تمام توسعه دهندگان به زبان برنامه نویسی C بخصوص برای سیستم های حیاتی ضروری است. باتوجه به اهمیت این استاندارد، ما در آموزش MISRA C یوبرد، تمامی الزامات را تشریح کنیم و این آموزش اکنون از مهمترین آموزشهای یوبرد است.
لینک های مرتبط:
عملگرهای رابطهای برای اشارهگرها در استاندارد MISRA C++
0 دیدگاه