148得票13回答
如果使用else语句终止if...else if结构,有什么好处?

我们的组织有一个必须遵守的编码规则(没有任何解释):在if…else if结构中应该以else子句结束。 示例1:if ( x < 0 ) { x = 0; } /* else not needed */ 例子2:if ( x < 0 ) { x = 0; } el...

38得票8回答
为什么MISRA C规定指针的复制可能会导致内存异常?

MISRA C 2012指令4.12是"不应使用动态内存分配"。作为示例,该文档提供了以下代码示例:char *p = (char *) malloc(10); char *q; free(p); q = p; /* Undefined behaviour - value of p is i...

25得票3回答
C89中的{0}初始化器有多标准化?

在我的当前项目中,我们使用MISRA 2004标准,使用三个GCC编译器版本3.2.3、4.4.2和5.4.0。我们使用严格检查构建,包括pedantic开关、c89标准和许多其他限制。其中之一是所有数据必须在声明时初始化。问题在于,在GCC 3.2.3上,通用的零初始化器{0}只适用于基本单...

23得票4回答
“死代码”和“无法访问的代码”有什么区别?

我曾以为这些术语是同义词,但MISRA中关于死代码的注释表示这种想法是错误的。它们有何区别?其中一个是否是另一个的子集?

21得票2回答
在 C 语言中,什么时候应该使用 UINT32_C()、INT32_C() 等宏?

我在我的项目中切换到了固定长度的整型,主要是因为它们在使用时可以更清晰地思考整数大小。通过 #include <inttypes.h> 引入它们还会包括一堆其他宏,比如打印宏 PRIu32、PRIu64 等。 要将常量值分配给固定长度变量,可以使用像 UINT32_C() 和 I...

17得票2回答
免费工具检查符合MISRA C标准的方法?

是否有任何开源或免费的工具可用来检查MISRA C合规性?

16得票4回答
为什么在MISRA C:2004中,“continue”被视为C违规?

为什么MISRA 14.5规定不能使用continue语句?

13得票6回答
Misra嵌入式软件标准

我有一个需求需要大量的代码符合MISRA标准。 第一个问题:有经验的人能给出一个通过嵌入式系统中的良好编写的代码的估计时间吗?我知道“良好编写”的定义模糊不清,因此我请求提供原始估计。 第二个问题:有没有推荐的工具可以进行自定义(即允许抑制特定警告)并且可以在自动构建环境中使用(即命令行界面)...

13得票3回答
C语言中的MISRA增量操作规范

在调试一些嵌入式代码时,我遇到了类似这样的情况:buffPtr = &a[5]; buffEndPtr = &a[10]; while (buffPtr != buffEndPtr) { *buffPtr = 0xFF; buffPtr = &...

12得票5回答
计算函数返回值的最佳实践

我经常在 C 语言中编写一些函数,用于检查某些参数并返回错误代码。 当我发现一个错误时,最好的做法是什么? 第一个示例:ErrorCode_e myCheckFunction( some params ) { ErrorCode_e error = CHECK_FAILED; i...