美文网首页
使用awk命令将C/C++ 宏定义转换为Java定义

使用awk命令将C/C++ 宏定义转换为Java定义

作者: Nothing_655f | 来源:发表于2021-01-20 15:20 被阅读0次

使用awk命令将C/C++ 宏定义转换为Java定义

项目中Hal 层的头文件的宏定义数字需要被上层应用的Java使用到,这个为了避免手动的复制粘贴,在编译时就使用awk 命令转换为Java 文件

使用的命令如下

awk 'BEGIN{print("package com.xxx.xxx\n\n" "class MyHeader{")}/#define/&&$3~/[0-9]/ {print("\tpublic static int ", $2 " = ", $3, ";")} END{print("\}//end")}' my_cmd.h > MyHeader.java

说明下这个文件为什么这么写

BEGIN{action}

在读取文件之前,首先执行的动作,注意该模式只执行一次,上述命令BEGIN 模式命令为

BEGIN{print("package com.xxx.xxx\n\n" "class MyHeader{")}

生成格式为

package com.xxx.xxx

class MyHeader{

END{action}

读完文件之后,最后执行的动作,注意该模式只执行一次,上述命令END 模式命令为

END{print("\}//end")}

生成格式为

}//end

pattern{action}

当目前读取的行符合pattern后,执行大括号里的动作,如果使用正则的话模式为

/regular pattern/{action}

当目前读取的行匹配该正则表达模式,则执行大括号里的action

compound pattern { action}

一个复合模式将表达式用 &&(AND), ||(OR), !(NOT), 以及括号组合起来; 当 compound pattern 为真时, 执行大括号里的action

上述命令使用了 compound pattern 模式

/#define/&&$3~/[0-9]/ {print("\tpublic static int ", $2 " = ", $3, ";")}

/#define/ 为匹配C 文件中的 #define 的匹配行

$3~/[0-9]/ 为使用了正则表达式,匹配第三列中的包含0-9数字所在的行

同时使用了 && ,用来判断这是一个宏定义的数字类型

输出格式 \t 为tab, 声明 public static int 类型,$2 变量名, $3 变量值

这里的pattern 输出为

        public static int  SYSTEM =  0001 ;
        public static int  SOURCE =  0x0002 ;
        public static int  VERSION =  0x0003 ;
        public static int  SN =  0x0004 ;

需要说明的的上述获取宏定义数字中的判断不一定正确,按照上述的判断 #define BUG “bug123” 这个就会被pattern 识别到了, 具体可以根据自己的情况修改

相关文章

  • 使用awk命令将C/C++ 宏定义转换为Java定义

    使用awk命令将C/C++ 宏定义转换为Java定义 项目中Hal 层的头文件的宏定义数字需要被上层应用的Java...

  • c++基础(宏)

    有关 c++ 中宏的定义以及使用是今天的重点内容。 C++ 的宏定义将一个标识符定义为一个字符串,源程序中的该标识...

  • Preprocessor

    预处理命令(主要有三种) 宏定义 文件包含 条件编译 宏定义如: 由于 C++已增加了 const 语句定义常量,...

  • iOS - 《系统宏》宏,预处理命令

    在ios中使用预处理命令[C语言的特殊命令] 1.宏定义 #define 与 #undef 2.带参数宏定义 3....

  • java 与C++区别(一)

    JAVA不使用指针,不支持头文件,不支持宏定义,JAVA可以动态分配内存; C++比较适合一些底层处理,JAVA比...

  • JNI--非静态native方法使用及c/c++调用Java变量

    上次说到了JNI调用的具体步骤,先再JAVA类中定义了静态native方法,使用javah命令生成c/c++的he...

  • [C++面试]宏相关问题

    1. 宏常量与宏函数 C++中用#define <宏名> <字符串>命令定义宏,在代码中将字符串替换宏名出现的位置...

  • c++技巧

    使用c/c++宏进行编程 c/c++中宏的是在预处理的过程中进行展开,可以用来进行函数的声明和定义. 在阅读lib...

  • 387. First Unique Character in a

    C++ Java Javascript 最优解,一样 注意C++中int数组定义后,值随机,Java中定义后值为0

  • C++ 宏定义

    define 中的三个特殊的符号 #define Conn(x,y) x##y #define ToChar(x)...

网友评论

      本文标题:使用awk命令将C/C++ 宏定义转换为Java定义

      本文链接:https://www.haomeiwen.com/subject/ztukzktx.html