主要内容

MISRA C:2012 Rule 1.4

R2026b

Emergent language features shall not be used

描述

Emergent language features shall not be used 1 .

理由

C11 标准中的一些新语言功能具有未定义行为、未指定行为或实现定义的行为。这些功能也可能表现出有明确定义但违背开发人员预期的行为。尽管规则 1.3 和指令 1.1 已禁止未定义行为和实现定义的行为,但为了避免出现有明确定义但违背预期的行为,规则 1.4 一概不建议使用某些语言功能。

Polyspace 实现

本规则禁止使用 C11 标准附录 K 中关于“边界检查接口”的所有功能,但将 __STDC_WANT_LIB_EXT1__ 定义为“0”除外。

故障排除

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

示例

全部展开

#define __STDC_WANT_LIB_EXT1__ 1 //Noncompliant
#include <string.h>

void Copying_functions(void) {
    char buf1[10];
    char buf2[10];
    errno_t e;  //Noncompliant
    e = memcpy_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
    e = memmove_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
    e = strcpy_s(buf1,sizeof(buf1),buf2); //Noncompliant
    e = strncpy_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
}

在此示例中,宏 __STDC_WANT_LIB_EXT1__ 设置为 1,以便能够使用头文件 stdlib.h 中定义的 errno_t 类型(依照 C11 标准附录 K)。

检查项会标记将该宏设置为 1 和定义 errno_t 变量的行为,以及附录 K 中的其他函数。

检查信息

组:标准 C 环境
类别:必需
AGC 类别:必需
PQL 名称:std.misra_c_2012.R1_4

版本历史记录

在 R2014b 中推出

全部展开


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:2025

  • MISRA C++:2008

  • MISRA C++:2023

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