unifdef 命令

命令参考大全,卷 5,s - u

unifdef 命令

用途

从文件中除去 ifdef 行。

语法

unifdef-t ] [  -l ] [  -c ] [  -DSymbol ] [  -USymbol ] [  -idSymbol ] [  -iuSymbol ] [  File ]

描述

unifdef 命令用于除去文件中的 ifdef 行,而不会进行别的操作。为了正确运行,unifdef 命令认出嵌套的 ifdefs、注释、C 语言语法的单引号和双引号,但不包括文件或不解释宏。unifdef 命令认出但并不除去注释。

如果没有指定 Fileunifdef 命令从标准输入得到输入,并复制输出到标准输出。

一旦指定 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 命令识别以下关键字:

  • ifdef
  • ifndef
  • else
  • endif
  • elif

标志

 

-c补充unifdef 命令的操作。即保留被除去的行,反之亦然。
-D Symbol指定定义的符号。
File指定输入源。
-id Symbolunifdef 命令不会试图识别指定的 ifdef 内的注释、单引号或双引号,但这些行将被拷出。
-iu Symbolunifdef 命令不会试图识别指定的 ifdef 内的注释、单引号或双引号。这些行不会拷出。
-l用空行替换除去的行,而不是将其删除。
-t允许 unifdef 命令用于纯文本(不是 C 语言代码): unifdef 命令不会试图识别注释、单引号和双引号。
-U Symbol指定要取消定义的符号。

退出状态

该命令返回以下退出值:

0输出为输入的精确副本。
1输出不是输入的精确副本。
2命令因为 EOF 过早发生、不相称的elseelifendif而失败。

示例

  1. 示例如下:

     

    unifdef -DA original.c > modified.c

    使 unifdef 命令阅读original.c文件,并除去 #ifdef A 行。然后除去与 #ifdef A 相关的在 #elif/#else 后的所有行,一直到 #endif。输出放在 modified.c 文件中。

  2. 示例如下:

     

    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 系统用户指南:操作系统与设备》中的『命令概述』

 
15 import argparse 16 import filecmp 17 import os 18 import re 19 import subprocess 20 import sys 21 22 def run_headers_install(verbose, gen_dir, headers_install, unifdef, prefix, h): 23 if not h.startswith(prefix): 24 print('error: expected prefix [%s] on header [%s]' % (prefix, h)) 25 return False 26 27 out_h = os.path.join(gen_dir, h[len(prefix):]) 28 (out_h_dirname, out_h_basename) = os.path.split(out_h) 29 env = os.environ.copy() 30 env["LOC_UNIFDEF"] = unifdef 31 cmd = ["sh", headers_install, h, out_h] 32 33 if verbose: 34 print('run_headers_install: cmd is %s' % cmd) 35 36 result = subprocess.call(cmd, env=env) 37 38 if result != 0: 39 print('error: run_headers_install: cmd %s failed %d' % (cmd, result)) 40 return False 41 return True 42 43 def gen_display_headers(verbose, gen_dir, headers_install, unifdef, display_include_uapi): 44 error_count = 0 45 for h in display_include_uapi: 46 display_uapi_include_prefix = os.path.join(h.split('/include/uapi')[0], 'include', 'uapi') + os.sep 47 if not run_headers_install( 48 verbose, gen_dir, headers_install, unifdef, 49 display_uapi_include_prefix, h): error_count += 1 50 return error_count 51 52 def main(): 53 """Parse command line arguments and perform top level control.""" 54 parser = argparse.ArgumentParser( 55 description=__doc__, 56 formatter_class=argparse.RawDescriptionHelpFormatter) 57 58 # Arguments that apply to every invocation of this script. 59 parser.add_argument( 60 '--verbose', action='store_true', 61 help='Print output that describes the workings of this script.') 62 parser.add_argument( 63 '--header_arch', required=True, 64 help='The arch for which to generate headers.') 65 parser.add_argument( 66 '--gen_dir', required=True, 67 help='Where to place the generated files.') 68 parser.add_argument( 69 '--display_include_uapi', required=True, nargs='*', 70 help='The list of techpack/*/include/uapi header files.') 71 parser.add_argument( 72 '--headers_install', required=True, 73 help='The headers_install tool to process input headers.') 74 parser.add_argument( 75 '--unifdef', 76 required=True, 77 help='The unifdef tool used by headers_install.') 78 79 args = parser.parse_args() 80 81 if args.verbose: 82 print('header_arch [%s]' % args.header_arch) 83 print('gen_dir [%s]' % args.gen_dir) 84 print('display_include_uapi [%s]' % args.display_include_uapi) 85 print('headers_install [%s]' % args.headers_install) 86 print('unifdef [%s]' % args.unifdef) 87 88 return gen_display_headers(args.verbose, args.gen_dir, 89 args.headers_install, args.unifdef, args.display_include_uapi) 90 91 if __name__ == '__main__': 92 sys.exit(main()) 93 94
最新发布
09-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值