簡體   English   中英

為什么MISRA-C在某些情況下不允許隱式擴大類型?

[英]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(引用的指南)規定:

如果出現以下情況,則不應將整數類型表達式的值隱式轉換為不同的基礎類型:

  1. 它不是轉換為相同簽名的更寬整數類型,或者
  2. ...

在引用的示例中,轉換更寬的整數類型(int8_t到int16_t),因此規則10.1不適用。

擴展(10.1和10.2)解釋了規則的目的是防止從更廣泛到更窄類型的隱式轉換。 另一方面沒有限制!

你的工具壞了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM