Comment Function Macro for C/C++ 

I have looked at some of the other function comment macros and unfortunately, in my opinion, each one was lacking in some important area. Here are some of the features that I needed that I found missing in the other macros: 

return pointer type with spaces befor "*"; 

templates in function parameters 

undefined return 

split function declaration in a few lines

One thing I will add is that my macros does not handle stdcall/cdecl and another modifiers yet. 

Visual Studio Macro

Sub mcFunctionComments()

'DESCRIPTION: Function comments template

'Author : Y.Marchenko. Date : 23/09/2000

 author="Y.Marchenko"

 Delimeter="::"  ' class delimeters

 a_char=asc("=") ' character used in adornment

 n_char=60       ' amount of adornment characters used 

 Tab3=vbTab&vbTab&vbTab 'indent 3 tabs

 Header = Trim(ActiveDocument.Selection)

 if len(Header)=0 then

  MsgBox("Select function declaration") 

  Exit Sub 

 end if

 ActiveDocument.Selection.StartOfLine

 ActiveDocument.Selection.NewLine

 ActiveDocument.Selection.LineUp

 if ActiveDocument.Language <>"C/C++" then

  ActiveDocument.Selection=ActiveDocument.Language

  MsgBox("Wrong file type")

 else

  'Delete all comments from function declaration

  Loc=InStr(Header,"/*")

  while Loc

   s1=Left(Header,Loc-1)

   s2=Mid(Header,InStr(Header,"*/")+2)

   Header=s1&s2

   Loc=InStr(Header,"/*")

  wend

  Loc = InStr(Header, "(")

  f_title=Trim(Left(Header,Loc-1 ))

  f_pars=Trim(Mid(Header,Loc+1,InStr(Header, ")")-Loc-1))

  ActiveDocument.Selection = "/*" + String(n_char,a_char) 

                           & "*\" & vbNewLine

  'Get the function return type.

  arrStr=Split(f_title,Delimeter)

  UB=UBound(arrStr)

  For i=0 To UB

   arrStr(i)=Trim(arrStr(i))

  Next

  Loc=InStrRev(arrStr(0)," " )

  Loc1=InStrRev(arrStr(0),"*" )

  if Loc1>Loc then Loc=Loc1 ' pointer returned

  f_name=Mid(arrStr(0),Loc+1)

  f_return=Trim(Left(arrStr(0),Loc))

  if Len(f_return) = 0 then ' undefined return type

   f_return="int (by default)"

   if UB > 0 then

    arrStr(UB)=Replace(arrStr(UB)," ","")

    arrStr(UB)=Replace(arrStr(UB),vbTab,"")

    if arrStr(UB-1)=arrStr(UB)then

     f_return="constructor"

    elseif arrStr(UB) = "~" & arrStr(UB-1) then

     f_return="destructor"

    end if

   end if

  end if

  For i=1 To UBound(arrStr)

   f_name=f_name & Delimeter & Trim(arrStr(i))

  Next

  ActiveDocument.Selection = vbTab & "Author :" 

                           & author&Tab3 

                           & "Date : " 

                           & Date&Tab3 

                           & "version 1.0" 

                           & vbNewLine

  ActiveDocument.Selection = "  " 

                           & String(n_char,a_char) 

                           & vbNewLine

  ActiveDocument.Selection = vbTab 

                           & "Function :" 

                           & Tab3 

                           & f_name 

                           & vbNewLine

  ActiveDocument.Selection = vbTab 

                           & "Description :" 

                           & vbTab 

                           & vbNewLine

  ActiveDocument.Selection = vbTab 

                           & "Return :" 

                           & Tab3 

                           & f_return 

                           & vbTab 

                           & "-" 

                           & vbTab 

                           & vbNewLine

  'Get the function parameters.

  ActiveDocument.Selection = vbTab & "Parameters :" & vbNewLine

  arrStr=Split(f_pars,",")

  bTmpl=false ' template is the current parameter

  

  For i=0 To UBound(arrStr)

   arrStr(i)=Trim(arrStr(i))

   Loc = InStr(arrStr(i), "<")

   if Loc then bTmpl = true

   if bTmpl then

    if Loc = 0 then

     arrStr(i)=arrStr(i-1) & "," & arrStr(i)

     Loc = InStr(arrStr(i), ">")

     if Loc then ' template end

      bTmpl=false

      ActiveDocument.Selection = Tab3&Replace(arrStr(i),vbNewLine,"") 

                               & vbTab 

                               & "-" 

                               & vbTab&vbNewLine

     end if

    end if

   else

    ActiveDocument.Selection = Tab3&Replace(arrStr(i),vbNewLine,"") 

                             & vbTab 

                             & "-" 

                             & vbTab&vbNewLine

   end if

  Next

  ActiveDocument.Selection = vbTab & "Note :" & vbNewLine

  ActiveDocument.Selection = "\*" + String(n_char,a_char) & "*/"

 end if

End Sub