主要内容

MISRA C:2023 Rule 21.11

The standard header file <tgmath.h> should not be used

自 R2024a 起

描述

规则定义

The standard header file <tgmath.h> should not be used 1 .

理由

使用此头文件的功能可能会导致未定义行为。

Polyspace 实现

如果函数是一个宏,并且该宏在代码中被展开,则会违反此规则。假设的前提条件是没有违反规则 21.2。

故障排除

如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开


        #include <tgmath.h>//Noncompliant

float f1,res;


void func(void) {
    res = sqrt(f1); /* Non-compliant */
}

在此示例中,当使用 tgmath.h 中定义的 sqrt 宏时,会违反此规则。

更正 - 在 math.h 中使用合适的函数

对于此示例,一种可能的更正方法是对 float 参量使用在 math.h 中定义的函数 sqrtf

#include <math.h>

float f1, res;


void func(void) {
 res = sqrtf(f1);
}

检查信息

组:标准库
类别:建议
AGC 类别:建议

版本历史记录

在 R2024a 中推出


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace® Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.