主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

MISRA C++:2008 Rule 2-7-2

Sections of code shall not be "commented out" using C-style comments

描述

规则定义

Sections of code shall not be "commented out" using C-style comments. 1

理由

/* */ 括号中的 C 风格注释不支持嵌套。以 /* 开头的注释在第一个 */ 处结束,即使 */ 是作为后续嵌套注释的结束符也是如此。如果注释掉的代码段已经包含注释,则可能会遇到编译错误(或者至少注释掉的代码少于预期)。

注释代码并不是一种好的做法。注释掉的代码可以与周围的代码保持不同步,而不会引起编译错误。稍后,如果您取消注释该代码,可能会遇到意外问题。

注释仅用于解释代码本身无法说明的方面。

Polyspace 实现

检查项使用内部启发式方法来检测注释掉的代码。例如,字符 #;{} 表示可能包含代码的注释。然后,这些注释将与其他度量进行评估,以确定代码伪装为注释的可能性。例如,多个连续的单词之间没有符号会降低这种可能性。

即使以下注释包含代码,检查项也不会对其进行标记:

  • /**/*! 开头的 Doxygen 注释。

  • 重复多次相同符号的注释,例如此处的符号 =

    /* =====================================
     * A comment
     * =====================================*/

  • 对文件第一行的注释。

  • 混合了 C 风格 (/* */) 和 C++ 风格 (//) 的注释。

检查项认为这些注释是用于文档目的或经过深思熟虑后故意输入的。

故障排除

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

示例

全部展开

#include <iostream>
/* class randInt {//Noncompliant
    public: 
      int getRandInt();
};
*/

int getRandInt();

/* Function to print random integers*/ 
void printInteger() {
    /* int val = getRandInt();//Noncompliant 
     * val++; 
     * std::cout << val;*/     
    std::cout << getRandInt();
}

此示例包含两个注释代码模块,构成两个违规。

检查信息

组:词法规范
类别:必需

版本历史记录

在 R2020b 中推出


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.