cstyle(1)

名称

cstyle — 检查 C 源文件中存在的常见风格错误

概述

cstyle [-chpvCP] [文件]

说明

cstyle 将检查 C 源文件(*.c*.h)中的常见风格错误。它按文档所述的 C 风格规范进行检查:cstyle 文档arrow-up-right。请注意,该文档中有许多内容都 无法 自动检查;若仅仅因为你的代码通过了 cstyle 检查,那不意味着你遵循了 Sun 的 C 风格。代码风格责任自负

选项

-c

检查函数内部续行的缩进。Sun 的 C 风格规定,所有语句必须缩进到合适的制表位,且其后的续行必须从起始行 精确 缩进四个空格。此选项将启用一系列检查,仅用于发现函数内部的续行问题。检查存在一些限制,详见下文续行检查。

-p

执行一些更严格的检查。包括 ANSI 的 #else#endif 规则,并尝试检测类型转换后的空格。作为回写检查(putback checks)的一部分使用。

-v

详细输出;包括出错行的文本。对于 -c 选项,还会显示当前续行块中的第一条语句。

-P

检查是否使用了非 POSIX 类型。过去如 u_intu_long 类型曾被使用,但现在已被 POSIX 类型 uint_tulong_t 等取代。本选项用于检测那些弃用类型的使用,作为回写检查(putback check)的一部分。

-g

同时输出 GitHub Action 风格的 ::error 信息。

环境

CI

如果进行了设置且设置本身非空,相当于使用 -g 选项。

续行检查

续行检查器是一个相对简单的状态机,它能了解 C 语言的布局规则,并能跨多行匹配括号等结构。但它存在一些限制:

  1. 会导致括号不匹配的预处理宏(preprocessor macros)会干扰该行的检查。要修复此问题,需要确保每个 #if 分支的括号都是对称的。

  2. 某些 cpp(1) 宏在其后不需要 ;。此类宏 必须 全部为大写字母(ALL_CAPS);如果包含小写字母,会导致输出错误。

通常会在下次出现 ;{} 时,自动修正错误的输出。

有些续行错误信息需要额外说明:

多条语句跨多行

如果一条多行的语句没有在语句边界处断开,将触发此错误。例如:

会触发错误。

正确写法应为:

if/for/while 空语句未独占一行

为了可读性,if、for 和 while 语句的空语句应独占一行。例如:

会触发错误。

正确写法应为:

2022 年 4 月 4 日 Debian

最后更新于