本文主要是介绍vs2005中宏的制作与应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0 背景
我们在写代码时,为了防止头文件重复引用,往往会用以下方法(以文件CMpeg4DecHandler.h为例):
文件开始加入
#ifndef CXX_CMPEG4DECHANDLER_H
#define CXX_CMPEG4DECHANDLER_H
文件结束加入
#endif //CXX_CMPEG4DECHANDLER_H
为了提高编译速度,我们往往会在引用此头文件的地方加入:
#ifndef CXX_CMPEG4DECFILTER_H
#include "CMpeg4DecFilter.h"
#endif
但是很多人在写代码的时候,引用头文件的地方会忘记加入#ifndef #endif这些代码。文件少的话,其实没什么影响,如果文件很多很多,对编译速度的影响还是很大的。
为了减少麻烦,特制作一个宏,这样的话对于缺少#ifndef #endif的时候,就能直接用宏生成了。(使用这个宏有个前提,就是每个头文件的CXX_CMPEG4DECHANDLER_H都是同样的格式:CXX_ + 文件名大写 + _H。其他的格式也可以,需要自己改宏的VB代码)
1 宏制作
在vs2005里,Tools->Macros->New Macro Project,建立一个新的宏工程。在Macro Explorer里面有我们新建的工程。双击我们新建的工程下的Module1,就可以编辑了。
在Public Module Module1和 End Module之间加入如下代码:
'Add #ifndef CXX_XXXX_H #include XXXX.h #endif to #include XXXX.h
Sub AddFunComment()
Dim DocSel As EnvDTE.TextSelection
Dim objTextSelection As TextSelection
Dim text As String
Dim subtext As String
objTextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
text = objTextSelection.Text
Dim i = text.IndexOf("""")
Dim j = text.LastIndexOf(".")
subtext = text.Substring(i + 1, j - i - 1)
subtext = subtext.ToUpper()
DocSel = DTE.ActiveDocument.Selection
DocSel.NewLine()
DocSel.Text = "#ifndef CXX_"
DocSel.Text = subtext
DocSel.Text = "_H"
DocSel.NewLine()
DocSel.Text = text
DocSel.NewLine()
DocSel.Text = "#endif"
DocSel.NewLine()
End Sub
然后保存即可。
2 使用
选中代码
#include "CMpeg4DecFilter.h"
然后在Macro Explorer下找到我们新建工程下的module1下的AddFunComment,看看效果吧。
这篇关于vs2005中宏的制作与应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!