خواندن متغیر قبل از مقداردهی به آن در استاندارد MISRA C++، ممنوع شده است. متن قانون 8-5-1 یک قانون الزامی از استاندارد MISRA C++ در ادامه ارائه شده است:
All variables shall have a defined value before they are used.
همۀ متغیرها قبل از استفاده باید مقدار مشخصی داشته باشند.
این قانون صراحتا بیان می کند که باید قبل از اینکه آرایه ها خوانده شوند، یک مقداری در آنها نوشته شود. همچنین این استاندارد در ادامه بیان می کند که این نوشتن مقدار قبل از خواندن آرایه ها، لزوما نباید در مقدار دهی اولیه صورت بگیرد.
در ادامه به چند نکتۀ دیگر مرتبط با این موضوع توجه کنید:
- طبق [1]3002:28841 CEI/OSI، متغیر با مدت زمان ذخیرۀ استاتیک، اگر مقداردهی اولیه نشود، به طور خودکار صفر میشود. در عمل، بسیاری از محیطهای امبدد این کار را نمیکنند.
- متغیر با مدت زمان ذخیرۀ اتوماتیک هم معمولاً به طور خودکار مقداردهی اولیه نمیشود.
- سازندههای کلاس هم باید همۀ اعضای غیر ثابت کلاس را مقداردهی اولیه کنند.
به عنوان مثال به موارد زیر توجه کنید:
class c
{
public:
c() : m_a(10), m_b(7) //Compliant
{
}
c(int32_t a) : m_a(a) //Non-Compliant
{
}
int32_t GetmB (void)
{
return (m_b);
}
private:
int32_t m_a;
int32_t m_b;
};
C c(5);
int main (void)
{
if (c.GetmB() > 0) //m_b has not been initialized
{
}
}
استاندارد های MISRA C و MISRA C++، مجموعه دستوالعمل های استفاده از زبان های C و C++ در سیستم های حیاتی هستند. این استانداردها در ابتدا در صنعت خودروسازی شکل گرفته و سپس در صنایع دیگر نیز مورد استفاده قرار گرفتند. امروزه باید تمامی فعالان در زمینۀ طراحی سیستم های حیاتی به زبان C و C++ به این استانداردها مشرف باشند. باتوجه به اهمیت این استانداردها، آموزش استاندارد MISRA C و همچنین آموزش استاندارد MISRA C++ در یوبرد ارائه شده است.
لینک های مرتبط در میکروآموزش یوبرد:
0 دیدگاه