【MISRA C 2012】Rule 2.7 函数中不应有未使用的形参

  • 1. 规则
    • 1.1 原文
    • 1.2 分类
  • 2. 关键描述
  • 3. 代码实例

1. 规则

1.1 原文

Rule 2.7 There should be no unused parameters in functions
Category Advisory
Analysis Decidable, Single Translation Unit
Applies to C90, C99

1.2 分类

规则2.7:函数中不应有未使用的形参
Advisory建议类规范。

2. 关键描述

大多数函数将被指定为使用它们的每个参数。如果函数参数未使用,函数的实现可能与规范不匹配。这条规则突出了这种潜在的不匹配

3. 代码实例

例1,规范中例程:
其中,unusedpara函数入参是没有使用到,是不允许的。

void withunusedpara (uint1 6_t *para1, int16_t unusedpara ) /* Non-compliant - unused */
{
	*para1 = 42U;
}

例2,判断以下代码

/*******************************************************************************
** Syntax : W25qxx_Spi(uint8_t Data, uint8_t *rData)                     **
**                                                                            **
** Service ID:   : NA                                                         **
**                                                                            **
** Sync/Async:   : Synchronous                                                **
**                                                                            **
** Reentrancy:   : Reentrant                                                  **
**                                                                            **
** Parameters (in): Data                                                      **
**                                                                            **
** Parameters (out): rData                                                    **
**                                                                            **
** Return value: uint8_t                                                      **
**                                                                            **
** Description : read/write data with SPI peri W25Q32 module                  **
*******************************************************************************/
uint8_t W25qxx_Spi(uint8_t Data, uint8_t *rData)
{
	uint32 LoopCount = 0;
	
	writebuf[0] = Data;
	Spi_WriteIB(W25QXX_CHANNEL_16BIT_IB_2, (uint8 *) &writebuf[0]);
    (void)Spi_SyncTransmit(W25QXX_SEQUENCE);
    while((Spi_GetSequenceResult(W25QXX_SEQUENCE) != SPI_SEQ_OK) && (LoopCount < W25QXX_SPI_TIMEOUT)) {
        if(Spi_GetSequenceResult(W25QXX_SEQUENCE) == SPI_SEQ_FAILED) {
            break;
        } else {
            /*Nothing*/
        }
        LoopCount++;
    }

	Spi_ReadIB(W25QXX_CHANNEL_16BIT_IB_2, (uint8 *)&readbuf[0u]);
	
    if(Spi_GetSequenceResult(W25QXX_SEQUENCE) == SPI_SEQ_OK) {
        return readbuf[0];
    } else {
    	Spi_Cancel(W25QXX_SEQUENCE);
        return 0;
    }
}

其中rdata是出参,应该读取spi读出的数据,但是这里没有使用到,实际以return值为读取数据,入参指针并未使用到,因此不符合Rule 2.7规范。

你可能感兴趣的:(MISRA,C,2012,规则系列归纳分析,c语言,开发语言,自动驾驶,mcu)