dcsimg

Comment Function Macro for C/C++

WEBINAR:
On-Demand

Desktop-as-a-Service Designed for Any Cloud ? Nutanix Frame


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


Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date