从文件中除去 ifdef 行。
unifdef [ -t ] [ -l ] [ -c ] [ -DSymbol ] [ -USymbol ] [ -idSymbol ] [ -iuSymbol ] [ File ]
unifdef 命令用于除去文件中的 ifdef 行,而不会进行别的操作。为了正确运行,unifdef 命令认出嵌套的 ifdefs、注释、C 语言语法的单引号和双引号,但不包括文件或不解释宏。unifdef 命令认出但并不除去注释。
如果没有指定 File,unifdef 命令从标准输入得到输入,并复制输出到标准输出。
一旦指定 Symbol,ifdef 中的行最终被复制到输出或除去。与符号关联的 ifdef、ifndef、else、elif 和 endif 行也要除去。涉及未指定的 Ifdef 不会更改并和相关 ifdef、else、elif 和 endif 行一起拷出。如果相同符号在一个以上的自变量里出现,仅第一个出现的有意义。例如,如果 ifdef X 嵌套在另一个 ifdef X内, 内部的 ifdef 即被认为是无法识别的符号。
当使用 ifdef 定界非 C 语言行,如注释或未完成的代码时,有必要指定为此目的使用哪些符号。否则,unifdef 命令将试图分析 ifdef 行的引用和注释。
unifdef 命令不能处理 cpp 构造,例如:
#if defined(X) || defined(Y)
或者
#elif X
或者
#elif defined(X) || defined(Y)
unifdef 命令识别以下关键字:
该命令返回以下退出值:
0 | 输出为输入的精确副本。 |
1 | 输出不是输入的精确副本。 |
2 | 命令因为 EOF 过早发生、不相称的else、elif 或endif而失败。 |
unifdef -DA original.c > modified.c
使 unifdef 命令阅读original.c文件,并除去 #ifdef A 行。然后除去与 #ifdef A 相关的在 #elif/#else 后的所有行,一直到 #endif。输出放在 modified.c 文件中。
unifdef -UA original.c > modified.c
使 unifdef 命令读 original.c文件,并 除去 #ifdef A,一直到其与其关联的 #elif//#else 或 #endif。对于 #elif,#elif 由 #if替换。对于 #else, #else 同与其相关的 #endif 一同删除。 输出放在 modified.c 文件中。
/usr/bin/unifdef | 包含unifdef命令。 |
cpp 命令。
《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『命令概述』。