Source Insight 使用进阶篇——宏语言使用
Source Insight 是阅读和编写代码的好东东,基本上也算得上是经典之作了,虽然还
有一点点小 bug,不过对于我们这些 C 程序员来说可是一旦拥有别无所求。但是大家可能
很 少 用 到 Source Insight 的 宏 语 言 (Source Insight macro language) 。 Source
Insight 中的宏语言类同于 MS Oce 中的 VBA,也具有程序化执行用户预定义操作的通
用宏语言功能。VBA 功能的强大就不用多作说明了,而 Source Insight 的宏语言也不逊
色。以下就以项目中一次实际应用为例进行说明。
Source Insight 宏语言语法和 C 语言类似,包括:顺序、分支和循环的程序结构。同
时宏语言可以实现字符操作、文件操作、控制 Source Insight 文件窗口、访问 symbol 列
表和 symbol 类型、查找替换等访问控制操作。
在一个移植类项目中,遇到了一个代码整体移植的需求。其中,有一项主要工作为代
码复制及主要 symbol 替换。即给绝大部分全局函数和全局变量追加前缀以便与移植前区
别,例如:函数”extern void func();”替换为”extern void pre$x_func();”,函数和变
量的声明、定义和使用都需进行替换。项目需求示意图如图 1:
图 1 项目需求示意图
这项工作人工进行需要找出需替换的 symbol,再做替换操作。由于代码量较大(约
几十万行代码总量,其中有 5000 多个 symbol 需要替换),人工替换非常繁琐,又易出
错。一时又找不到合适的工具,这时我们想到了 Source Insight 的宏语言。通过 Source
Insight 的宏语言,访问 Source Insight 的 symbol 列表,可以区分函数,全局变量,局
UCHAR i_var1;
UCHAR i_var2;
UCHAR i_var3;
UCHAR func1()
{
i_var1 = xx;
i_var2 = yy;
......
}
UCHAR func2()
{
func1();
......
}
复制
并
替换为
UCHAR pre$x_i_var1;
UCHAR pre$x_i_var2;
UCHAR pre$x_i_var3;
UCHAR pre$x_func1()
{
pre$x_i_var1 = xx;
pre$x_i_var2 = yy;
......
}
UCHAR pre$x_func2()
{
pre$x_func1();
......
}
原有代码 需要新生成的代码
评论5