为了阅读代码及修复BUG的方便,公司里面函数的注释都是固定的格式,每次添加注释都是从原来写好的地方复制来一段,然后一项一项的去修改。作为程序员大军中的一员,要发挥懒的特性,一懒到底,网上查了好久,再参考VC6.0里自带的宏,终于勉勉强强写了一个宏来自动添加函数注释,一般的函数都可以用了,有小错误的地方也只能手动改了。先上个公司规定的函数的格式:
// ---------------------------------------------------------------
// 名称: CopyData
// 功能: 图元之间拷贝数据
// 变量: [in,out] des -- 目标图元
// [in] src -- 原始图元
// 返回: 无
// 编写: 天蓬,20121009
// ---------------------------------------------------------------
下面是参考了N多文章查了N多资料弄来的宏代码(没办法,谁让咱是菜鸟呢):
Sub FunctionSign()
'DESCRIPTION 函数签名
Dim obj
obj = Now()
Dim mo As Integer
Dim da As Integer
Dim funct As String '保存选择的行
Dim ret As String
Dim func As String '去除空格后的整个函数原型
Dim fName As String '函数名
Dim fPara As String '函数参数字符串
Dim paras() As String
Dim temps() As String
Dim flag1, flag2, flag3 As Integer
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
If DocSel.Text = "" Then
Exit Sub
End If
funct = DocSel.Text
func = Trim(DocSel.Text)
flag1 = InStr(func, " ")
ret = Left(func, flag1 - 1)
flag1 = InStr(func, "::")
If flag1 = 0 Then
flag1 = InStr(func, " ")
func = Right(func, Len(func) - flag1)
Else
func = Right(func, Len(func) - flag1 - 1)
End If
flag2 = InStr(func, "(")
fName = Left(func, flag2 - 1)
func = Right(func, Len(func) - flag2)
flag3 = InStr(func, ")")
fPara = Left(func, flag3 - 1)
paras = Split(fPara, ",")
For i As Integer = 0 To paras.Length - 1
paras(i) = Trim(paras(i))
temps = Split(paras(i))
paras(i) = temps(temps.Length - 1)
Next
DocSel.NewLine()
DocSel.Text = "// ---------------------------------------------------------------"
DocSel.NewLine()
DocSel.Text = "// 名称: " + fName
DocSel.NewLine()
DocSel.Text = "// 功能: "
DocSel.NewLine()
DocSel.Text = "// 变量: "
If paras.Length = 0 Then
DocSel.Text = "无"
ElseIf paras.Length = 1 And paras(0) = "" Then
DocSel.Text = "无"
Else
DocSel.Text = "[in] " + paras(0) + " -- "
For j As Integer = 1 To paras.Length - 1
DocSel.NewLine()
DocSel.Text = "// [in] " + paras(j) + " -- "
Next
End If
DocSel.NewLine()
DocSel.Text = "// 返回: "
If ret = "void" Then
DocSel.Text = "无"
End If
DocSel.NewLine()
DocSel.Text = "// 编写: 天蓬," + CStr(Year(obj))
mo = Month(obj)
da = Day(obj)
If mo < 10 Then
DocSel.Text = "0" + CStr(mo)
Else
DocSel.Text = CStr(mo)
End If
If da < 10 Then
DocSel.Text = "0" + CStr(da)
Else
DocSel.Text = CStr(da)
End If
DocSel.NewLine()
DocSel.Text = "// ---------------------------------------------------------------"
DocSel.NewLine()
DocSel.Text = funct
End Sub
先凑合用着吧,等熟悉一些了再整完美一些。
2014.6.12修改:
上面的宏需要选中整个函数头部才能正常使用,不太方便,所以可以添加一句
DocSel.SelectLine()
在
DocSel = DTE.ActiveDocument.Selection
这一句代码之后。这样,只要把光标放到函数头部所在行就可以了。