MISRA C规范学习笔记9

Grey

MISRA C规范学习笔记9

规则摘录与分析

1013_MISRA C规范学习笔记9_misra c

  • 需要检查一下,编译器以及链接器是否支持31个字符的变量的识别。

验证想法

  • 为了先看看一个编译器究竟可以支持多少长度,我做了一个简单的测试,找的是试用版本的CW来做测试。自然,31位的长度必须是要考虑到的。这个验证应该有很多方面,我只是单纯从编译结果看一下是否与代码一致。

#include "MPC5644A.h"


/* length is 31 here */

volatile int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;

/* 64 */

volatile int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;

/* 124  */

volatile int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;

volatile int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;

volatile int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAA;


int main(void)

{

    volatile int i = 0;


    ​/* Loop forever */

    ​for​ (;;)

    {

        i++;

        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++;

        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++;

        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++;

        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++;

    }

}

  • 编译出来的map文件如下:
     

1013_MISRA C规范学习笔记9_i++_02

检验了一下,这个长度还是一致的。这个也让我对CW刮目相看,居然能够支持这么长的变量。

小结

我没有进行更深入的测试,关于测试方法我觉得应该也会有一个通用的方式。不过,既然相应的变量都在map中找到了不同的地址,说明编译以及链接的处理还是准确的。