主要内容

MISRA C++:2023 Rule 5.10.1

R2026b

User-defined identifiers shall have an appropriate form

自 R2024b 起

描述

User-defined identifiers shall have an appropriate form. 1

理由

此规则对用户定义标识符的命名进行了限制。

这些限制通过以下方式减少可能的歧义并提高代码的可移植性:

  • 仅支持在标识符名称中使用 Unicode 建议的字符。

  • 防止与保留名称冲突。

  • 能够清晰区分标识符与宏。

  • 强制执行某些普遍认可的编码风格。

Polyspace 实现

按照 MISRA™:C++:2023 规范,如果标识符使用了下文定义的禁用名称,规则检查项会报告违规。

标识符类型禁用名称

除宏以外的所有类型。

  • 以 [a-z]、[A-Z]、_ 或字符类 XID_Start 之外的通用字符开头的名称。

  • 包含 [a-z]、[A-Z]、_ 或字符类 XID_Continue 之外的通用字符的名称。

  • 不符合规一化形式 C (NFC) 的名称。

  • 包含双下划线的名称。

  • 在大多数典型上下文中属于保留关键字的名称,例如 size_t、ptrdiff_t、va_list 等。

  • 以 _ 开头的名称(用户定义的字面值后缀除外 - 请参阅后文)。

宏

包含 [A-Z] 或 _ 之外的字符的名称。

命名空间

名称 std、posix 或 stdN,其中 N 是一个数字。

用户定义的字面值后缀

不以 _ 开头,或在起始 _ 之前包含空格的名称。

故障排除

如果您预期会出现违规,而 Polyspace® 未报告该违规,请参阅诊断为何编码规范违规未按预期显示。

示例

全部展开

void operator ""_m( long double ); //Compliant 
void operator ""__km( long double ); //Noncompliant - Starts with a double underscore
void operator ""cm( long double ); //Noncompliant - Does not start with an underscore
void operator "" _mm( long double ); //Noncompliant - Contains a space before underscore

在此示例中,用户定义的字面值后缀 _m 以下划线开头且前面没有空格,因此未违反规则。其他后缀未遵循此约定,因此违反了规则。

检查信息

组:词法规范
类别:必需
PQL 名称:std.misra_cpp_2023.R5_10_1

版本历史记录

在 R2024b 中推出


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.