unifdef - 解析和删除 C 程序源中经过 ifdef 的行
unifdef [-clt] [-Dname] [-Uname] [-iDname] [-iUname] ... [filename]
unifdef 会在不影响文件的情况下删除文件中经过 ifdef 的行。它足够智能,可以处理嵌套的 ifdef、注释以及 C 语法的单引号和双引号,但不会包括或解释宏。它也不会删除注释,但可以识别并忽略这些注释。您可使用 –D 选项指定希望定义的符号,使用 –U 选项指定不希望定义的符号。那些 ifdef 中的行将复制到输出或根据需要删除。与 filename 相关联的任何 ifdef、ifndef、else 和 endif 行也将删除。
不会改动包括未指定符号的 ifdef,它将与其相关联的 ifdef、else 和 endif 行一起复制。
如果一个发生的 ifdefX 嵌套于另一个 ifdefX 之内,那么会将内部的 ifdef 视为不可识别的符号。如果同一符号出现在多个参数中,那么仅在第一次出现时有效。
如果未提供 filename 参数,那么 unifdef 会将其输出复制到标准输出,并会从标准输入中提取其输入。
支持以下选项:
正常操作补充。将被删除或留空的行会得到保留,反之亦然。
使用空白行代替“删除的行”。
纯文本选项。unifdef 会禁止尝试识别注释、单引号和双引号。
与定义符号 name 相关联的行。
与未定义符号 name 相关联的行。
忽略但输出与定义符号 name 相关联的行。如果要使用 ifdef 来分隔非 C 行,如构建中的注释或代码,那么您必须为 unifdef 指明将用于该目的的符号,使其不会解析其中的引号和注释。
忽略但输出与未定义符号 name 相关联的行。
将返回以下退出值:
操作成功。
操作失败。
有关下列属性的说明,请参见 attributes(7):
|
不正确的 else 或 endif。