这是 pmccabe 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
pmccabe - 计算 C 和的 McCabe 圈复杂度或未注释的行数
C++程序
概要
下午茶 [-bCdfFntTvV?] [文件]
商品描述
下午茶 处理命名文件,如果没有命名,则处理标准输入。 默认模式下
它计算每个函数的统计数据,包括 McCabe 圈复杂度。 这
文件应该是 C(ANSI 或 K&R)或 C++。
-? 打印信息性使用消息。
-v 打印列标题
-V 打印 下午茶 版本号
取消评论 模式
-d 旨在通过以下方式帮助计算未注释的源代码行:
pmccabe -d *.c | grep -v '^[ ]*$' | wc -l
评论被删除, CPP 指令被替换为 CPP, 字符串文字是
取而代之 字符串字面量, 字符常量被替换为 慈善。 该
生成的源代码更容易解析。 这是执行的第一步
下午茶 以便其解析器可以更简单。
没有其他选项可以明智地使用 -d.
行计数 模式
-n 计算未注释的源代码行。 输出格式与
阿纳克 程序,但如果需要,必须请求列标题和总计。
如果你想要列标题添加 -v. 如果你想要总计添加 -t. 如果你想要的只是
总计加 -T.
复杂 模式 (默认)
-C 自定义输出格式 - 不要使用它。
-c 报告每个函数(和文件)的非注释、非空行而不是原始行
行数。 备注 这 预处理器 指令 旨在 不是 计数。
-b 与编译器错误浏览工具兼容的输出格式
“经典”编译器错误。 可以使用以下方法对这种格式进行数字排序:
排序 -n +1 -t%
-t 打印列总计。 请注意,总行数是 *NOT* 非行数
注释源代码行 - 它与“wc -l”报告的相同。
-T 打印列总数*仅*。
-f 包括每个文件的总数以及每个功能的总数。
-F 打印每个文件的总数,而不是每个功能的总数。
解析
下午茶 忽略所有 CPP 预处理器指令 - 计算复杂度
代码的外观而不是预处理器破坏代码后的复杂性。
这一点尤其重要,因为简单的事情比如 获取字符(3) 扩展成宏
增加复杂性。
输出 格式
为以下形式的每个函数将一行写入标准输出:
修正的 McCabe 圈复杂度
| 传统的 McCabe 圈复杂度
| | # 函数中的语句
| | | 第一行函数
| | | | # 函数中的行
| | | | | 文件名(定义行号):函数
| | | | | |
5 6 11 34 27 获取令牌(35): 火柴人
第 1 列包含通过将 1(对于函数)加到
的发生 , if, 而, 开关, &&, ||及 ?. 不同于“正常”的 McCabe 圈
复杂性,switch 语句中的每个 case 都不算作额外的复杂性。 这个
处理 switch 语句和复杂性可能比“正常”措施更有用
用于判断维护工作量和代码难度。
第 2 列是关于 switch 以“通常”方式计算的圈复杂度
声明。 具体来说,它是按照第 1 列计算的,但计算每个 案件 宁
比 开关 并且在判断测试工作方面可能比第 1 列更有用。
第 3 列包含语句计数。 它是通过添加每次出现的 ,
if, 而, 开关, ?, 和函数内的分号。 一个可能的惊喜是
语句的最少语句数为 3。这是现实的,因为 为一个; B;
C){...} 真的是简写 A; 而 (B) { ... C;}. 内的语句数
文件是在该文件中实现的每个函数的语句数的总和
文件,每个函数加一个(因为函数也是语句),加上
一个彼此对应的文件范围的语句(通常是声明)。
第 4 列包含函数中的第一个行号。 这不一定相同
函数名出现的行。
第 5 列是函数的行数,从第 4 列中的数字到
包含右花括号的行。
最后一列包含文件名、出现函数名的行号、
和函数的名称。
应用
明显的应用 下午茶 由以下说明,其中给出了一个列表
“十大”最复杂的函数:
pmccabe *.c | 排序-nr | 头-10
许多文件包含多个 C 函数,有时提取
每个功能分开。 匹配项() (参见上面的示例输出)可以从
gettoken.c 通过从第 27 行开始提取 34 行。这可以形成工具的基础
对函数而不是文件进行操作(例如,用作前端 差异(1)).
诊断
下午茶 如果无法打开文件并且遇到文件,则返回非零退出状态
一些解析错误。
标准错误的错误消息,通常解释解析器对
一些东西,模仿经典的 C 编译器错误消息。
警告
下午茶 被不匹配的花括号或括号混淆,这些花括号或括号有时会出现在
仓促使用 CPP 指令。 在这些情况下,会打印诊断信息,并且复杂性
命名文件的结果可能不可靠。 大多数情况下,“#ifdef”指令可能是
修改为大括号匹配。 请注意,如果 下午茶 被一个迷惑了 CPP
指令,大多数漂亮的打印机也是如此。 在某些情况下,预处理 Unifdef(1)
可能是适当的。
可以通过以下方式改进语句计数: 计算逗号的出现次数
运算符、多重赋值、条件测试中的赋值和逻辑
连词。 但是,由于语言中没有清晰的语句定义或
从我询问过的人那里,语句计数可能不会得到改善。 如果你有一个
清晰的定义我很乐意考虑。
模板原因 下午茶的扫描仪退出。
很遗憾 标签 不提供输出。
使用 onworks.net 服务在线使用 pmccabe