[英]Why MISRA-C disallow implicitly widening a type in some circumstances?
MISRA-C:2004規則10.1不允許隱式擴展函數參數或返回表達式的類型,如以下代碼片段所示:
void foo1(int16_t x);
int16_t foo2(void)
{
int8_t s8a;
...
foo1(s8a); /* not compliant */
...
return s8a; /* not compliant */
}
但是,根據我的理解,它們與分配情況沒有什么不同:
s16a = s8a; /* compliant */
重點是什么? 謝謝。
MISRA-C:2004規則10.1(引用的指南)規定:
如果出現以下情況,則不應將整數類型表達式的值隱式轉換為不同的基礎類型:
- 它不是轉換為相同簽名的更寬整數類型,或者
- ...
在引用的示例中,轉換為更寬的整數類型(int8_t到int16_t),因此規則10.1不適用。
擴展(10.1和10.2)解釋了規則的目的是防止從更廣泛到更窄類型的隱式轉換。 另一方面沒有限制!
你的工具壞了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.