عملگرهای رابطهای برای اشارهگرها در استاندارد MISRA C++، ممنون شده است. این یک قانون الزامی به شمارۀ 5-0-18 در استاندارد MISRA C++ است. متن این الزام در این استاندارد بصورت زیر است:
>, >=, <, <= shall not be applied to objects of pointer type, except where they point to the same array.
ترجمه: عملگرهای <، =<، > و => نباید برای اشارهگرها اعمال شوند، مگر در مواردی که اشارهگرها به یک آرایۀ یکسان اشاره میکنند.
اگر دو اشارهگر به شیء یکسانی اشاره نکنند، مقایسه بین آنها، رفتار نامشخص ایجاد میکند. کدنویسان سیستم های حیاتی باید تمام رفتارهایی که باعث ایجاد رفتارهای نامشخص می شود را بشناسند. چرا که این رفتارهای نامشخص برخی اوقات حتی در تولید انبوه مشخص می شود. به عنوان مثال به کدهای زیر توجه کنید:
void f1 ()
{
int32_t a1[10];
int32_t a2[10];
int32_t *p1 = a1;
if (p1 < a1) // compliant
{
}
if (p1 < a2) // Non-compliant
{
}
}
از کدهای فوق متوجه می شویم که عملگرهای فوق را برای اشاره گر فقط زمانی می توانیم بکار ببریم که طرف دیگر عملگر، عملوندی باشد که اشاره گر به آن اشاره کرده است. در مثال فوق شرط if اول مشکلی ندارد اما شرط if دوم مطابق این قانون پذیرفتنی نیست.
استانداردهای MISRA برای کدنویسی سیستم های حیاتی توسعه داده شده اند. این استانداردها یک سری قوانین را ارائه می کنند که برخی از آنها باعث ممنوعیت و یا محدودیت استفاده از یک سری از ابزارهای زبان برنامه نویسی در استفاده در سیستم های حیاتی می شود. مثل این قانون که باعث محدودیتی در استفاده از عملگرها برای اشاره گرها بود. الزامات بسیاری در MISRA برای زبان های C و C++ وجود دارد که در فیلم آموزش استاندارد MISRA C تشریح شده است.
درمورد مقایسۀ بین انواع float نیز چنین محدودیتی وجود دارد که در میکروآموزش مقایسۀ برابری انواع float در استاندارد MISRA C
0 دیدگاه